Python-Projekte mit Poetry und VSCode Teil 1 - Python Spickzettel

Eine virtuelle Umgebung ist eine isolierte Python-Installation, die dazu dient, unsere Basisinstallation nicht mit Bibliotheken zu füllen, die wir möglicherweise nur für ein einziges Projekt verwenden. Sie ermöglicht es uns auch, mehrere Versionen desselben Pakets in verschiedenen Projekten zu verwalten. Wir könnten zum Beispiel Django 4.1 für das eine und 1.9 für das andere benötigen.
Python Poetry
Poetry ist ein Werkzeug zur Verwaltung der Abhängigkeitsinstallation sowie zum Bauen und Verpacken von Python-Paketen. Es benötigt nur eine Datei, um all dies zu erledigen: die neue, standardisierte pyproject.toml`. Mit anderen Worten, Poetry verwendet pyproject.toml, um setup.py, requirements.txt, setup.cfg, MANIFEST.in und die neu hinzugefügte Pipfile zu ersetzen.
In dieser Artikelserie werden wir Poetry verwenden, um unsere Abhängigkeiten zu verwalten, ein einfaches Projekt zu erstellen und es mit einem einzigen Befehl auf PyPI zu veröffentlichen.
In diesem ersten Teil werden wir:
- Ein neues Projekt starten.
- Eine virtuelle Umgebung erstellen.
- Abhängigkeiten verwalten.
Im zweiten Artikel werden wir:
- Unsere virtuelle Umgebung zu VSCode hinzufügen.
- Unsere Entwicklungsabhängigkeiten integrieren:
- Flake8
- Black
- Pytest
Und schließlich werden wir in einem dritten Artikel:
- Eine Beispielbibliothek schreiben.
- Unser Projekt mit Poetry erstellen.
- Es auf PyPI veröffentlichen.
Poetry installieren
Der einfachste Weg ist die Verwendung von pip:
pip install poetry
Wir werden jedoch den eigenen Installer von Poetry verwenden, um es vom Rest des Systems zu isolieren, indem wir seine Abhängigkeiten bündeln. Dies ist die empfohlene Methode zur Installation von Poetry:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Auf diese Weise können wir Poetry später mit dem Befehl poetry self update auf die neueste stabile Version aktualisieren.
Ein neues Projekt starten
Wir können nun ein neues Python-Projekt mit dem Befehl poetry new [projektname] starten. Ich werde es how-long nennen, und es wird eine einfache Bibliothek sein, um die Ausführungszeit einer Funktion zu messen:
poetry new how-long
Hinweis: Für bestehende Projekte können Sie den Befehl
poetry initverwenden, um interaktiv eine pyproject.toml zu erstellen.
Das Verzeichnis how-long wird erstellt und enthält eine grundlegende Projektstruktur:
how-long
├── README.rst
├── how_long
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_how_long.py
Eine umfassende Anleitung zur Handhabung von Datei- und Verzeichnispfaden, die für die Verwaltung von Projektstrukturen unerlässlich ist, finden Sie auf der Seite Datei- und Verzeichnispfade.
Hinweis: Um Ihr Projekt veröffentlichen zu können, benötigen Sie einen verfügbaren Namen. Verwenden Sie die PyPI-Suche dafür.
Die pyproject.toml Datei
Die Datei pyproject.toml verwaltet die Details und Abhängigkeiten des Projekts:
[tool.poetry]
name = "how-long"
version = "0.1.0"
description = "A simple decorator to measure a function execution time."
authors = ["wilfredinni <carlos.w.montecinos@gmail.com>"]
[tool.poetry.dependencies]
python = "^3.7"
[tool.poetry.dev-dependencies]
pytest = "^3.0"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
[tool.poetry]
Die Details. Das Hinzufügen einer Lizenz und einer README könnte eine gute Idee sein:
[tool.poetry]
...
license = "MIT"
readme = "README.rst"
[tool.poetry.dependencies]
Zuerst die Python-Version. Im Grunde wird dieses Projekt mit Python 3.7 und höher kompatibel sein. Darüber hinaus wird jedes Paket, das wir von nun an installieren und das in der Produktion verwendet werden soll, hier aufgeführt.
[tool.poetry.dev-dependencies]
Diese Pakete sind nur für die Entwicklung bestimmt und werden nicht enthalten sein, wenn wir unser Projekt veröffentlichen. Standardmäßig fügt Poetry Pytest hinzu, also werden wir es verwenden, um unser Projekt später zu testen.
Eine virtuelle Umgebung erstellen
Um eine virtuelle Umgebung zu erstellen und Pytest zu installieren, verwenden wir den Befehl poetry install:
poetry install

Danach wird eine neue Datei, poetry.lock, erstellt.
Wenn Poetry die Installation abgeschlossen hat, schreibt es alle Pakete und die genauen Versionen, die es heruntergeladen hat, in die poetry.lock-Datei und sperrt das Projekt auf diese spezifischen Versionen. Sie sollten die poetry.lock-Datei in Ihr Projekt-Repo einchecken, damit alle, die am Projekt arbeiten, auf dieselben Versionen der Abhängigkeiten festgelegt sind.
Abhängigkeitsverwaltung
Eine Möglichkeit, Abhängigkeiten hinzuzufügen oder zu entfernen, besteht darin, pyproject.toml direkt zu bearbeiten und dann poetry install auszuführen, um die Änderungen zu übernehmen. Wir werden stattdessen die Befehle add und remove verwenden, um manuelle Änderungen zu vermeiden.
Abhängigkeiten hinzufügen
Fügen wir dem Projekt zwei Pakete hinzu, pendulum und coo:
poetry add pendulum coo

Öffnen Sie pyproject.toml und poetry.lock und sehen Sie, wie sie aktualisiert wurden.
Entwicklungsabhängigkeiten hinzufügen
Diese Abhängigkeiten sind nur während der Entwicklung verfügbar; Poetry wird sie beim Erstellen und Veröffentlichen des Projekts nicht einschließen.
Wir haben Pytest bereits installiert, aber wir werden auch flake8 für Linting und mypy für statische Typisierung verwenden:
poetry add -D flake8 mypy
Jetzt, wo ich darüber nachdenke, habe ich vergessen, einen Formatter hinzuzufügen. Wir nehmen black:
poetry add -D black
[ValueError]
Could not find a matching version of package black
add [-D|--dev] [--git GIT] [--path PATH] [-E|--extras EXTRAS] [--optional] [--python PYTHON] [--platform PLATFORM] [--allow-prereleases] [--dry-run] [--] <name> (<name>)...
Dieser Fehler tritt auf, weil black sich in einem Vorabversionszustand befindet, sodass Poetry keine stabile Version für uns finden kann. Aber ich möchte es wirklich, also installieren wir es trotzdem mit dem Flag --allow-prereleases:
poetry add -D black --allow-prereleases

Abhängigkeiten entfernen
Wissen Sie was, ich habe meine Meinung geändert, dieses Projekt wird weder coo noch mypy verwenden. Beginnen wir damit, coo zu entfernen, eine normale Abhängigkeit unseres Projekts:
poetry remove coo
Nun mypy, was eine Entwicklungsabhängigkeit ist:
poetry remove -D mypy
Fazit
In diesem ersten Teil haben wir ein neues Projekt gestartet, eine virtuelle Umgebung erstellt und Abhängigkeiten hinzugefügt und entfernt, indem wir die folgenden Befehle verwendet haben:
| Befehl | Beschreibung |
|---|---|
poetry new [paketname] | Ein neues Python-Projekt starten. |
poetry init | Interaktiv eine pyproject.toml-Datei erstellen. |
poetry install | Die Pakete in der pyproject.toml-Datei installieren. |
poetry add [paketname] | Ein Paket zu einer virtuellen Umgebung hinzufügen. |
poetry add -D [paketname] | Ein Entwicklungs-Paket zu einer virtuellen Umgebung hinzufügen. |
poetry remove [paketname] | Ein Paket aus einer virtuellen Umgebung entfernen. |
poetry remove -D [paketname] | Ein Entwicklungs-Paket aus einer virtuellen Umgebung entfernen. |
poetry self:update | Poetry auf die neueste stabile Version aktualisieren. |
In einem zweiten Artikel werden wir weitere Poetry-Befehle sehen, unsere virtuelle Umgebung zu VSCode hinzufügen und die installierten Entwicklungspakete verwenden, um unseren Code im Editor zu linten (Flake8), zu formatieren (Black) und zu testen (Pytest). Schließlich werden wir in einem dritten einen Beispielbibliothek schreiben und auf PyPI veröffentlichen.
Irgendwelche Zweifel oder Vorschläge? Bitte hinterlassen Sie einen Kommentar.