Как отслеживать pip-установленные пакеты в среде Anaconda (Conda)?
Я установил и использую Анаконда распространение Python, и я начал использовать среду Anaconda (Conda). Я могу использовать стандарт conda install...
команда для размещения пакетов из дистрибутива в мои среды, но для использования чего-либо снаружи (т. е. Flask-WTF, flask-sqlalchemy и alembic) мне нужно использовать pip install
в активной среде. Однако, когда я смотрю на содержимое среды, либо в каталоге, либо с помощью conda list
эти pip install
пакеты ed не отображаются.
используя pip freeze
и pip list
просто перечисляет каждый пакет, который я когда-либо установленных.
есть ли способ отслеживать, что находится в каждой из моих анаконды env
s (оба 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 сгенерировал информацию о яйце. Таким образом, у вас есть в основном три варианта.
вы можете взять Союз
conda list
иpip freeze
и управлять пакетами, которые были установлены с помощьюconda
(которые показывают вconda list
) Сconda
пакет менеджер и те, которые установлены сpip
(которые показывают вpip freeze
а неconda list
) Сpip
.установить в вашей среде только
python
,pip
иdistribute
пакеты и управлять всем сpip
. (Это не так тривиально, если вы находитесь на Windows...)построить свой собственный
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'
теперь, я вижу все пакеты в мою .