Ich habe nicht wirklich verstanden, wie man Pipenv benutzt, also ist es ein Memo, als ich verschiedene Bewegungen ausprobierte, während ich hauptsächlich das offizielle Dokument las.
Da die Beziehung zwischen den einzelnen Befehlen dargestellt ist, werde ich sie in diesen Ablauf schreiben. Die Zahlen in der Abbildung entsprechen den Zahlen in den Absätzen dieses Artikels.
Pipenv
In der Vergangenheit wurden virtuelle Python-Umgebungen häufig mit Pip und Verticalenv erstellt. Pipenv ist jedoch ein Tool, mit dem Sie alle gemeinsam verwalten können.
Pipenv generiert zwei Dateien. Grundsätzlich bearbeiten Sie diese nicht direkt, aber ich werde jede Rolle unterdrücken, um den Grund und den Status der virtuellen Umgebung zu verstehen. Jede Datei hat die folgenden Rollen und Eigenschaften.
Pipfile --Verwalten Sie verschiedene Pakete und deren Versionen
Pipfile.lock
Werfen wir einen Blick auf die einzelnen Befehle und deren Verwendung.
Installieren Sie Pipenv.
$ brew install pipenv
Es kann auch mit pip installiert werden.
$ pip install pipenv
Initialisieren Sie die virtuelle Umgebung, indem Sie die Python-Version angeben. Wenn die angegebene Version nicht vorhanden ist, wird sie über pyenv installiert.
$ pipenv --python 3.6
Wenn die virtuelle Umgebung initialisiert wird, wird eine Datei namens Pipfile generiert.
Sie können das Paket mit dem Befehl install installieren.
Wenn sich Pipfile- und Pipfile.lock-Dateien in derselben Hierarchie befinden, in der der Befehl ausgeführt wird, wird die Umgebung unter Bezugnahme auf diese Dateien erstellt.
$ pipenv install
Sie können eine von Piprnv verwaltete Umgebung aus der Datei "resources.txt" erstellen, auch wenn sie ursprünglich nicht von Pipenv verwaltet wurde.
$ pipenv install -r ./requirements.txt
Wenn keine Referenzdatei vorhanden ist, wird die Umgebung auf die gleiche Weise wie "pipenv --python
$ pipenv install --python 3.6
Für den Installationsbefehl wird zusätzlich zur Pipfile eine Pipfile.lock-Datei generiert. Werfen wir einen Blick auf den Inhalt.
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages] //Leer, da ich das Paket noch nicht installiert habe
[requires]
python_version = "3.6" //Version 3.6 ist angegeben
Pipfile.lock
{
"_meta": {
"hash": {
"sha256": "415dfdcb118dd9bdfef17671cb7dcd78dbd69b6ae7d4f39e8b44e71d60ca72e7"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {}, //Leer, da ich das Paket noch nicht installiert habe
"develop": {}
}
Ich werde Pandas als Test hinzufügen.
$ pipenv install pandas
Dann wird jedes wie folgt hinzugefügt.
Pipfile
[packages]
pandas = "*" //Keine Version angegeben
Pipfile.lock
"default": {
"numpy": {
"hashes": [
"sha256:03bbde29ac8fba860bb2c53a1525b3604a9b60417855ac3119d89868ec6041c3",
(Weggelassen)
"sha256:f6a7421da632fc01e8a3ecd19c3f7350258d82501a646747664bae9c6a87c731"
],
"version": "==1.18.0"
},
"pandas": {
"hashes": [
"sha256:00dff3a8e337f5ed7ad295d98a31821d3d0fe7792da82d78d7fd79b89c03ea9d",
(Weggelassen)
"sha256:ee50c2142cdcf41995655d499a157d0a812fce55c97d9aad13bc1eef837ed36c"
],
"index": "pypi",
"version": "==0.25.3"
},
"python-dateutil": {
"hashes": [
"sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
"sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
],
"version": "==2.8.1"
},
"pytz": {
"hashes": [
"sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
"sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
],
"version": "==2019.3"
},
"six": {
"hashes": [
"sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
"sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
],
"version": "==1.13.0"
}
},
Außerdem werden die Pakete und Versionen angegeben, von denen Pandas intern abhängen, z. B. numpy und python-dateutil.
Wenn Sie die Version angeben und installieren möchten, gehen Sie wie folgt vor.
$ pipenv install pandas==0.15.0 //Geben Sie eine bestimmte Version an
Die Methode zum Angeben der Version ist nicht auf die spezifische Version beschränkt, es ist jedoch möglich, die angegebene Version oder höher und die spezifische Version auszuschließen. Weitere Informationen finden Sie unter Offizielles Dokument.
Verwenden Sie den Befehl uninstall, um das installierte Paket zu deinstallieren.
$ pipenv uninstall pandas
Dann werden sowohl Pipfile als auch Pipfile.lock gelöscht, sobald sie durch die Installation hinzugefügt werden.
Verwenden Sie den Befehl lock, um die Datei Pipfile.lock aus dem Inhalt der Pipfile zu aktualisieren.
$ pipenv lock
Insbesondere wenn Sie die Version bei der Installation von "pipenv" nicht angeben, verwenden Sie diesen Befehl beim Aktualisieren des Pakets.
Der Befehl sync wird verwendet, um den Inhalt von Pipfile.lock auf eine virtuelle Umgebung anzuwenden.
$ pipenv sync
Ich denke, dass dieser Befehl oft als Satz mit dem Befehl lock verwendet wird.
Der Update-Befehl wird gleichzeitig gesperrt und synchronisiert.
$ pipenv update //Tun Sie für alle Pakete
$ pipenv update pandas //Es ist auch möglich, das Paket anzugeben
Fügen Sie die Option "--dry-run" hinzu, um zu sehen, welche Pakete aktualisiert werden können (veraltet).
$ pipenv update --dry-run
✔ Success!
//Alte Version (0.15.Ich habe Pandas von 0) gesetzt, also die neue Version (0).25.3) wird Ihnen sagen, dass es verfügbar ist
Skipped Update of Package pandas: 0.15.0 installed, 0.25.3 available.
Wenn Sie die Version zum Zeitpunkt der "pipenv-Installation" angeben, wird die Installation der neuen Version übersprungen, auch wenn keine "--dry-run" -Option vorhanden ist. Geben Sie in diesem Fall eine beliebige Version mit "pipenv install" an und führen Sie eine Überschreibinstallation durch.
Verwenden Sie den Befehl run, um Befehle in einer virtuellen Umgebung auszuführen. Lassen Sie uns die Liste der installierten Pakete als Testversion anzeigen.
$ pipenv run pip list
Package Version
--------------- -------
numpy 1.18.0
pandas 0.15.0
pip 19.3.1
python-dateutil 2.8.1
pytz 2019.3
setuptools 43.0.0
six 1.13.0
wheel 0.33.6
Wenn Sie ein Skript in Pipfile registrieren, können Sie dieses Skript auch mit dem Befehl run aufrufen.
Pipfile
[scripts]
list = "pip list"
$ pipenv run list //Gleiches Ergebnis wie bei pipenv run pip list
Verwenden Sie den Shell-Befehl, um die virtuelle Umgebung aufzurufen.
$ pipenv shell
Wenn Ihre virtuelle Umgebung Pakete enthält, die nicht in Pipfile.lock definiert sind, können Sie diese mit dem Befehl clean aus der virtuellen Umgebung entfernen.
Versuchen Sie pipenv uninstall pandas
nach pipenv install pandas
, die zuvor veröffentlicht wurden, und führen Sie den Befehl clean mit den Paketen aus, von denen Pandas abhängig sind, die in der virtuellen Umgebung verbleiben.
$ pipenv run pip list
Package Version
--------------- -------
numpy 1.18.0 //Es gibt immer noch Pakete, von denen Pandas abhängt, wie zum Beispiel Numpy.
pip 19.3.1
python-dateutil 2.8.1
pytz 2019.3
setuptools 43.0.0
six 1.13.0
wheel 0.33.6
$ pipenv clean //Laufen Sie sauber
Uninstalling six…
Uninstalling pytz…
Uninstalling python-dateutil…
Uninstalling numpy…
$ pipenv run pip list //Überprüfen Sie das Ergebnis der Reinigung
Package Version
---------- -------
pip 19.3.1
setuptools 43.0.0
wheel 0.33.6
Sie können sehen, dass die Pakete, von denen Pandas abhängig waren, ebenfalls fest deinstalliert sind.
Der Befehl check prüft auf Sicherheitslücken, um festzustellen, ob die aktuelle Umgebung die Anforderungen von PEP 508 erfüllt.
$ pipenv check
Wenn Sie die Paketabhängigkeiten anzeigen möchten, verwenden Sie den Befehl graph.
$ pipenv graph
pandas==0.15.0 //Pandas ist numpy, Python-Es stellt sich heraus, dass es von Dateutil und Pytz abhängt
- numpy [required: >=1.7.0, installed: 1.18.0]
- python-dateutil [required: >=2, installed: 2.8.1]
- six [required: >=1.5, installed: 1.13.0] // python-Es stellt sich heraus, dass Dateutil noch stärker von sechs abhängig ist
- pytz [required: >=2011k, installed: 2019.3]
Ich denke, das gibt Ihnen eine Vogelperspektive auf Pipenv. Es ist hartnäckig, aber ich werde das zugehörige Diagramm am Anfang noch einmal veröffentlichen.
Pipenv sieht aus wie all die guten Dinge, aber es scheint einige Nachteile zu haben, wie z. B. scharf zu sein, wenn es mit Docker und langsamer Installation kombiniert wird. Als weitere Alternative werde ich nach den Namen der folgenden Tools fragen, damit ich versuchen kann, sie bald zu berühren.
Recommended Posts