Подтвердить что ты не робот

Как я могу отслеживать пакеты с установленными пакетами в среде 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)?

4b9b3361

Ответ 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

Это создаст нужный файл в папке