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 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 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.
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




