[PYTHON] Ich habe versucht, Pipenv zu verwenden

Einführung

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.

Bisher

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.

Probleme bisher

Bisher gab es einige Probleme bei der Verwaltung von Modulen.

Schwer zu verstehen, von welchen Modulen abhängt

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.

Es ist mühsam, den Code auszuführen

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.

Mach dir keine Sorgen, wenn du Makefile verwendest

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.

Ich habe Pipenv kennengelernt

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.

Gute Punkte von Pipenv

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.

Einfach zu verstehende Modulabhängigkeiten

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.

Einfach auszuführender Code

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.

Skripte können definiert werden

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.

Liest die .env-Datei

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.

Versuchen Sie es mit Pipenv

Wenn Sie "Python" verwenden und noch nie von "Pipenv" gehört haben, versuchen Sie es bitte.

Recommended Posts

Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, pipenv zu verwenden, machen Sie sich also eine Notiz
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe versucht, Rotrics Dex Arm zu verwenden
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, mit dem Server-Client über tmux zu kommunizieren
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit OpenPose eine Schildkrötenwelle zu schießen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Ich habe PyQ ausprobiert
Ich habe AutoKeras ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe versucht, YOUTUBE Data API V3 zu verwenden