Wie verfolge ich Pip-installierte Pakete in einer Anaconda (Conda) -Umgebung?

141

Ich habe die Anaconda Python-Distribution installiert und verwendet , und ich habe begonnen, die Anaconda (Conda) -Umgebung zu verwenden. Ich kann den Standardbefehl verwenden conda install..., um Pakete aus der Distribution in meine Umgebungen einzufügen, aber um alles außerhalb zu verwenden (z. B. Flask-WTF, Flask-SQLalchemy und Alembic), muss ich es pip installin der aktiven Umgebung verwenden. Wenn ich mir jedoch den Inhalt der Umgebung ansehe, entweder im Verzeichnis oder wenn ich conda listdiese pip installed-Pakete verwende, wird dies nicht angezeigt.

Verwenden pip freezeund listen Sie pip listeinfach jedes Paket auf, das ich jemals installiert habe.

Gibt es eine Möglichkeit, den Überblick darüber zu behalten, was sich in jedem meiner Anaconda env(sowohl installiert pipals auch condainstalliert) befindet?

gromiczek
quelle
7
Verwenden Sie pipinstalliert mit condaz ~/anaconda/bin/pip. Verwenden Sie diese Option, um Pakete in einer condaUmgebung zu installieren pipund die Vereinigung der mit dieser und mit installierten Pakete anzuzeigen conda install.
osa
7
conda listhat seit python setup.py install
einiger
1
Aktualisieren Sie Ihren Pip nicht, sonst wird dieser Export abgespritzt
Andrew Cassidy

Antworten:

120

conda-env tut dies jetzt automatisch (wenn pip mit conda installiert wurde).

Sie können sehen, wie dies funktioniert, indem Sie das Export-Tool verwenden, das zum Migrieren einer Umgebung verwendet wird:

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

In der Datei werden sowohl Conda-Pakete als auch Pip-Pakete aufgelistet:

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

Wenn Sie den Export der Umgebung fortsetzen möchten, wechseln Sie environment.ymlauf den neuen Hostcomputer und führen Sie Folgendes aus:

conda env create -f path/to/environment.yml
conner.xyz
quelle
64

condaverfolgt nur die installierten Pakete. Und pipSie erhalten die Pakete, die entweder mit dem pipInstallationsprogramm selbst installiert wurden oder die setuptoolsin ihrem setup.pyso conda-Build verwendet wurden, dass die Ei-Informationen generiert wurden. Sie haben also grundsätzlich drei Möglichkeiten.

  1. Sie können die Vereinigung der conda listund pip freezeund Verwalten von Paketen, die mit conda(die im angezeigt werden) installiert wurden, mit conda listdem condaPaketmanager und denjenigen, die mit pip(die angezeigt werden, pip freezeaber nicht in conda list) mit installiert wurden , übernehmen pip.

  2. Installieren Sie in Ihrer Umgebung nur die python, pipund distributePakete und verwalten Sie alles mit pip. (Dies ist nicht so trivial, wenn Sie unter Windows sind ...)

  3. Erstellen Sie Ihre eigenen condaPakete und verwalten Sie alles mit conda.

Ich würde persönlich die dritte Option empfehlen, da es sehr einfach ist, condaPakete zu erstellen . Auf dem Github-Konto des Kontinuums befindet sich ein Git-Repository mit Beispielrezepten. Aber es läuft normalerweise darauf hinaus:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

oder nur:

conda pipbuild PACKAGE

Auch wenn Sie sie einmal erstellt haben, können Sie sie auf https://binstar.org/ hochladen und einfach von dort aus installieren.

Dann haben Sie alles mit verwaltet conda.

Viktor Kerkez
quelle
3
Ich habe es gerade versucht ~/anaconda/bin/pip install memory-profilerund conda install numba, und beide werden in gezeigt ~/anaconda/bin/pip freeze.
osa
2
"Git-Repository mit Beispielrezepten auf dem Github-Konto des Kontinuums" Meinen Sie github.com/ContinuumIO/anaconda-recipes ? Bitte verlinken Sie, wenn Sie können
Endolith
Dadurch wird das Paket jedoch nicht installiert, sodass Sie es importieren können. Sie müssen conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2wie in stackoverflow.com/a/20750388/125507
Endolith
Ich würde sagen, zuerst immer conda install python=3.x.yin Ihrer Conda-Umgebung, so dass nachfolgende Pip-Installationen durch Conda installierte Pip gehen.
Ustaman Sangat
24

Es gibt einen Zweig von conda (new-pypi-install), der eine bessere Integration mit pip und PyPI ermöglicht. Insbesondere zeigt die Conda-Liste auch installierte Pip-Pakete an, und die Conda-Installation versucht zunächst, ein Conda-Paket zu finden. Andernfalls wird das Paket mithilfe von pip installiert.

Dieser Zweig soll später in dieser Woche zusammengeführt werden, damit Version 2.1 von conda eine bessere Pip-Integration mit conda bietet.

Travis Oliphant
quelle
2
Ich möchte darauf hinweisen, dass dies bereits in Condition 2.2.3 (und wahrscheinlich vorher) funktioniert. Die Art und Weise, wie es funktioniert, ist, dass, wenn Sie versuchen, conda install packageein Conda-Rezept zu finden, es versucht, es über zu installieren pip(und es dann verfolgt). Es wird sogar empfohlen, die Installation zu installieren, pipwenn sie sich nicht in Ihrer Umgebung befindet. Danke Travis für all deine Arbeit!
Jorgeca
5
Klarstellung, da ich das mehrmals falsch verstanden habe. @Travis bedeutet, dass ich denke, wenn man in einer Conda läuft, sucht pip zuerst nach Conda-Paketen? Das Gegenteil ist definitiv nicht der Fall - conda install sucht nicht nach pypi-Paketen, nicht einmal nach Elementen auf pypi.binstar.org. Dies ist ab Bedingung 3.5.2.
AnneTheAgile
9
Wurde dies entfernt? Wenn ich beispielsweise starte, conda install autopep8wird "Kein Paket gefunden" angezeigt und ich sollte anaconda.org manuell durchsuchen.
Endolith
@AnneTheAgile running pip...funktioniert auch nicht, es wird überhaupt nicht nach Conda-Paket suchen.
Wang
16

Ich folgte der Antwort von @Viktor Kerkez und hatte gemischten Erfolg. Ich fand das manchmal dieses Rezept von

conda skeleton pypi PAKET

conda bauen PAKET

würde so aussehen, als ob alles funktioniert hätte, aber ich konnte PACKAGE nicht erfolgreich importieren. Kürzlich habe ich in der Anaconda-Benutzergruppe danach gefragt und von @Travis Oliphant selbst gehört, wie man mit conda am besten Pakete erstellt und verwaltet, die nicht mit Anaconda geliefert werden. Sie können diesen Thread hier lesen , aber ich werde den folgenden Ansatz beschreiben, um hoffentlich die Antworten auf die Frage des OP vollständiger zu machen ...

Beispiel: Ich werde das ausgezeichnete Hüllplotlib-Paket unter Windows mit Conda 2.2.5 installieren.

1a) conda build --build-recipe prettyplotlib

Sie werden sehen, dass die Build-Nachrichten bis zum letzten TEST-Abschnitt des Builds alle gut aussehen. Ich habe diesen Fehler gesehen

Datei "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", Zeile 23 importieren Keine SyntaxError: Kann keiner zugewiesen werden TESTS FAILED: prettyplotlib-0.1.3-py27_0

1b) Gehen Sie in / conda-Rezepte / Prettyplotlib und bearbeiten Sie die Datei meta.yaml. Gegenwärtig führen die Pakete, die wie in Schritt 1a eingerichtet werden, zu Yaml-Dateien, die einen Fehler in diesem testAbschnitt aufweisen. Hier ist zum Beispiel, wie meine gesucht hatprettyplotlib

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

Bearbeiten Sie diesen Abschnitt, um die leere Zeile vor dem - zu entfernen und die redundante Prettyplotlib-Zeile zu entfernen. Zum Zeitpunkt dieses Schreibens habe ich festgestellt, dass ich die meisten meta.yaml-Dateien wie diese für externe Pakete bearbeiten muss, die ich mit conda installiere. Dies bedeutet, dass eine leere Importzeile den Fehler verursacht und ein redundanter Import des angegebenen Pakets verursacht .

1c) Führen Sie den Befehl von 1a aus erneut aus, der diesmal ohne Fehler abgeschlossen sein sollte. Am Ende des Builds werden Sie gefragt, ob Sie den Build auf binstar hochladen möchten . Ich gab Nein ein und sah dann diese Nachricht:

Wenn Sie dieses Paket später auf binstar.org hochladen möchten, geben Sie Folgendes ein:

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

Diese tar.bz2-Datei ist der Build, den Sie jetzt tatsächlich installieren müssen.

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

Nach diesen Schritten habe ich conda erfolgreich verwendet, um eine Reihe von Paketen zu installieren, die nicht mit Anaconda geliefert werden. Zuvor hatte ich einige davon mit pip installiert, also pip uninstall PACKAGEvor der Installation von PACKAGE mit conda. Mit conda kann ich jetzt (fast) alle meine Pakete mit einem einzigen Ansatz verwalten, anstatt eine Mischung aus Dingen zu installieren, die mit conda, pip, easy_install und python setup.py installiert wurden.

Für den Kontext denke ich, dass dieser kürzlich veröffentlichte Blog-Beitrag von @Travis Oliphant für Leute wie mich hilfreich sein wird, die nicht alles schätzen, was in robusten Python-Verpackungen steckt, aber sicherlich zu schätzen wissen, wenn Dinge "einfach funktionieren". conda scheint ein guter Weg nach vorne zu sein ...

Josh Hemann
quelle
2
Unter Verwendung von conda Version 3.5.2 wird der Befehl $ conda build --build-prescription XXX; Fehler mit 'nicht erkannten Argumenten: --build-Rezept'. Volle Antwort ist; Verwendung: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: Fehler: nicht erkannte Argumente: --build-Rezept
AnneTheAgile
10

Deshalb habe ich Picky geschrieben: http://picky.readthedocs.io/

Es ist ein Python-Paket, das Pakete verfolgt, die entweder mit pip oder conda in virtualenvs oder conda envs installiert wurden.

Chris Withers
quelle
3

Ich denke, was hier fehlt, ist das, wenn Sie es tun:

>pip install .

Um ein lokales Paket mit einer setup.py zu installieren, wird ein Paket installiert, das für alle conda envs sichtbar ist , die dieselbe Python- Version verwenden . Hinweis Ich verwende die Conda-Version von Pip!

Wenn ich beispielsweise python2.7 verwende, wird das lokale Paket hier abgelegt:

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

Wenn ich dann später eine neue Conda-Umgebung mit Python = 2.7 (= Standard) erstelle:

>conda create --name new

>source activate new

Und dann mache:

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

Wenn ich es jedoch tue:

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

In diesem Fall kennt conda das pip-Paket nicht, aber das Paket steht Python zur Verfügung.

Wenn ich jedoch stattdessen das lokale Paket installiere (wieder mit pip), nachdem ich die neue conda env erstellt (und aktiviert) habe, sieht conda es jetzt :

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

Ich denke also, dass die Interaktion zwischen conda und pip einige Probleme hat - dh die Verwendung von pip zum Installieren eines lokalen Pakets aus einer conda env heraus macht dieses Paket für alle anderen conda envs derselben Python-Version verfügbar (aber nicht über die conda-Liste sichtbar).

MH
quelle
2

Normalerweise stelle ich den Ordner 'bin / pip' der spezifischen Umgebung voran, in der Sie das Paket vor dem Befehl 'pip' installieren möchten. Wenn Sie beispielsweise pymc3 in der Umgebung py34 installieren möchten, sollten Sie diesen Befehl verwenden:

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

Sie müssen im Grunde nur den richtigen Pfad zu Ihrem Ordner 'bin / pip' finden und ihn vor den Installationsbefehl stellen.

Gianluca
quelle
1

Mein which pipzeigt den folgenden Pfad:

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

Unabhängig davon, welches Paket ich verwende pip install <package-name>, muss es in der Liste der Pakete angezeigt werden, wenn die Liste exportiert wird mit:

$ conda list --export > conda_list.txt

Aber ich nicht. Also habe ich stattdessen den folgenden Befehl verwendet, wie von mehreren anderen vorgeschlagen:

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

Jetzt kann ich alle Pakete in meiner all-packages.ymlDatei sehen.

kmario23
quelle
1

Sie können beginnen, indem Sie den unten angegebenen Befehl in der Conda-Umgebung installieren:

conda install pip

Anschließend installieren Sie alle Pip-Pakete, die Sie in der Umgebung benötigen.

Nach der Installation aller Conda- und Pip-Pakete zum Exportieren der Umgebung verwenden Sie:

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

Dadurch wird die erforderliche Datei im Ordner erstellt

Kavish
quelle