[PYTHON] Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen

Einführung

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.

Abhängigkeitsmanagement mit pip und seinen Herausforderungen

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.

Zusammenfassung

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

Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen
Lassen Sie uns eine GUI mit Python erstellen.
Machen wir einen Blockbruch mit wxPython
Machen Sie die C-Kompilierung etwas einfacher
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie ein Webframework mit Python! (1)
Machen wir mit Pylearn 2 eine dreiäugige KI
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
Versuchen Sie, mit Rhinoceros / Grasshopper / GHPython ein sphärisches Gitter zu erstellen
[Super einfach] Machen wir einen LINE BOT mit Python.
Machen wir einen Discord Bot.
Machen wir Othello mit wxPython
Machen Sie eine Lotterie mit Python
Ein bisschen im Kettenschiff stecken
Machen Sie ein Feuer mit kdeplot
Lassen Sie uns mit Python einen Web-Socket-Client erstellen. (Zugriffstoken-Authentifizierung)
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann
Machen wir eine Remote-Rumba [Hardware]
Schreiben Sie die Messung der Verarbeitungszeit mit der with-Klausel etwas einfacher
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Lassen Sie uns eine Remote-Rumba erstellen [Software]
Machen Sie einen Sound mit Jupyter Notebook
Machen wir einen Fahrradcomputer mit Raspberry Pi Zero (W, WH)
Machen wir einen Spot Sale Service 2
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Machen wir einen Spot Sale Service 1
Machen wir Othellos KI mit Chainer-Teil 1-
Erstellen Sie ein Empfehlungssystem mit Python
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Machen Sie einen Filter mit einer Django-Vorlage
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Machen wir Othellos KI mit Chainer-Teil 2-
Erstellen Sie mit PySide einen Modelliterator
Machen Sie eine schöne Grafik mit Plotly
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
Machen wir einen Spot Sale Service 3
[Ev3dev] Lassen Sie uns ein Fernsteuerungsprogramm von Python mit dem RPyC-Protokoll erstellen
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
Über Paketmanagement mit Conda und Pip
Python-Installation und Paketverwaltung mit pip
Erstellen wir mit Python eine kostenlose Gruppe
Machen Sie einen seltenen Gacha-Simulator mit Flask
Erstellen Sie eine Notebook-Pipeline mit Kedro + Papermill
Machen Sie mit matplotlib eine teilweise gezoomte Figur
Lassen Sie uns mit Docker eine dynamische Site kratzen
Machen Sie ein Zeichnungsquiz mit kivy + PyTorch
Erleichtern Sie die Einreichung von Pypys mit atcoder-cli (Python)
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Eine Problemumgehung bei der Installation von pyAudio mit pip.