Как отслеживать установленные пакеты pip в среде Anaconda (Conda)?

Я установил и использую Анаконда дистрибутив Python, и я начал использовать среду Anaconda (Conda). Я могу использовать стандарт conda install... команда для размещения пакетов из дистрибутива в мои среды, но для использования чего-либо вне (например, Flask-WTF, flask-sqlalchemy и alembic) мне нужно использовать pip install в активной среде. Однако, когда я смотрю на содержимое среды, либо в каталоге, либо с помощью conda list эти pip installпакеты ed не отображаются.

используя pip freeze и pip list просто перечисляет каждый пакет, который я когда-либо установленных.

есть ли способ отслеживать, что находится в каждом из моих Анаконда envs (оба pip и conda установить)?

9 ответов


conda-env теперь делает это автоматически (если pip был установлен с conda).

вы можете увидеть, как это работает, используя инструмент экспорта, используемый для миграции среды:

conda env export -n <env-name> > environment.yml

в файле будут перечислены как пакеты conda, так и пакеты pip:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

если вы хотите выполнить экспорт среды, переместите environment.yml на новую хост-машину и запустите:

conda env create -f path/to/environment.yml

conda будет отслеживать только установленные пакеты. И pip даст вам пакеты, которые были установлены с помощью pip сам установщик или они использовали setuptools в своем setup.py таким образом, conda build генерирует информацию о яйце. Таким образом, у вас есть три варианта.

  1. вы можете взять Союз conda list и pip freeze и управлять пакетами, которые были установлены с помощью conda (это шоу в conda list) С conda пакет менеджер и те, которые установлены с pip (которые показывают в pip freeze а не conda list) С pip.

  2. установить в вашей среде только python, pip и distribute пакеты и управлять всем с pip. (Это не так тривиально, если вы находитесь в Windows...)

  3. создайте свой собственный conda пакеты, и управлять всем с conda.

я лично рекомендовал бы третий вариант, так как его очень легко построить conda пакеты. Существует репозиторий Git примеров рецептов в учетной записи GitHub continuum. Но обычно все сводится к следующему:--25-->

 conda skeleton pypi PACKAGE
 conda build PACKAGE

или так:

conda pipbuild PACKAGE

также, Когда вы построили их один раз, вы можете загрузить их в https://binstar.org/ и просто установите оттуда.

тогда вы будете иметь все удалось с помощью conda.


существует ветвь conda (new-pypi-install), которая добавляет лучшую интеграцию с pip и PyPI. В частности, список conda также покажет установленные пакеты pip, и conda install сначала попытается найти пакет conda и не сможет использовать pip для установки пакета.

эту ветку планируется объединить позже на этой неделе, так что версия 2.1 conda будет иметь лучшую pip-интеграцию с conda.


я последовал ответу @ Viktor Kerkez и имел смешанный успех. Я обнаружил, что иногда этот рецепт

стадион conda скелет pypi пакет

conda build PACKAGE

было бы похоже, что все работает, но я не мог успешно импортировать пакет. Недавно я спросил об этом на группа пользователей Anaconda и слышал от самого @ Travis Oliphant о лучшем способе использования conda для создания и управления пакетами, которые не корабль с анакондой. Вы можете прочитать эту тему здесь, но я опишу подход ниже, чтобы, надеюсь, сделать ответы на вопрос OP более полными...

пример: я собираюсь установить отличный prettyplotlib пакет в Windows с помощью conda 2.2.5.

1А) conda build --build-recipe prettyplotlib

вы увидите, что все сообщения сборки выглядят хорошо до финального тестового раздела сборки. Я видел эту ошибку

файл "C:\Anaconda\conda-bld\test-tmp_dir\run_test.py", строка 23 import None SyntaxError: невозможно назначить ни одному тесту не удалось: prettyplotlib-0.1.3-py27_0

1b) перейдите в /conda-recipes / prettyplotlib и отредактируйте мета.файл yaml. В настоящее время пакеты настраиваются как на шаге 1a, что приводит к файлам yaml, которые имеют ошибку в . Например, вот как мой искал prettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

редактировать этот раздел удалить пустую строку предшествовать, а также удалить лишние линии prettyplotlib. На момент написания этой статьи я обнаружил, что мне нужно отредактировать большинство мета.файлы yaml, подобные этому для внешних пакетов, которые я устанавливаю с помощью conda, означают, что есть пустая строка импорта, вызывающая ошибку вместе с избыточным импортом данного пакета.

1С) повторите команду из 1a, которая должна завершиться с ошибкой на этот раз. В конце сборки вас попросят если вы хотите загрузить сборку в бинстар. Я ввел нет, а затем увидел это сообщение:

если вы хотите загрузить этот пакет в binstar.org позже введите:

$ binstar загрузить C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

эта смола.файл bz2-это сборка, которую вам теперь нужно установить.

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

после этих шагов я успешно используется conda для установки ряда пакетов, которые не поставляются с Anaconda. Ранее я установил некоторые из них с помощью pip, поэтому я сделал pip uninstall PACKAGE перед установкой пакета с conda. Используя conda, я теперь могу управлять (почти) всеми моими пакетами с помощью одного подхода, а не с помощью сочетания вещей, установленных с conda, pip, easy_install и python setup.py установить.

для контекста, я думаю, что это последнее сообщение в блоге от @Travis Oliphant будет полезно для людей как и я, кто не ценит все, что входит в надежную упаковку Python, но, безусловно, ценит, когда материал "просто работает". conda кажется отличным способом продвижения вперед...


вот почему я написал придирчиво:http://picky.readthedocs.io/

Это пакет python, который отслеживает пакеты, установленные с помощью pip или conda в virtualenvs и conda envs.


Я думаю, что здесь не хватает, когда вы делаете:

>pip install .

для установки локального пакета с setup.py, он устанавливает пакет, который виден все conda envs, которые используют то же самое версия python. Обратите внимание, что я использую версию conda pip!

например, если я использую python2.7 он помещает локальный пакет здесь:

/ usr / local/anaconda/lib / python2.7 / сайт-пакеты

если я позже создам новый conda env с python=2.7 (=По умолчанию):

>conda create --name new

>source activate new

а потом сделайте:

(new)>conda list    // empty - conda is not aware of any packages yet

однако, если я делаю:

(new)>pip list      // the local package installed above is present

таким образом, в этом случае conda не знает о пакете pip, но пакет доступен для python.

однако, если я вместо этого установлю локальный пакет (снова используя pip) после Я создал (и активировал) новый conda env, теперь стадион conda видит он:

(new)>conda list   // sees that the package is there and was installed by pip

поэтому я думаю, что взаимодействие между у conda и pip есть некоторые проблемы-т. е. использование pip для установки локального пакета из одного conda env делает этот пакет доступным (но не видимым через список conda) для всех других conda env той же версии python.


conda env export перечисляет все пакеты conda и pip в среде. conda-env должен быть установлен в корне conda (conda install -c conda conda-env).

написать environment.yml файл, описывающий текущую среду:

conda env export > environment.yml

ссылки:


Я обычно префикс папки "bin/pip" для конкретной среды, которую вы хотите установить пакет перед командой "pip". Например, если вы хотите установить pymc3 в среде py34, вы должны использовать следующую команду:

~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3 

вам в основном просто нужно найти правильный путь к папке "bin/pip" вашей среды и поместить его перед командой установки.


мой which pip показывает следующий путь:

$ which pip
/home/kmario23/anaconda3/bin/pip

Итак, любой пакет, который я устанавливаю с помощью pip install <package-name> должен быть отражен в списке пакетов, когда список экспортируется с помощью:

$ conda list --export > conda_list.txt

но я не знаю. Поэтому вместо этого я использовал следующую команду, предложенную несколькими другими:

# get environment name by
$ conda-env list

# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'

теперь, я вижу все пакеты в мою .