Где pip и conda хранят список установленных пакетов, чтобы они знали, кто что установил?

#python #pip #conda

#python #pip #conda

Вопрос:

Я сделал некоторые pip install в своей conda среде, и кажется, что оба conda и pip следуют соглашению python, устанавливая пакеты в site-packages папку.

Когда я использую pip list и conda list , кажется, они вели хороший учет того, кто какие пакеты установил. Вопрос в том, где хранятся эти два списка установки в Linux?

Комментарии:

1. Возможно, следуйте исходному коду для списка pip .

2. какую ОС вы используете?

Ответ №1:

В случае pip list , библиотека pkg_resources используется для доступа к файлам ресурсов для библиотек Python.

Для этого рабочий набор получает доступ к активным дистрибутивам. Из документов рабочий набор

представляет дистрибутивы, которые в настоящее время активны в sys.path.

Таким образом, при вызове экземпляра WorkingSet по умолчанию он будет искать модули, расположенные на sys.path .

Например, когда я запускаю sys.path

 ['/opt/conda/lib/python37.zip',
 '/opt/conda/lib/python3.7',
 '/opt/conda/lib/python3.7/lib-dynload',
 '',
 '/opt/conda/lib/python3.7/site-packages',
 '/opt/conda/lib/python3.7/site-packages/IPython/extensions'
]
  

Это пути, которые будут использоваться для поиска установленных пакетов. Ниже приведен пример

 import pkg_resources

# Define working set
working_set = pkg_resources.working_set

# Package, version and location 
[d for d in working_set]
>>>
[zipp 3.1.0 (/opt/conda/lib/python3.7/site-packages),
 zict 2.0.0 (/opt/conda/lib/python3.7/site-packages),
...,
attrs 19.3.0 (/opt/conda/lib/python3.7/site-packages),
 async-generator 1.10 (/opt/conda/lib/python3.7/site-packages),
 alembic 1.4.2 (/opt/conda/lib/python3.7/site-packages)]
  

Комментарии:

1. в дополнение к этому ответу я обнаружил, что в вышеупомянутых папках pip list ищет файл с именем like package_name.egg-info с Version полем в нем ИЛИ папку с именем like package_name-x.y.z.dist-info с именем файла METAFILE в нем.

2. conda list поиск законного .json файла для каждого пакета в <CONDA_PREFIX>/conda-meta папке