Как я могу отслеживать пакеты с установленными пакетами в среде Anaconda (Conda)?
Я установил и использовал Anaconda дистрибутив Python, и я начал использовать среду Anaconda (Conda). Я могу использовать стандартную команду conda install...
для размещения пакетов из дистрибутива в моей среде, но для использования чего-либо снаружи (например, Flask-WTF, flask-sqlalchemy и alembic) мне нужно использовать pip install
в активной среде. Однако, когда я смотрю на содержимое среды, либо в каталоге, либо с помощью conda list
, эти пакеты pip install
ed не отображаются.
Использование pip freeze
и pip list
просто перечисляет каждый пакет, который я когда-либо устанавливал.
Есть ли способ отслеживать, что находится в каждой моей Anaconda env
(установлены оба pip
и conda
)?
Ответы
Ответ 1
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
Ответ 2
conda
будет отслеживать только те пакеты, которые он установил. И pip
предоставит вам пакеты, которые либо были установлены с помощью самого установщика pip
, либо они использовали setuptools
в своей setup.py
, поэтому сборка conda генерировала информацию о яйце. Таким образом, у вас есть в основном три варианта.
-
Вы можете принять объединение 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
.
Ответ 3
Существует ветка conda (new-pypi-install), которая добавляет лучшую интеграцию с pip и PyPI. В частности, список conda также покажет пакеты, установленные для пакета, и установка conda сначала попытается найти пакет conda, и сбой, который будет использовать pip для установки пакета.
Эта ветка должна быть объединена позже на этой неделе, так что версия 2.1 конды будет иметь лучшую интеграцию с конда.
Ответ 4
Я последовал за ответом @Viktor Kerkez и имел смешанный успех. Я обнаружил, что иногда этот рецепт
Конда скелет pypi ПАКЕТ
conda build ПАКЕТ
будет выглядеть так, как будто все работает, но я не смог успешно импортировать ПАКЕТ. Недавно я спросил об этом в группе пользователей Anaconda и услышал от самого @Travis Oliphant лучший способ использовать конду для создания и управления пакетами, которые не поставляются с Anaconda. Вы можете прочитать эту тему здесь, но я опишу подход ниже, чтобы надеяться сделать ответы на вопрос OP более полными...
Пример: я собираюсь установить отличный пакет prettyplotlib в Windows, используя conda 2.2.5.
1a) conda build --build-recipe prettyplotlib
Вы увидите, что сообщения сборки хорошо выглядят до окончательного раздела TEST сборки. Я видел эту ошибку
Файл "C:\Anaconda\conda-bld\test-tmp_dir\run_test.py", строка 23 import None СинтаксисError: нельзя назначить None TESTS FAILED: prettyplotlib-0.1.3-py27_0
1b) Перейдите в /conda -recipes/prettyplotlib и отредактируйте файл meta.yaml. В настоящее время пакеты, настроенные как на этапе 1a, приводят к файлам yaml, которые имеют ошибку в разделе test
. Например, вот как я искал prettyplotlib
test: # Python imports imports:
-
- prettyplotlib
- prettyplotlib
Отредактируйте этот раздел, чтобы удалить пустую строку, которой предшествует -, а также удалить избыточную строку prettyplotlib. На момент написания этой статьи я обнаружил, что мне нужно отредактировать большинство файлов meta.yaml, подобных этому, для внешних пакетов, которые я устанавливаю с помощью conda, что означает, что существует пустая строка импорта, вызывающая ошибку вместе с избыточным импортом данного пакета.
1c) Повторите команду из 1a, которая на этот раз должна завершиться ошибкой. В конце сборки вы спросите, хотите ли вы загрузить сборку binstar. Я ввел No, а затем увидел это сообщение:
Если вы хотите загрузить этот пакет на binstar.org позже, введите:
$binstar upload 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
до установки PACKAGE с помощью conda. Используя conda, теперь я могу управлять (почти) всеми моими пакетами одним подходом, вместо того, чтобы комбинировать материал, установленный с настройками conda, pip, easy_install и python setup.py.
Для контекста, я думаю, что это недавнее сообщение в блоге от @Travis Oliphant будет полезно для таких людей, как я, которые не ценят все, что входит в надежную упаковку Python, но, безусловно, цените, когда материал "просто работает". conda кажется отличным способом продвижения вперед...
Ответ 5
Вот почему я написал Picky: http://picky.readthedocs.io/
Это пакет python, который отслеживает пакеты, установленные с помощью pip или conda как в virtualenvs, так и в conda envs.
Ответ 6
Я думаю, что здесь отсутствует то, что вы делаете:
>pip install .
чтобы установить локальный пакет с setup.py,
он устанавливает пакет, который отображается всем кондам, которые используют
ту же версию python. Примечание. Я использую версию conda pip!
Например, если я использую 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, теперь conda видит его:
(new)>conda list // sees that the package is there and was installed by pip
Итак, я думаю, что взаимодействие между conda и pip имеет некоторые проблемы, т.е. использование pip для установки локального пакета из одной конды env делает этот пакет доступным (но не просмотренным через список conda) ко всем другим conda envs того же версия python.
Ответ 7
conda env export
перечисляет все пакеты conda и pip в среде. conda-env
должен быть установлен в корень конды (conda install -c conda conda-env
).
Чтобы написать файл environment.yml
, описывающий текущую среду:
conda env export > environment.yml
Литература:
Ответ 8
Я обычно префикс папки "bin/pip" для конкретной среды, в которую вы хотите установить пакет, перед командой "pip". Например, если вы хотите установить pymc3 в среду py34, вы должны использовать эту команду:
~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3
Вам просто нужно найти правильный путь к папке "bin/pip" вашей среды и поместить его перед командой установки.
Ответ 9
Мой 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'
Теперь я могу видеть все пакеты в моем файле all-packages.yml
.
Ответ 10
Вы можете начать с установки приведенной ниже команды в среде conda:
conda install pip
Затем следует установить все необходимые pip-пакеты в данной среде.
После установки всех пакетов conda и pip для экспорта среды используйте:
conda env export -n <env-name> > environment.yml
Это создаст нужный файл в папке