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 install
ed-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 env
s enthalten ist (sowohl pip
als auch conda
installiert)?
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
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.
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.
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 ...)
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.
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.
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 ...
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.
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.
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:
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.
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
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.