Jak mogę śledzić pakiety zainstalowane przez pip w środowisku Anaconda (Conda)?

141

Zainstalowałem i korzystam z dystrybucji Anaconda Python i zacząłem używać środowiska Anaconda (Conda). Mogę użyć standardowego conda install...polecenia, aby umieścić pakiety z dystrybucji w moich środowiskach, ale aby użyć czegokolwiek na zewnątrz (np. Flask-WTF, flask-sqlalchemy i alembic), czego potrzebuję pip installw aktywnym środowisku. Jednak kiedy patrzę na zawartość środowiska, czy to w katalogu, czy używając conda listtych pip installpakietów ed, nie pojawiają się.

Używając pip freezei pip listpo prostu wyświetla listę wszystkich pakietów, które kiedykolwiek zainstalowałem.

Czy istnieje sposób, aby śledzić, co jest w każdej z moich Anacondy env(zarówno pipi condazainstalowanych)?

gromiczek
źródło
7
Użyj pipzainstalowanego z condanp ~/anaconda/bin/pip. Użyj go, aby zainstalować pakiety w condaśrodowisku, a także zobaczyć sumę pakietów zainstalowanych z tym pipi z conda install.
osa
7
conda listod jakiegoś czasu zawiera pakiety Pythona, które zostały zainstalowane w inny sposób (np. pip, easy-install, bezpośrednio z python setup.py install, itp.)
kalefranz
1
Nie ulepszaj swojego pip, bo ten eksport zostanie zablokowany
Andrew Cassidy

Odpowiedzi:

120

conda-env robi to teraz automatycznie (jeśli pip został zainstalowany z conda).

Możesz zobaczyć, jak to działa, używając narzędzia eksportu używanego do migracji środowiska:

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

Plik będzie zawierał zarówno pakiety conda, jak i pakiety pip:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

Jeśli chcesz kontynuować eksportowanie środowiska, przejdź environment.ymlna nowy komputer główny i uruchom:

conda env create -f path/to/environment.yml
conner.xyz
źródło
64

condabędzie śledzić tylko pakiety, które zainstalował. I pippoda pakiety, które zostały zainstalowane przy użyciu samego pipinstalatora lub użyły setuptoolsw swojej setup.pykompilacji so conda, która wygenerowała informacje o jajku. Masz więc zasadniczo trzy opcje.

  1. Można wziąć Związku conda listi pip freezei zarządzania pakietami, które zostały zainstalowane przy użyciu conda(które pojawiają się w conda list) z condamenedżera pakietów i te, które są instalowane z pip(w tym serialu pip freeze, ale nie w conda list) z pip.

  2. Zainstalować tylko w swoim środowisku python, piporaz distributepakiety i zarządzać wszystkim z pip. (Nie jest to takie trywialne, jeśli używasz systemu Windows ...)

  3. Twórz własne condapakiety i zarządzaj wszystkim za pomocą conda.

Osobiście poleciłbym trzecią opcję, ponieważ budowanie condapakietów jest bardzo łatwe . Na koncie github kontinuum znajduje się repozytorium git z przykładowymi przepisami. Ale zwykle sprowadza się to do:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

Lub tylko:

conda pipbuild PACKAGE

Również po ich utworzeniu możesz przesłać je na https://binstar.org/ i po prostu zainstalować stamtąd.

Wtedy będziesz mieć wszystko zarządzane za pomocą conda.

Viktor Kerkez
źródło
3
Ja tylko starałem się ~/anaconda/bin/pip install memory-profileri conda install numba, i oba są pokazane w ~/anaconda/bin/pip freeze.
osa
2
„repozytorium git przykładowych przepisów na koncie github kontinuum” Czy masz na myśli github.com/ContinuumIO/anaconda-recipes ? Podaj link, jeśli możesz
endolith
W rzeczywistości nie powoduje to jednak zainstalowania pakietu, aby można go było zaimportować. Musisz postępować conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2zgodnie z opisem na stackoverflow.com/a/20750388/125507
endolith
Powiedziałbym, że najpierw zawsze miej conda install python=3.x.yw swoim środowisku Conda tak, aby kolejne instalacje pip przechodziły przez pip zainstalowany przez Conda.
Ustaman Sangat
24

Istnieje gałąź conda (new-pypi-install), która zapewnia lepszą integrację z pip i PyPI. W szczególności lista conda pokaże również pakiety zainstalowane przez pip, a instalacja conda najpierw spróbuje znaleźć pakiet conda i zakończy się niepowodzeniem, co spowoduje, że zainstaluje pakiet za pomocą pip.

Ta gałąź ma zostać scalona jeszcze w tym tygodniu, aby wersja 2.1 Conda miała lepszą integrację pip z Conda.

Travis Oliphant
źródło
2
Chciałbym zaznaczyć, że to już działa w conda 2.2.3 (i prawdopodobnie wcześniej). Sposób, w jaki to działa, polega na tym, że jeśli spróbujesz conda install packagei nie możesz znaleźć przepisu na condę, spróbuje go zainstalować przez pip(a następnie śledzi). Pomocnie sugeruje nawet instalację, pipjeśli nie jest w twoim środowisku. Dzięki Travisowi za całą twoją pracę!
jorgeca
5
Wyjaśnienie, ponieważ kilka razy źle to przeczytałem. @ Travis oznacza, że ​​myślę, że jeśli ktoś działa w conda, to uruchomiony pip najpierw wyszuka pakiety conda? Odwrotna sytuacja jest zdecydowanie nieprawda - instalacja conda nie szuka pakietów pypi, ani nawet elementów na pypi.binstar.org. To jest od Conda 3.5.2.
AnneTheAgile
9
Czy to zostało usunięte? Jeśli uruchomię, powiedzmy, conda install autopep8że otrzymam komunikat „Nie znaleziono pakietu” i powinienem ręcznie przeszukać anaconda.org.
endolith
@AnneTheAgile running pip...również nie działa, w ogóle nie będzie szukał pakietu conda.
Wang,
16

Podążyłem za odpowiedzią @Viktor Kerkez i odniosłem mieszany sukces. Okazało się, że czasami ten przepis

Conda skeleton pypi PAKIET

PAKIET kompilacji Conda

wyglądałoby na to, że wszystko działało, ale nie mogę pomyślnie zaimportować PAKIETU. Niedawno zapytałem o to w grupie użytkowników Anaconda i usłyszałem od samego @Travisa Oliphanta o najlepszym sposobie używania conda do budowania i zarządzania pakietami, które nie są dostarczane z Anacondą. Możesz przeczytać ten wątek tutaj , ale opiszę poniżej podejście, aby, miejmy nadzieję, uzupełnić odpowiedzi na pytanie OP ...

Przykład: mam zamiar zainstalować doskonały pakiet prettyplotlib w systemie Windows przy użyciu conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Zobaczysz, że wszystkie komunikaty kompilacji wyglądają dobrze do ostatniej sekcji TEST kompilacji. Widziałem ten błąd

Plik „C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py”, wiersz 23 import Brak SyntaxError: nie można przypisać do None TESTS FAILED: prettyplotlib-0.1.3-py27_0

1b) Wejdź do / conda-recipes / prettyplotlib i edytuj plik meta.yaml. Obecnie konfigurowanie pakietów jak w kroku 1a powoduje, że pliki yaml mają błąd w testsekcji. Na przykład, oto jak wyglądał mójprettyplotlib

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

Edytuj tę sekcję, aby usunąć pusty wiersz poprzedzony znakiem -, a także usuń nadmiarową linię prettyplotlib. W czasie pisania tego tekstu stwierdziłem, że muszę edytować większość plików meta.yaml takich jak ten dla zewnętrznych pakietów, które instaluję z conda, co oznacza, że ​​istnieje pusta linia importu powodująca błąd wraz z redundantnym importem danego pakietu .

1c) Ponownie uruchom polecenie z 1a, które tym razem powinno zakończyć się bez błędu. Pod koniec kompilacji zostaniesz zapytany, czy chcesz przesłać kompilację do binstar . Wpisałem Nie, a następnie zobaczyłem ten komunikat:

Jeśli chcesz później przesłać ten pakiet na binstar.org, wpisz:

$ binstar upload C: \ Anaconda \ conda-bld \ win-64 \ prettyplotlib-0.1.3-py27_0.tar.bz2

Ten plik tar.bz2 jest kompilacją, którą musisz teraz faktycznie zainstalować.

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

Wykonując te kroki, pomyślnie użyłem conda do zainstalowania wielu pakietów, które nie są dostarczane z Anacondą. Wcześniej niektóre z nich instalowałem za pomocą pip, więc zrobiłem to pip uninstall PACKAGEprzed zainstalowaniem PAKIETU z conda. Korzystając z conda, mogę teraz zarządzać (prawie) wszystkimi moimi pakietami za pomocą jednego podejścia, zamiast instalować mieszankę rzeczy z instalacją conda, pip, easy_install i python setup.py install.

Jeśli chodzi o kontekst, myślę, że ten ostatni post na blogu autorstwa @Travis Oliphant będzie pomocny dla ludzi takich jak ja, którzy nie doceniają wszystkiego, co zawiera solidne opakowanie Pythona, ale z pewnością doceniają, kiedy coś „po prostu działa”. Conda wydaje się świetną drogą do przodu ...

Josh Hemann
źródło
2
Używając conda w wersji 3.5.2, polecenie $ conda build --build-recipe XXX; Błędy są wyświetlane z „nierozpoznanymi argumentami: --build-Recipe”. Pełna odpowiedź brzmi; użycie: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: error: nierozpoznane argumenty: --build-recipe
AnneTheAgile
10

Dlatego napisałem Picky: http://picky.readthedocs.io/

Jest to pakiet Pythona, który śledzi pakiety zainstalowane za pomocą pip lub conda w virtualenvs i conda envs.

Chris Withers
źródło
3

Myślę, że brakuje tutaj tego, kiedy:

>pip install .

aby zainstalować pakiet lokalny z setup.py, instaluje pakiet, który jest widoczny dla wszystkich środowisk conda, które używają tej samej wersji Pythona. Uwaga Używam pip w wersji conda!

np. jeśli używam python2.7, umieszczam pakiet lokalny tutaj:

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

Jeśli później utworzę nowe środowisko conda z python = 2.7 (= wartość domyślna):

>conda create --name new

>source activate new

A następnie wykonaj:

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

Jeśli jednak:

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

W tym przypadku conda nie wie o pakiecie pip, ale pakiet jest dostępny dla Pythona.

Jeśli jednak zamiast tego zainstaluję pakiet lokalny (ponownie za pomocą pip) po utworzeniu (i aktywowaniu) nowego conda env, teraz conda to widzi:

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

Myślę więc, że interakcja między conda i pip ma pewne problemy - tj. Użycie pip do zainstalowania lokalnego pakietu z jednego conda env sprawia, że ​​ten pakiet jest dostępny (ale nie widziany przez listę conda) dla wszystkich innych conda env w tej samej wersji Pythona.

MH
źródło
2

Zwykle poprzedzam folder „bin / pip” dla określonego środowiska, w którym chcesz zainstalować pakiet, przed poleceniem „pip”. Na przykład, jeśli chcesz zainstalować pymc3 w środowisku py34, powinieneś użyć tego polecenia:

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

Po prostu musisz znaleźć właściwą ścieżkę do folderu „bin / pip” swojego środowiska i umieścić ją przed poleceniem instalacji.

Gianluca
źródło
1

Mój which pippokazuje następującą ścieżkę:

$ which pip
/home/kmario23/anaconda3/bin/pip

Tak więc każdy pakiet, z którego korzystam, pip install <package-name>będzie musiał zostać odzwierciedlony na liście pakietów, gdy lista jest eksportowana przy użyciu:

$ conda list --export > conda_list.txt

Ale ja nie. Zamiast tego użyłem następującego polecenia, zgodnie z sugestiami kilku innych:

# 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'

Teraz widzę wszystkie pakiety w moim all-packages.ymlpliku.

kmario23
źródło
1

Możesz zacząć od zainstalowania poniższego polecenia w środowisku Conda:

conda install pip

Następnie należy zainstalować wszystkie potrzebne pakiety pip w środowisku.

Po zainstalowaniu wszystkich pakietów Conda i PIP w celu wyeksportowania środowiska użyj:

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

Spowoduje to utworzenie wymaganego pliku w folderze

Kavish
źródło