webentwicklung-frage-antwort-db.com.de

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

Ich habe die Anaconda Python) -Distribution installiert und verwendet, und ich habe begonnen, die Anaconda (Conda) -Umgebung zu verwenden. Ich kann den Standard conda install... Befehl, um Pakete aus der Distribution in meine Umgebungen zu stellen, aber um irgendetwas außerhalb zu verwenden (d. h. Flask-WTF, flask-sqlalchemy und alembic), muss ich pip install in der aktiven Umgebung. Wenn ich mir jedoch den Inhalt der Umgebung ansehe, entweder im Verzeichnis oder mit conda list diese pip installed-Pakete werden nicht angezeigt.

Mit pip freeze und pip list listet nur alle Pakete auf, die ich jemals installiert habe.

Gibt es eine Möglichkeit, den Überblick darüber zu behalten, was in jedem meiner Anaconda envs enthalten ist (sowohl pip als auch conda installiert)?

124
gromiczek

conda-env macht das jetzt automatisch (wenn pip mit conda installiert wurde).

Wie dies funktioniert, können Sie mit dem für die Migration einer Umgebung verwendeten Export-Tool überprüfen:

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

Die Datei listet sowohl Conda-Pakete als auch Pip-Pakete auf:

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

Wenn Sie die Umgebung exportieren möchten, verschieben Sie environment.yml auf den neuen Hostrechner und führen Sie Folgendes aus:

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

conda verfolgt nur die installierten Pakete. Und pip gibt Ihnen die Pakete, die entweder mit dem pip -Installer selbst installiert wurden oder die setuptools in ihrem setup.py Verwendet haben, sodass conda build die Ei-Informationen generiert hat . Sie haben also grundsätzlich drei Möglichkeiten.

  1. Sie können die Vereinigung von conda list Und pip freeze Nehmen und Pakete verwalten, die mit conda (die im conda list Angezeigt werden) mit dem conda Paketmanager und die, die mit pip (die in pip freeze aber nicht in conda list angezeigt werden) mit pip installiert wurden.

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

  3. Erstellen Sie Ihre eigenen conda -Pakete und verwalten Sie alles mit conda.

Ich persönlich würde die dritte Option empfehlen, da es sehr einfach ist, conda -Pakete zu erstellen. Auf dem Github-Account des Kontinuums befindet sich ein Git-Repository mit Beispielrezepten. Aber es läuft in der Regel auf Folgendes 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 von dort aus installieren.

Dann haben Sie alles mit conda verwaltet.

64
Viktor Kerkez

Es gibt einen Conda-Zweig (new-pypi-install), der eine bessere Integration mit pip und PyPI ermöglicht. Insbesondere zeigt die Conda-Liste auch die von Pip installierten Pakete an, und die Conda-Installation versucht zunächst, ein Conda-Paket zu finden, und schlägt fehl, wenn Pip zum Installieren des Pakets verwendet wird.

Der Zusammenschluss dieses Zweigs ist für Ende dieser Woche geplant, damit Version 2.1 von conda eine bessere Pip-Integration mit conda bietet.

23
Travis Oliphant

Ich bin @Viktor Kerkezs Antwort gefolgt und hatte gemischten Erfolg. Ich fand, dass manchmal dieses Rezept von

conda skeleton pypi PAKET

conda build PAKET

würde aussehen, als hätte alles geklappt, aber ich konnte PACKAGE nicht erfolgreich importieren. Kürzlich habe ich in der Anaconda-Benutzergruppe danach gefragt und von @Travis Oliphant selbst erfahren, wie Conda am besten zum Erstellen und Verwalten von Paketen verwendet werden kann, die nicht mit Anaconda geliefert werden. Sie können diesen Thread lesen hier , aber ich werde den Ansatz unten beschreiben, um hoffentlich die Antworten auf die Frage des OP vollständiger zu machen ...

Beispiel: Ich werde das excellent prettyplotlib package unter Windows mit conda 2.2.5 installieren.

1a) conda build --build-recipe prettyplotlib

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

Datei "C:\Anaconda\conda-bld\test-tmp_dir\run_test.py", Zeile 23 importieren

1b) Gehen Sie in/conda-recipes/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 im Abschnitt test einen Fehler aufweisen. Zum Beispiel ist hier, wie meins nach prettyplotlib aussah

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

Bearbeiten Sie diesen Abschnitt, um die Leerzeile mit dem vorangestellten - 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 das angegebene Paket redundant importiert wird .

1c) Führen Sie den Befehl von 1a aus, der diesmal fehlerfrei abgeschlossen werden 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 habe ich pip uninstall PACKAGE vor der Installation von PACKAGE mit conda. Mit conda kann ich jetzt (fast) alle meine Pakete mit einem einzigen Ansatz verwalten, anstatt eine Mischung aus Sachen mit conda, pip, easy_install und python setup.py install zu installieren.

Für den Kontext denke ich, dass dies letzter Blog-Beitrag von @Travis Oliphant hilfreich sein wird für Leute wie mich, die nicht alles zu schätzen wissen, was in robuste Python Verpackung geht, aber sicherlich zu schätzen wissen Wenn das Zeug "einfach funktioniert". Conda scheint ein großartiger Weg nach vorne zu sein ...

16
Josh Hemann

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.

10
Chris Withers

Ich denke, hier fehlt Folgendes:

>pip install .

um ein lokales Paket mit einer setup.py zu installieren, wird ein Paket installiert, das für all die Conda-Envs sichtbar ist, die dieselbe version von Python 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 env mit python = 2.7 erstelle (= die Voreinstellung):

>conda create --name new

>source activate new

Und dann mache:

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

Wenn ich jedoch tue:

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

In diesem Fall kennt conda das pip-Paket nicht, aber das Paket ist für Python verfügbar.

Wenn ich jedoch stattdessen das lokale Paket installiere (erneut mit pip) after Ich habe die neue conda env erstellt (und aktiviert), now conda sieht es :

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

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

3
M.H.

conda env export Listet alle Conda- und Pip-Pakete in einer Umgebung auf. conda-env Muss im conda root installiert sein (conda install -c conda conda-env).

So schreiben Sie eine environment.yml - Datei, die die aktuelle Umgebung beschreibt:

conda env export > environment.yml

Verweise:

2
Wes Turner

Normalerweise stelle ich dem Ordner "bin/pip" das Präfix für die bestimmte Umgebung vor, 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 lediglich den richtigen Pfad zu Ihrem Umgebungsordner 'bin/pip' finden und diesen vor dem Installationsbefehl einfügen.

2
Gianluca

Sie können mit der Installation des folgenden Befehls in der Conda-Umgebung beginnen:

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

1
Kavish

Mein which pip Zeigt den folgenden Pfad:

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

Also muss jedes Paket, das ich mit pip install <package-name> Installiere, in der Liste der Pakete erscheinen, wenn die Liste exportiert wird mit:

$ conda list --export > conda_list.txt

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

# 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.yml - Datei sehen.

0
kmario23