Es ist ungefähr ein halbes Jahr her, seit ich Pipenv kennengelernt und angefangen habe, es zu benutzen. Ich werde zusammenfassen, was ich für zweckmäßig hielt.
Um es einfach auszudrücken: Pipenv
ist praktisch, also sollte jeder es versuchen.
Bis ich von der Existenz von "Pipenv" erfuhr, habe ich mit "venv" eine virtuelle Umgebung erstellt und diese verwaltet, indem ich die in "require.txt" beschriebenen Module mit "pip" installiert habe.
requirements.txt
requests==2.22.0
Bereiten Sie eine solche Datei vor
$ python3 -m venv venv
$ ./venv/bin/python -m pip install -r requirements.txt
Collecting requests==2.22.0 (from -r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests==2.22.0->-r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Installing collected packages: idna, certifi, urllib3, chardet, requests
Successfully installed certifi-2019.11.28 chardet-3.0.4 idna-2.8 requests-2.22.0 urllib3-1.25.7
Etwas wie das.
Um Code in dieser Umgebung auszuführen, geben Sie entweder "source. / Venv / bin / enabled" oder direkt ". / Venv / bin / python" an.
Bisher gab es einige Probleme bei der Verwaltung von Modulen.
requirements.txt
requests==2.22.0
Zuerst war ich besorgt, dass die Version des abhängigen Moduls mit dieser Art des Schreibens von "require.txt" nicht repariert werden konnte.
Der Befehl pip
verfügt jedoch über einen Unterbefehl namens freeze
, der alle derzeit installierten Module in einem Format ausgibt, das in require.txt
beschrieben werden kann.
Infolgedessen sieht meine require.txt
so aus.
requirements.txt
certifi==2019.11.28
chardet==3.0.4
idna==2.8
pkg-resources==0.0.0
requests==2.22.0
urllib3==1.25.7
Jetzt können Sie die Version aller abhängigen Module angeben! Aber das große Problem hier ist
** Ich kenne die Modulabhängigkeiten überhaupt nicht **
Wie ich später erklären werde, bin ich in dieser Hinsicht zu einem Körper geworden, von dem sich Pipenv nicht trennen kann.
Die aktuelle Datei "require.txt" listet nur alle Module auf, die installiert werden sollen, daher kenne ich die Abhängigkeiten der einzelnen Module überhaupt nicht. Abhängig vom Projekt können die Dateien auch in "dev-require.txt" und "build-require.txt" unterteilt werden (wie dies bei dem von mir entwickelten Projekt der Fall war). Es fiel mir schwer, eine Version des Moduls zu geben. Ich weiß nicht, von welchem Paket es abhängt, also habe ich es in einer anderen Umgebung installiert und die abhängigen Pakete überprüft.
Bis ich die virtuelle Umgebung erstellt und den Code ausgeführt habe, hatte ich die folgenden Schritte:
$ python3 -m venv venv #Erstellen Sie eine virtuelle Umgebung
$ ./venv/bin/pip install -U setuptools pip wheel #Aktualisieren Sie das Basismodul auf die neueste Version
$ ./venv/bin/pip install -r requirements.txt #Installation der erforderlichen Module
$ ./venv/bin/python main.py #Ausführen von Code in einer virtuellen Umgebung
Was! Es wäre schön, die einmal erstellte venv-Umgebung beizubehalten, aber das ist nicht der Fall.
Ich benutze "Makefile", um dies mit einem einzigen Befehl zu ermöglichen.
Makefile
venv:
python3 -m venv venv
./venv/bin/pip install -U setuptools pip wheel
./venv/bin/pip install -r requirements.txt
.PHONY: run
run:
${MAKE} venv
./venv/bin/python main.py
Jetzt können Sie Ihren Code jederzeit mit "make run" ausführen.
Eines Tages traf ich Pipenv. .. ..
https://pipenv-ja.readthedocs.io/ja/translate-ja/
Die offizielle Dokumentation für Pipenv
ist sehr gut. Es ist japanisch und leicht zu lesen.
Persönlich war dies eine große Hilfe.
Sie können die Funktion von "Pipenv" in der offiziellen Dokumentation sehen. Versuchen Sie hier "Pipenv" und verwenden Sie die bisherige Verwaltungsmethode. Hier sind einige der Funktionen, die ich nützlich fand.
Es ist keine Übertreibung zu sagen, dass ich diesen Artikel geschrieben habe, weil ich das sagen wollte.
Obwohl hier nicht ausführlich erwähnt, verwaltet Pipenv
Module in einer Datei namens Pipfile
anstelle von require.txt
.
Diese Datei wird automatisch generiert, wenn Sie den Befehl pipenv
ausführen, sodass Sie möglicherweise keine Möglichkeit haben, sie direkt zu bearbeiten.
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
requests = "==2.22.0"
[requires]
python_version = "3.6"
Versuchen Sie nun, den Befehl pipenv graph
auszuführen.
$ pipenv graph
requests==2.22.0
- certifi [required: >=2017.4.17, installed: 2019.11.28]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.9, installed: 2.8]
- urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.7]
** Sie können nicht nur die installierten Module überprüfen, sondern auch die Abhängigkeiten der einzelnen Module anzeigen. ** ** ** Dies wurde persönlich am meisten geschätzt.
Da Sie die für jedes Modul erforderliche Version sehen können, müssen Sie die Abhängigkeiten nicht jedes Mal überprüfen, wenn Sie die Version ändern möchten.
Bei Verwendung von "Pipenv" können Sie mit dem folgenden Befehl eine virtuelle Umgebung erstellen → erforderliche Module installieren → Code in der virtuellen Umgebung ausführen.
$ pipenv install #Erstellen einer virtuellen Umgebung+Installation der erforderlichen Module
$ pipenv run python main.py #Haupt in der virtuellen Umgebung.Führen Sie py aus
Die Anzahl der Befehle ist im Vergleich zu der in [Problem beim Ausführen von Code](# Problem beim Ausführen von Code) eingeführten Prozedur deutlich reduziert. Mit diesem Betrag müssen Sie sich nicht die Mühe machen, "Makefile" zu verwenden.
Durch Definieren eines Abschnitts mit dem Namen "Skripte" in "Pipfile" können Sie häufig ausgeführte Anweisungen als Befehle definieren. Klicken Sie hier für Details (https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html#custom-script-shortcuts) (Offiziell)
Das folgende "Pipfile", das den Befehl zum Ausführen des Tests definiert, lautet beispielsweise wie folgt.
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
pytest = "==5.3.1"
[packages]
requests = "==2.22.0"
[requires]
python_version = "3.6"
[scripts]
test = "python -m pytest tests/"
Ein Abschnitt namens "[Skripte]" wurde hinzugefügt.
Hier können Sie Unterbefehle definieren, die dem Befehl "pipenv run" folgen. In diesem Fall führt der "pipenv run test" den Test mit dem "pytest" aus. Häufig verwendete Befehle wie Testausführung und Verpackung wurden in "Makefile" beschrieben. Wenn Sie dies jedoch verwenden, benötigen Sie nur eine "Pipfile", um einfachen Code auszuführen.
Wenn Sie den Code mit "pipenv run" ausführen, wird automatisch die ".env" -Datei geladen. Klicken Sie hier für Details (https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html#automatic-loading-of-env) (Offiziell)
Das ist auch nüchtern.
Ich benutze diese Funktion wie eine Konfigurationsdatei. Schreiben Sie den Wert in die Datei ".env" im Format "key = value", damit der Code den Wert aus der Umgebungsvariablen liest.
.env
KEY=VALUE
main.py
import os
key = os.environ.get("KEY")
print(key) # VALUE
Genau wie bei der Einstellungsdatei ändert das Bearbeiten der Datei in .env
das Ausführungsergebnis.
$ pipenv run python main.py
VALUE
Wenn der Umfang des Codes groß wird, ist es besser, einen Mechanismus zum korrekten Lesen der Einstellungsdatei zu erstellen.
Diese Funktion ist sehr hilfreich, da es schwierig ist, den Code zum Lesen der Einstellungsdatei mit ConfigParser
usw. für kleinen Code zu schreiben.
Wenn Sie "Python" verwenden und noch nie von "Pipenv" gehört haben, versuchen Sie es bitte.
Recommended Posts