Blog

Minimales pyproject.toml Beispiel

Aktualisiert Oktober 17, 2025
3 Minuten

In diesem Blogpost zeige ich Ihnen ein minimales Beispiel für eine pyproject-Datei, die flit verwendet, um ihre Abhängigkeiten zu installieren. Bereits 2016 wurde PEP 518 erstellt, um das Problem der Dateien zu lösen (sie sind von Bibliotheken abhängig, die nur in der Datei definiert werden können). Damit wurde die Datei eingeführt. Ich persönlich habe versucht, so lange wie möglich bei setup.py Dateien zu bleiben (weil ich die Einfachheit mag), bin aber jetzt zu pyproject.toml gewechselt.

Das setup.py Beispiel

Die minimale setup.py, die wir umwandeln werden.

import os
from setuptools import setup, find_packages

BUILD_ID = os.environ.get("BUILD_BUILDID", "0")

setup(
    name="titanic_ml",
    version="0.1" + "." + BUILD_ID,
    # Author details
    author="Niels Zeilemaker",
    author_email="nielszeilemaker@xebia.com",
    packages=find_packages("src"),
    package_dir={"": "src"},
    setup_requires=["pyspark[ml]", "sklearn", "pytest-runner"],
    tests_require=["pytest", "pytest-nunit", "pytest-cov"],
    extras_require={"develop": ["pre-commit", "bump2version"]},
)

Ich werde einige dieser Zeilen näher erläutern. Zunächst erhalte ich die BUILD_BUILDID. Das ist eine Azure Devops-spezifische Umgebungsvariable, die auf einen bestimmten Pipeline-Lauf verweist. Ich füge diese BUILDID zur Versions-Patch-Nummer hinzu.

Außerdem bin ich ein großer Fan davon, den gesamten Code in einem src-Ordner abzulegen. Dies ist etwas sicherer und die allgemein empfohlene Art, ein Python-Projekt zu strukturieren. Siehe zum Beispiel das pypa-Beispielprojekt.

Dann definiere ich drei verschiedene Gruppen von Anforderungen. setup_requires, die die Basisabhängigkeiten dieses Projekts definieren. tests_require, die die Abhängigkeiten definieren, die bei der Ausführung der Tests installiert werden müssen (in diesem Fall bei der Ausführung von python setup.py test). Und schließlich extras_require, wo ich einige Extras für die Entwicklung festlege.

Das Beispiel pyproject.toml

[project]
name = "titanic_ml"
description = "titanic_ml example package"
version = "0.1.0"
authors = [
    { name = "Niels Zeilemaker", email = "nielszeilemaker@xebia.com" }
]
dependencies = [
    "pyspark[ml]",
    "sklearn"
]

[project.optional-dependencies]
dev = [
    "tox",
    "pre-commit",
    "bump2version"
]

[build-system]
build-backend = "flit_core.buildapi"
requires = ["flit_core >=3.2,<4"]

Ich hatte tatsächlich einige Schwierigkeiten bei der Erstellung dieser Datei. Dieser neue Standard fühlt sich noch nicht wirklich wie ein Standard an. Zumindest nicht so, wie er in PEP 621 definiert ist. Aber am Ende ist die Datei selbst der setup.py Datei, die ich oben vorgestellt habe, ziemlich ähnlich.

Einige Beobachtungen, ich kann die BUILD_BUILDID nicht mehr abrufen, da dies kein Python ist. Aber bump2version ist ein brauchbarer Workaround. Außerdem wollte ich unbedingt pip und editierbare Installationen nutzen, z.B. . Mit flit und pip 21.3.1 ist das jetzt möglich.

Schließlich wird python setup.py test durch tox ersetzt. Das funktioniert, ist ein bisschen langsamer, aber auch viel funktionsreicher (z.B. Testen mit verschiedenen Python-Versionen).

Ich hoffe, dies ist nützlich, und viel Erfolg bei der Konvertierung von setup.py zu pyproject.tomls.

Contact

Let’s discuss how we can support your journey.