Как отслеживать установленные пакеты 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 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'
теперь, я вижу все пакеты в мою .