Як я можу відслідковувати встановлені пакетом пакети в середовищі Anaconda (Conda)?


141

Я встановив і використовую дистрибуцію 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встановленій)?


7
Використовуйте pipвстановлений з conda, наприклад ~/anaconda/bin/pip. Використовуйте його для встановлення пакетів у condaсередовище, а також для перегляду об'єднання пакетів, встановлених разом із цим pipта з conda install.
osa

7
conda listна деякий час включені пакети python, які були встановлені іншими способами (наприклад, pip, проста установка, безпосередньо python setup.py install, тощо, тощо)
kalefranz

1
Не оновлюйте пошту, або цей експорт отримає шланг
Ендрю Кассіді

Відповіді:


120

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

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пакети дуже просто . На рахунку github континууму є сховище git із прикладами рецептів. Але зазвичай зводиться до:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

або просто:

conda pipbuild PACKAGE

Також коли ви створили їх один раз, ви можете завантажити їх на https://binstar.org/ і просто встановити звідти.

Тоді ви матимете все, чим керуєте conda.


3
Я просто спробував ~/anaconda/bin/pip install memory-profilerі conda install numba, і вони обидва показані в ~/anaconda/bin/pip freeze.
osa

2
"git сховище прикладних рецептів на рахунку github континууму" Ви маєте на увазі github.com/ContinuumIO/anaconda-recipes ? Будь ласка, посилайтесь, якщо зможете
endolith

Це фактично не встановлює пакет, щоб ви могли імпортувати його. Ви повинні зробити так, conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2як описано в stackoverflow.com/a/20750388/125507
endolith

Я б сказав, що спочатку завжди conda install python=3.x.yу вашому конденсаційному середовищі є така ситуація, щоб наступні встановлення файлів проходили через встановлений кондом pip.
Устаман Сангат

24

Існує гілка conda (new-pypi-install), яка додає кращої інтеграції з pip та PyPI. Зокрема, у списку conda також буде показано встановлені пакетами pip, а conda install спочатку спробує знайти пакет conda та не вдасться використати pip для встановлення пакета.

Планується, що ця галузь буде об'єднана пізніше цього тижня, так що версія 2.1 конда матиме кращу інтеграцію з кондою.


2
Я хотів би зазначити, що це вже працює в conda 2.2.3 (і, мабуть, до цього). Як це працює, це те, що якщо ви спробуєте, conda install packageі він не може знайти рецепт конди, він спробує встановити його за допомогою pip(і потім відслідковує це). Це навіть корисно пропонує встановити, pipякщо не у вашому оточенні. Дякую Тревісу за всю вашу роботу!
jorgeca

5
Пояснення, оскільки я це неправильно читав кілька разів. @Travis означає, що я думаю, що якщо хтось працює в конді, то запущений піп спочатку шукатиме пакети конди? Зворотний зв'язок, безумовно, не відповідає дійсності - конда-інсталяція не шукає пакетів pypi, навіть не елементів на pypi.binstar.org. Це станом на conda 3.5.2.
AnneTheAgile

9
Це було видалено? Якщо я запускаю, скажімо, conda install autopep8він говорить мені "Не знайдено жодного пакету", і я повинен шукати anaconda.org вручну.
ендоліт

@AnneTheAgile running pip...теж не працює, він взагалі не буде шукати пакет conda.
Ван

16

Я слідував за відповіддю @Viktor Kerkez і мав неоднозначний успіх. Я виявив, що іноді цей рецепт

conda скелет pypi ПАКЕТ

conda build PACKAGE

Здавалося б, все працює, але я не зміг імпортувати ПАКЕТ. Нещодавно я запитав про це в групі користувачів Anaconda і почув від себе @Travis Oliphant про найкращий спосіб використовувати conda для створення та управління пакунками, які не постачаються з Anaconda. Ви можете прочитати цю тему тут , але я опишу підхід нижче, щоб сподіватися зробити відповіді на питання ОП більш повними ...

Приклад: я збираюся встановити чудовий пакет доситьplotlib на Windows за допомогою conda 2.2.5.

1а) conda build --build-recipe prettyplotlib

Ви побачите, що повідомлення про збірку виглядають добре до останнього розділу TEST збірки. Я бачив цю помилку

Файл "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", рядок 23 імпорту Немає SyntaxError: не можна присвоїти жодним ТЕСТАМИ НЕВЕРШЕНО: prettyplotlib-0.1.3-py27_0

1b) Зайдіть у / conda-рецепти / prettyplotlib та відредагуйте файл meta.yaml. В даний час встановлені пакети, як на кроці 1a, призводять до файлів yaml, у яких в testрозділі є помилка . Наприклад, ось як шукав мійprettyplotlib

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

Відредагуйте цей розділ, щоб видалити порожній рядок, який передує -, а також видалити зайвий рядок доситьplotlib. Під час написання цього повідомлення я виявив, що мені потрібно редагувати більшість файлів meta.yaml, подібних до цього, для зовнішніх пакетів, які я встановлюю conda, що означає, що є порожній рядок імпорту, що викликає помилку разом із надмірним імпортом даного пакету .

1c) Перезапустіть команду з 1a, яка цього разу повинна завершитись із помилкою. В кінці збірки вас запитають, чи хочете ви завантажити збірку на binstar . Я ввів "Ні", а потім побачив це повідомлення:

Якщо ви хочете пізніше завантажити цей пакет на 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перед встановленням ПАКЕТ з кондою. Використовуючи conda, тепер я можу керувати (майже) всіма своїми пакунками за допомогою єдиного підходу, а не встановити суміш речей, встановлених конда, піп, easy_install та встановлення python setup.py.

З огляду на контекст, я думаю, що ця остання публікація в блозі від @Travis Oliphant буде корисною для таких людей, як я, які не цінують все, що входить у надійну упаковку Python, але, безумовно, цінують, коли речі "просто працюють". conda здається чудовим способом вперед ...


2
Використовуючи conda версії 3.5.2, команда $ conda build --build-рецепт XXX; Помилки з "нерозпізнаними аргументами: - build-recept". Повна відповідь є; використання: conda-build [-h] [-c] [--no-binstar-upload] [- вихід] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: помилка: нерозпізнані аргументи: --build-
recept


3

Я думаю, що тут не вистачає - це коли:

>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 для встановлення локального пакету з однієї conda env робить цей пакет доступним (але не переглядається через список conda) для всіх інших conda envs тієї ж версії python.


2

conda env exportперераховує всі пакети conda та pip в оточенні. conda-envповинні бути встановлені в корені конди (conda install -c conda conda-env ).

Щоб написати environment.ymlфайл, що описує поточне середовище:

conda env export > environment.yml

Список літератури:


2

Зазвичай я встановлюю папку "bin / pip" для конкретного середовища, в яке ви хочете встановити пакет перед командою "pip". Наприклад, якщо ви хочете встановити pymc3 в середовищі py34, слід скористатися цією командою:

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

В основному потрібно просто знайти правильний шлях до папки "bin / pip" для оточення і поставити його перед командою встановлення.


1

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


1

Ви можете почати, встановивши подану нижче команду в середовищі conda:

conda install pip

Далі слід встановити всі необхідні пакети піп у середовищі.

Після встановлення всіх пакетів conda та pip для експорту середовища використовуйте:

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

Це створить необхідний файл у папці

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.