Es war, als ich gebeten wurde, die Umgebung eines bestimmten Entwicklungsstandorts zu untersuchen. Das Verfahren zum Erstellen der ** Umgebung wird mündlich angegeben **, und Anaconda wird unter Windows installiert, und zusätzliche Pakete werden mit pip installiert. Natürlich ist ** keine Version angegeben **, daher wird die aktuellste Version zu diesem Zeitpunkt enthalten sein, sodass sich die Nebenversion je nach Eingabezeitpunkt unterscheidet. In einem großen Team, das sich über Unternehmen erstreckt, ist es möglich, dass Unternehmen A funktioniert, Unternehmen B jedoch nicht. ** Da die Einführung von Lint und Formatierer ebenfalls optional ist **, existieren das Festschreibungsprotokoll von git ** der hinzugefügten und geänderten Teile und der Unterschied des formatierten Teils nebeneinander **, und die Überprüfung der Quelle dauert einige Zeit.
Möchten Sie die Python-Betriebsumgebung für alle Mitglieder des Entwicklungsteams vereinheitlichen? Möchten Sie eine saubere Quelle erstellen, die gemäß den Coderegeln einfach zu warten ist?
Beginnen wir die Arbeitsstilreform der Ingenieure mit ** Poetry **!
Wir werden das oben Gesagte anstreben. Übrigens, hier sind die Hauptprobleme der in der Übersicht genannten Entwicklungsstelle.
Problem | Was ist los | Wird es mit Poesie gelöst? |
---|---|---|
Bauverfahren für die mündliche Umgebung(Oder txt) | Verursacht menschliches Versagen wie Auslassen | Reproduzierbarkeit, da das Umgebungsinstallationsprogramm abgeschlossen ist ◎ |
Pip-Installation in einer Anaconda-Umgebung | Im schlimmsten Fall muss die Anaconda-Umgebung neu installiert werden. | Mach dir keine Sorgen, weil du Anaconda nicht verwendest |
Keine Version angegeben | Es funktioniert nicht je nach Person ... | Die Version kann mit einem Befehl vereinheitlicht werden |
Flusen und Formatierer sind optional | Schwer zu lesender Code ist schwer zu pflegen | Die Installation des Tools kann obligatorisch sein. Die automatische Ausführung muss mit vscode und git kombiniert werden. |
Wir werden Poesie unter der Python-Umgebung installieren. Es handelt sich um eine einmalige Installation mit dem folgenden Befehl. Operationen wie Docker müssen nicht erlernt werden.
$pip install poetry
Sobald Poetry installiert ist, erstellen wir eine Projektvorlage.
$ poetry new xxx
Der Teil, der xxx entspricht, ist der Projektname. Dies ist der Teil von * pip install xxx *, der xxx entspricht. Ein Quell- / Testverzeichnis und eine Readme-Datei pyproject.toml werden erstellt. Danach drücken Sie zum Git-Repository und die anfängliche Einstellung ist abgeschlossen.
Wenn Sie es ausführen, sieht es so aus |
---|
Bearbeiten Sie die Datei ** pyproject.toml **, um die für Ihr Projekt erforderlichen abhängigen Bibliotheken zu konfigurieren. pyproject.tomlはパッケージビルドに必要なデータを定義するファイルのフォーマットで、setup.py/cfgを置き換えてsetuptoolsではないビルドツールでもビルドが可能となることを目的として作られたものです。
#Abhängige Bibliothek hinzufügen
$ poetry add xxx
#Entwicklungsbibliothek hinzugefügt
$ poetry add -D xxx
Es kann auf die gleiche Weise wie die Pip-Installation ausgeführt werden. Wenn Sie die Version angeben möchten, verwenden Sie den Operator ==.
$ root@16460604cb93:~/poetry_template# poetry add tensorflow==2.3.0
Creating virtualenv poetry-template-oDQfK0qA-py3.8 in /root/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (48.4s)
Writing lock file
Package operations: 41 installs, 0 updates, 0 removals
$ root@16460604cb93:~/poetry_template# poetry add -D mypy black isort
Using version ^0.790 for mypy
Using version ^20.8b1 for black
Using version ^5.6.4 for isort
Wenn Sie den Befehl add ausführen, wird er der Datei pyproject.toml hinzugefügt. Sie können pyproject.toml auch direkt bearbeiten.
[tool.poetry]
name = "poetry_template"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]
[tool.poetry.dependencies]
python = "^3.8"
tensorflow = "2.3.0"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
mypy = "^0.790"
black = "^20.8b1"
isort = "^5.6.4"
flake8 = "^3.8.4"
radon = "^4.3.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Wir werden eine virtuelle Umgebung (venv) erstellen, in der die Umgebung gemäß den in der Datei pyproject.toml beschriebenen Bedingungen installiert wird.
Standardmäßig wird venv im Home-Verzeichnis erstellt. Es wäre jedoch hilfreich, wenn es direkt unter dem Projekt erstellt werden könnte, z. B. wenn Sie es mit vscode verwenden. Ändern Sie daher die Einstellung.
$ poetry config virtualenvs.in-project true
$ poetry config --list
Die Installation ist auch ein einzelner Befehl. Sie haben ein .venv-Verzeichnis und eine poetry.lock-Datei.
$ poetry install
Wenn Sie es ausführen, sieht es so aus |
---|
Die Datei poetry.lock ist eine Datei, die vollständige Abhängigkeiten garantiert. Selbst wenn Sie in der Datei pyproject.toml keine expliziten Versionen angegeben haben, zeichnet die Sperrdatei die Versionsinformationen von Abhängigkeiten auf, die in der Vergangenheit erfolgreich installiert wurden, sodass jeder sie jederzeit reproduzieren kann. Mit anderen Worten, wenn Sie diese Datei an Teammitglieder verteilen und Gedichte installieren, haben Sie immer eine einzigartige Umgebung.
Wir werden auf die zuletzt erstellte virtuelle Umgebung zugreifen. Sie können auf die Befehle in der virtuellen Umgebung mit dem Befehl poetry run zugreifen.
#An Python anhängen
$ poetry run python -V
Python 3.8.5
#Testlauf
$ poetry run pytest
======================================================= test session starts =======================================================
platform linux -- Python 3.8.5, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: /root/poetry_template
collected 1 item
tests/test_poetry_template.py . [100%]
======================================================== 1 passed in 0.01s ========================================================
Es ist lange her, aber das ist alles für die Poesie. Ich hoffe, Sie verstehen, dass Sie die Umgebung mit nur wenigen Befehlen codieren, mit Git verwalten und alle Projektmitglieder in derselben Umgebung entwickeln können.
Wir haben eine Projektvorlage erstellt, die Sie tatsächlich verwenden können. Verwenden Sie sie daher bitte. https://github.com/TomokiHirose/poetry_template
Ich erstelle eine Projektvorlage mit den folgenden Funktionen. Schreiben Sie die Vorlage neu und verwenden Sie den Befehl poet update, um die Umgebung entsprechend dem Benutzer neu zu schreiben.
Befehl | Inhalt |
---|---|
poetry run pytest | ./Führen Sie die Tests mit der zu testenden Datei aus |
poetry run format | black(Leistungsstarker Formatierer)Und isort(Importauftrag ausrichten)Läuft |
poetry run lint | flake8(linter)Und mypy(Statische Typprüfung)Läuft |
poetry run metrics | Führen Sie eine statische Analyse des zirkulären Komplexitätsindex, des Wartungsverfügbarkeitsindex, des LOC usw. durch. |
poetry run apidoc | Generieren Sie API-Dokumentation mit Sphinx |
poetry run testdoc | Generieren Sie Testdokumentation mit Sphinx[^1] |
poetry build | ./Radfeile unter dist(Python-Installationsprogramm)Generieren |
Ich habe vergessen, es zu installieren! Selbst in diesem Fall drücken Sie anstelle von "Bitte xx installieren" einfach den Fix auf git und alle Mitglieder drücken den Update-Befehl, und alle befinden sich sofort in derselben Umgebung! Findest du es nicht sehr modern?
Darüber hinaus wird in Zusammenarbeit mit vscode das Format erzwungen, wenn Schwarz und flake8 unter .venv zum Zeitpunkt des Speicherns automatisch ausgeführt werden oder wenn Schwarz vor dem Push durch Verknüpfen mit dem Commit-Hook von git ausgeführt wird. tun können. Ich finde es nicht großartig, PEP8 [^ 2] zu folgen, aber wenn Sie ** jemanden zwingen, denselben Code zu schreiben **, ist es ähnlich, auch wenn Fortgeschrittene und Neulinge im selben Projekt sind. Es wird empfohlen, da die Wartung einfacher ist, da der Code auf diese Weise vervollständigt wird.
[^ 1]: Ein Dokument, in dem die im Test zu bestätigenden Punkte und der verantwortliche Tester aufgezeichnet sind. [^ 2]: PEP8 ist ein Python-Codierungsstandard. Es ist nicht immer notwendig, dies zu befolgen, aber es gibt einen Unterschied in der Wartungsfreundlichkeit, je nachdem, ob es einen Standard gibt oder nicht.
Recommended Posts