2013-09-05 4 views
106

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

С помощью pip freeze и pip list перечислены все пакеты, которые я когда-либо устанавливал.

Есть ли способ отслеживать, что находится в каждом из моих Anaconda env s (установлены как pip, так и conda)?

+6

Используйте 'pip', установленный с' conda', например. '~/Анаконда/бен/pip'. Используйте его для установки пакетов в среду 'conda', а также для объединения пакетов, установленных с этим« pip »и с' conda install'. – osa

+5

'conda list' в течение некоторого времени включает в себя пакеты python, которые были установлены другими способами (например, pip, easy-install, непосредственно с' python setup.py install' и т. Д.) – kalefranz

ответ

84

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

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

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

Файл перечислит как Конда пакеты и пакеты пипсов:

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 
64

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

  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.

+2

Я просто попытался '~/anaconda/bin/pip install memory-profiler' и 'conda install numba', и оба они показаны в' ~/anaconda/bin/pip freeze'. – osa

+1

«git-хранилище примеров рецептов в учетной записи github континуума» Вы имеете в виду https://github.com/ContinuumIO/anaconda-recipes? Просьба указать, если вы можете – endolith

+0

Это фактически не устанавливает пакет, чтобы вы могли его импортировать. Вы должны выполнить 'conda install C: \ ... PACKAGE-0.0.0-py27_0.tar.bz2', как описано в http://stackoverflow.com/a/20750388/125507 – endolith

23

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

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

+2

Я хотел бы указать, что это уже работает в conda 2.2.3 (и, вероятно, до этого). Способ, которым это работает, заключается в том, что если вы пытаетесь «установить пакет установки» и не можете найти рецепт conda, он пытается установить его через 'pip' (а затем отслеживает его). Это даже полезно предлагает установить 'pip', если не в вашей среде. Спасибо Трэвису за всю вашу работу! – jorgeca

+5

Уточнение, так как я неправильно прочитал это несколько раз. @Travis означает, что я думаю, что если кто-то работает внутри конды, тогда запуск pip сначала будет искать пакеты conda? Реверс определенно не соответствует действительности - установка conda не ищет пакеты pypi, даже элементы на pypi.binstar.org. Это относится к конде 3.5.2. – AnneTheAgile

+8

Удалено ли это? Если я запустил, скажем, 'conda install autopep8', он сообщает мне« Пакет не найден »и что я должен искать anaconda.org вручную. – endolith

15

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

conda skeleton pypi PACKAGE

conda build PACKAGE

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

Пример: Я собираюсь установить отличный prettyplotlib package на Windows, используя conda 2.2.5 ,

1a)conda build --build-recipe prettyplotlib

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

File "C:\Anaconda\conda-bld\test-tmp_dir\run_test.py", line 23 import None SyntaxError: cannot assign to None TESTS FAILED: prettyplotlib-0.1.3-py27_0

1b) Перейти в/Конда-рецепты/prettyplotlib и редактировать файл meta.yaml. В настоящее время пакеты, настроенные как на этапе 1a, приводят к файлам yaml, которые имеют ошибку в разделе test. Например, вот как мое искал prettyplotlib

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

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

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

If you want to upload this package to binstar.org later, type:

$ 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

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

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

+2

Использование conda версии 3.5.2, команда $ conda build --build-recipe XXX; Ошибки с «нераспознанными аргументами: --build-recipe». Полный ответ; Использование: conda-build [-h] [-c] [-no-binstar-upload] [--output] [-s] [-t] [-no-test] [-V] [- q] RECIPE_PATH [RECIPE_PATH ...] conda-build: ошибка: непризнанные аргументы: --build-recipe – AnneTheAgile

2

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

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

conda env export > environment.yml 

Ссылки:

2

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

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

Вы в основном просто нужно найти правильный путь к вашей среде «бен/пип» папку и положил ее перед команды установки.

7

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

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

0

Мой 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 файле.

3

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

>pip install . 

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

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

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

Если я потом создать новый Конда окр с питона = 2.7 (= по умолчанию):

>conda create --name new 

>source activate new 

А потом сделать:

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

Howe веры, если я:

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

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

Однако, если я вместо того, чтобы установить локальный пакет (снова используя пип) после я создал (и активирован) новый Конда окр, Теперь Конда видит:

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

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