Как отслеживать 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 113

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. Но обычно это сводится к:

 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.

1a)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. Я ввел No, а затем увидел это сообщение:

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

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

этот файл tar.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 установить.

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

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

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

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

>pip install .

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

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

/ usr / local/anaconda / lib / python2. 7/site-packages

если я потом создам новый 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, теперь Конда видит это:

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

так что я думаю, что взаимодействие между у conda и pip есть некоторые проблемы-т. е. использование pip для установки локального пакета из одного conda env делает этот пакет доступным (но не видимым через список conda) для всех других env conda той же версии 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'

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