Posted on April 12, 2019· Updated on July 3, 2022

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

#python #intermediate #vscode #packaging
Image for 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 init verwenden, 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

poetry-install-command

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

poetry-add-command

Ö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

poetry-add-dev-command

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:

BefehlBeschreibung
poetry new [paketname]Ein neues Python-Projekt starten.
poetry initInteraktiv eine pyproject.toml-Datei erstellen.
poetry installDie 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:updatePoetry 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.