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

Im ersten Artikel haben wir ein neues Projekt gestartet, eine virtuelle Umgebung erstellt und Abhängigkeiten verwaltet. Im zweiten Teil haben wir unsere virtuelle Umgebung zu VSCode hinzugefügt und unsere Entwicklungsabhängigkeiten integriert.
Und schließlich werden wir in diesem dritten und letzten Teil:
- Eine Beispielbibliothek schreiben.
- Unser Projekt mit Poetry bauen.
- Es auf PyPI veröffentlichen.
Poetry Befehle
Hier ist eine Tabelle mit den in dieser Reihe verwendeten Befehlen sowie deren Beschreibungen. Für eine vollständige Liste lesen Sie die Poetry Dokumentation.
| Befehl | Beschreibung |
|---|---|
poetry new [package-name] | Ein neues Python-Projekt starten. |
poetry init | Eine pyproject.toml-Datei interaktiv erstellen. |
poetry install | Die Pakete in der pyproject.toml-Datei installieren. |
poetry add [package-name] | Ein Paket zu einer virtuellen Umgebung hinzufügen. |
poetry add -D [package-name] | Ein Entwicklungs-Paket zu einer virtuellen Umgebung hinzufügen. |
poetry remove [package-name] | Ein Paket aus einer virtuellen Umgebung entfernen. |
poetry remove -D [package-name] | Ein Entwicklungs-Paket aus einer virtuellen Umgebung entfernen. |
poetry update | Die neuesten Versionen der Abhängigkeiten abrufen |
poetry shell | Startet eine Shell innerhalb der virtuellen Umgebung. |
poetry build | Baut die Quell- und Wheel-Archive. |
poetry publish | Das Paket auf PyPI veröffentlichen. |
poetry publish --build | Ein Paket bauen und veröffentlichen. |
poetry self:update | Poetry auf die neueste stabile Version aktualisieren. |
Das Projekt
Sie können den Quellcode von GitHub herunterladen, wenn Sie möchten, aber wie bereits erwähnt, wird dies ein einfacher Decorator sein, der die Laufzeit einer Funktion in der Konsole ausgibt.
Es wird wie folgt funktionieren:
from how_long import timer
@timer
def test_function():
[i for i in range(10000)]
test_function()
# Execution Time: 955 ms.
Und das Projektverzeichnis wird wie folgt aussehen:
how-long
├── how_long
│ ├── how_long.py
│ └── __init__.py
├── how_long.egg-info
│ ├── dependency_links.txt
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── LICENSE
├── poetry.lock
├── pyproject.toml
├── README.rst
└── tests
├── __init__.py
└── test_how_long.py
Bevor wir beginnen, überprüfen Sie die Paketaktualisierungen mit dem Befehl poetry update:

Fügen Sie eine kurze Beschreibung für das Projekt in die README.rst ein:
how_long
========
Einfacher Decorator zur Messung der Ausführungszeit einer Funktion.
Beispiel
_______
.. code-block:: python
from how_long import timer
@timer
def some_function():
return [x for x in range(10_000_000)]
Navigieren Sie zu how_long/how_long.py:
# how_long.py
from functools import wraps
import pendulum
def timer(function):
"""
Einfacher Decorator zur Messung der Ausführungszeit einer Funktion.
"""
@wraps(function)
def function_wrapper():
start = pendulum.now()
function()
elapsed_time = pendulum.now() - start
print(f"Execution Time: {elapsed_time.microseconds} ms.")
return function_wrapper
In how_long/__init__.py:
from .how_long import timer
__version__ = "0.1.1"
Und schließlich die Datei tests/test_how_long.py:
from how_long import __version__
from how_long import timer
def test_version():
assert __version__ == "0.1.1"
def test_wrap():
@timer
def wrapped_function():
return
assert wrapped_function.__name__ == "wrapped_function"
Sie können nun poetry install in Ihrem Terminal ausführen, um Ihr Paket lokal zu installieren und zu testen. Aktivieren Sie Ihre virtuelle Umgebung, falls noch nicht geschehen, und in der interaktiven Python-Shell:
>>> from how_long import timer
>>>
>>> @timer
... def test_function():
... [i for i in range(10000)]
...
>>> test_function()
Execution Time: 705 ms.
Führen Sie die Tests aus und wenn alles in Ordnung ist, fahren Sie fort.
Bauen und Veröffentlichen
Endlich ist es soweit, dieses Projekt der Welt zugänglich zu machen! Stellen Sie sicher, dass Sie ein Konto auf PyPI haben. Denken Sie daran, dass der Paketname eindeutig sein muss. Wenn Sie unsicher sind, nutzen Sie die Suche, um dies zu überprüfen.
Bauen
Der Befehl poetry build erstellt die Quell- und Wheels-Archive, die später als Quelle des Projekts hochgeladen werden:

Das Verzeichnis how_long.egg-info wird erstellt.
Veröffentlichen
Dieser Befehl veröffentlicht das Paket auf PyPI und registriert es automatisch, bevor es hochgeladen wird, falls es zum ersten Mal eingereicht wird:

Sie können Ihr Projekt auch mit
$ poetry publish --buildbauen und veröffentlichen.
Geben Sie Ihre Anmeldeinformationen ein, und wenn alles in Ordnung ist, durchsuchen Sie Ihr Projekt, und Sie werden so etwas sehen:

Wir können nun andere wissen lassen, dass sie pip install how-long von jedem beliebigen Rechner überall installieren können!
Fazit
Ich erinnere mich an das erste Mal, als ich versuchte, ein Paket zu veröffentlichen, und es war ein Albtraum. Ich fing gerade erst mit Python an und musste “ein paar Stunden” damit verbringen, zu verstehen, was die Datei setup.py ist und wie man sie benutzt. Am Ende hatte ich mehrere Dateien: eine Makefile, eine MANIFEST.in, eine requirements.txt und eine test_requirements.txt. Deshalb ergaben die Worte von Sébastien Eustace, dem Schöpfer von Poetry, für mich viel Sinn:
Packaging und Abhängigkeitsmanagement in Python sind für Neulinge ziemlich kompliziert und schwer zu verstehen. Selbst für erfahrene Entwickler kann es manchmal mühsam sein, alle benötigten Dateien in einem Python-Projekt zu erstellen:
setup.py,requirements.txt,setup.cfg,MANIFEST.inund die neu hinzugefügtePipfile.Ich wollte also ein Werkzeug, das alles auf eine einzige Konfigurationsdatei beschränkt, um Folgendes zu tun: Abhängigkeitsmanagement, Paketierung und Veröffentlichung.
Es nimmt Inspiration von Werkzeugen, die in anderen Sprachen existieren, wie
composer(PHP) odercargo(Rust).Und schließlich gibt es kein zuverlässiges Werkzeug, um Abhängigkeiten in Python richtig aufzulösen, also habe ich
poetrygestartet, um der Python-Community einen umfassenden Abhängigkeitsauflöser zu bringen.
Poetry ist keineswegs perfekt, aber im Gegensatz zu anderen Tools hält es, was es verspricht.