Ich habe mir die Neueste Episode (208.) des PythonBytes-Podcasts angehört und ein Tool vorgestellt, das interessant zu sein scheint, also habe ich es ausprobiert. Ich denke, dass das Abhängigkeitsmanagement mit pip etwas einfacher sein wird.
Zunächst eine grundlegende Überprüfung des Abhängigkeitsmanagements mit pip. Verwenden Sie pip install
, um die erforderlichen Pakete zu installieren. Wenn Sie beispielsweise zwei Pakete installieren, "Anfragen" und "Pandas", erhalten Sie Folgendes.
$ pip install requests
Collecting requests
Downloading requests-2.25.0-py2.py3-none-any.whl (61 kB)
|████████████████████████████████| 61 kB 7.2 MB/s
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.2-py2.py3-none-any.whl (136 kB)
|████████████████████████████████| 136 kB 10.5 MB/s
Collecting certifi>=2017.4.17
Downloading certifi-2020.11.8-py2.py3-none-any.whl (155 kB)
|████████████████████████████████| 155 kB 12.9 MB/s
Collecting chardet<4,>=3.0.2
Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting idna<3,>=2.5
Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Installing collected packages: urllib3, certifi, chardet, idna, requests
Successfully installed certifi-2020.11.8 chardet-3.0.4 idna-2.10 requests-2.25.0 urllib3-1.26.2
$ pip install pandas
Collecting pandas
Downloading pandas-1.1.4-cp39-cp39-macosx_10_9_x86_64.whl (10.3 MB)
|████████████████████████████████| 10.3 MB 5.9 MB/s
Collecting numpy>=1.15.4
Using cached numpy-1.19.4-cp39-cp39-macosx_10_9_x86_64.whl (15.4 MB)
Collecting pytz>=2017.2
Downloading pytz-2020.4-py2.py3-none-any.whl (509 kB)
|████████████████████████████████| 509 kB 31.7 MB/s
Collecting python-dateutil>=2.7.3
Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
|████████████████████████████████| 227 kB 33.8 MB/s
Collecting six>=1.5
Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: numpy, pytz, six, python-dateutil, pandas
Successfully installed numpy-1.19.4 pandas-1.1.4 python-dateutil-2.8.1 pytz-2020.4 six-1.15.0
Wenn Sie sich das ansehen, wird automatisch nicht nur das angegebene Paket abgerufen, sondern auch die Pakete, von denen es abhängt. Verwenden Sie "pip freeze", wenn Sie eine Liste der installierten Pakete anzeigen möchten.
$ pip freeze
certifi==2020.11.8
chardet==3.0.4
idna==2.10
numpy==1.19.4
pandas==1.1.4
python-dateutil==2.8.1
pytz==2020.4
requests==2.25.0
six==1.15.0
urllib3==1.26.2
Dies ist nicht etwas, für das sich Python entschieden hat, aber viele Leute schreiben dieses Ergebnis in eine Datei namens "require.txt" und stapeln es dann, wenn sie neu installiert oder von anderen verwendet werden. Sie können es mit installieren.
$ pip freeze > requirements.txt
$ pip install -r requirements.txt
Das Ergebnis von "pip freeze" ist nicht nur das Paket, das "pip install" war, sondern auch die abhängigen Pakete werden aufgelistet. Darüber hinaus ist auch die Version jedes Pakets enthalten, und Sie können genau dieselbe Umgebung erstellen, in der Sie sie mit pip install -r
installiert haben. Ich denke, dass viele andere Tools es eine Sperrdatei nennen, aber im Fall von pip heißt es "Einfrieren".
Es ist schön, dass alle Pakete in dem Sinne aufgelistet sind, dass sie dieselbe Umgebung reproduzieren, aber wenn Sie sich das ansehen, können Sie nicht sagen, welches Sie installiert haben und welches von der Abhängigkeit gezogen wurde. Wenn Sie ein Paket deinstallieren, können Sie löschen, was Sie "Paket installieren", aber es ist schwierig, es zu löschen, es sei denn, Sie wissen, welches Paket es gezogen hat. Ein weiteres Problem ist, dass Sie die ältere Version auch dann weiterhin verwenden, wenn die abhängigen Pakete Fehlerbehebungen enthalten. Daher ist es ein Tool, das im nächsten Kapitel vorgestellt wird.
pip-chill
Es gibt ein Tool namens Pip-Chill, um die Unannehmlichkeiten des "Pip Freeze" auszugleichen. Im Gegensatz zu "Pip Freeze" ist es nicht in Pip eingebaut und muss separat installiert werden.
$ pip install pip-chill
Jetzt können Sie Pip-Chill verwenden. Wenn Sie es ohne Argumente ausführen, sieht es so aus.
$ pip-chill
pandas==1.1.4
pip-chill==1.0.0
requests==2.25.0
Ähnlich wie "pip freeze", zeigt jedoch nur die von Ihnen installierten Pakete an. Es ist praktisch, weil Sie auf einen Blick erkennen können, wenn Sie fragen: "Was haben Sie installiert?"
Die Tatsache, dass "Pip-Chill" auf dieser Liste steht, ist ein Fehler im Ball, und Brian sagte im Podcast: "Ich wünschte, ich hätte die Möglichkeit, Pip-Chill selbst vor der Liste zu verstecken." , Pip-chill | grep -v pip-chill
kann vorerst vermieden werden.
pip-chill hat mehrere Optionen, zum Beispiel zeigt "--no-version" nur den Paketnamen an.
$ pip-chill --no-version
pandas
pip-chill
requests
Zum Beispiel denke ich, dass es in der Entwicklungsphase nicht notwendig ist, die Version im Detail anzugeben, daher denke ich, dass es möglich ist, dies in "require.txt" zu setzen. Sie können es einfach herausziehen, wenn Sie es unterwegs nicht benötigen, oder mehrere Pakete mit ähnlichen Funktionen ausprobieren. Nach dem Test ist es also okay! Wenn dies der Fall ist, "pip freeze> require.txt" und beheben Sie es einschließlich der abhängigen Pakete.
Es gibt eine weitere nützliche Option, mit der Sie diese Ausgabe erhalten können.
$ pip-chill -v
pandas==1.1.4
pip-chill==1.0.0
requests==2.25.0
# certifi==2020.11.8 # Installed as dependency for requests
# chardet==3.0.4 # Installed as dependency for requests
# idna==2.10 # Installed as dependency for requests
# numpy==1.19.4 # Installed as dependency for pandas
# python-dateutil==2.8.1 # Installed as dependency for pandas
# pytz==2020.4 # Installed as dependency for pandas
# six==1.15.0 # Installed as dependency for python-dateutil
# urllib3==1.26.2 # Installed as dependency for requests
Nach der normalen Ausgabe wird eine Liste der als Abhängigkeiten installierten Pakete in Form von Kommentaren angezeigt und enthält Informationen zu "von welchem Paket abhängig ist". Nein, ich wollte so etwas.
Außerdem zeigt -a
alle Pakete an (dh dasselbe wie pip freeze
).
Darüber hinaus speichert und verarbeitet pip-chill nicht den Verlauf der "pip install", sondern zeigt "den an, von dem niemand abhängig ist (dh den, der manuell installiert worden wäre)". Ich mache es einfach. Es ist gut zu erkennen, was Sie mit einem einfachen Mechanismus tun möchten. Aufgrund eines solchen Mechanismus ist es beispielsweise so, wenn Sie Pandas aus dem oben genannten Zustand deinstallieren.
$ pip uninstall pandas
$ pip-chill
numpy==1.19.4
pip-chill==1.0.0
python-dateutil==2.8.1
pytz==2020.4
requests==2.25.0
Offensichtlich sind Pandas verschwunden, so dass oben Numpy, Python-Dateutil und Pytz aufgeführt sind, die von ihnen abhängig waren. Es wäre noch bequemer, wenn Sie diese zusammen löschen könnten, wenn Sie Pandas löschen.
Außerdem bedeutet "Chill" "abkühlen". Im Japanischen hat der Kühlschrank eine Funktion namens "gekühlt", die der Ursprung des Wortes (?) Ist. Ich gehe nicht zu Freeze, aber ich denke, es ist eine gute Benennung, weil es sich so anfühlt, als würde es bis zu diesem Punkt abkühlen.
Ich habe versucht, ein Tool namens Pip-Chill zu verwenden. Es macht das, was ich mich gefragt habe, ob "Pip Freeze" diese Funktion nicht hat. Ich frage mich, ob es eines Tages in Pip importiert wird ...
Recommended Posts