Python Packaging

Eine 'kontroverse' Meinung

Die Verwendung von setup.py zum Packen und Verteilen Ihrer Python-Pakete kann gelegentlich recht herausfordernd sein. Moderne Tools wie Poetry und UV machen nicht nur das Packaging viel einfacher, sondern helfen Ihnen auch, Ihre Abhängigkeiten auf sehr bequeme Weise zu verwalten. UV ist besonders bemerkenswert, da es 10-100x schneller ist als herkömmliche Tools.

Wenn Sie mehr Informationen über Poetry wünschen, können Sie die folgenden Artikel lesen:

Für eine umfassende Anleitung zu UV, dem blitzschnellen Python-Paketmanager, lesen Sie: UV: Der blitzschnelle Python-Paketmanager.

Introduction

Python Packaging ist der Prozess der Vorbereitung Ihres Python-Projekts für die Verteilung und Installation. Es gibt zwei Hauptansätze: die traditionelle setup.py-Methode und den modernen pyproject.toml-Ansatz (definiert in PEP-517, PEP-518 und PEP-660).

Für eine umfassende Anleitung zur Handhabung von Datei- und Verzeichnispfaden, was für die Verwaltung von Projektstrukturen unerlässlich ist, siehe die Seite File and directory Paths.

Traditional Approach: setup.py

Die Datei setup.py steht im Mittelpunkt eines traditionellen Python-Projekts. Sie beschreibt alle Metadaten über Ihr Projekt. Es gibt einige Felder, die Sie einem Projekt hinzufügen können, um ihm einen reichen Satz an Metadaten zu geben, die das Projekt beschreiben. Es gibt jedoch nur drei erforderliche Felder: name, version und packages. Das Feld name muss eindeutig sein, wenn Sie Ihr Paket im Python Package Index (PyPI) veröffentlichen möchten. Das Feld version verfolgt verschiedene Versionen des Projekts. Das Feld packages beschreibt, wo Sie den Python-Quellcode innerhalb Ihres Projekts abgelegt haben.

Dies ermöglicht es Ihnen, Python-Pakete einfach zu installieren. Oft reicht es aus zu schreiben:

python setup.py install

und das Modul installiert sich selbst.

Example: setup.py

Unser anfängliches setup.py wird auch Informationen über die Lizenz enthalten und die Datei README.txt für das Feld long_description wiederverwenden. Dies sieht dann so aus:

# setup.py: define package metadata for distribution
from distutils.core import setup
setup(
   name='pythonCheatsheet',  # Package name (must be unique on PyPI)
   version='0.1',  # Version number
   packages=['pipenv',],  # List of packages to include
   license='MIT',  # License type
   long_description=open('README.txt').read(),  # Read description from file
)
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

What are the three required fields in a setup.py file?
A. name, author, license
B. name, description, packages
C. name, version, packages
D. name, version, license

Modern Approach: pyproject.toml

Die Datei pyproject.toml ist der moderne Standard für die Python-Projektkonfiguration (PEP-517, PEP-518, PEP-660). Sie bietet eine einheitliche Möglichkeit, die Anforderungen des Build-Systems und die Projektmetadaten in einem einzigen, deklarativen Dateiformat anzugeben.

Benefits of pyproject.toml

  • Declarative: Alle Projektmetadaten an einem Ort
  • Build system agnostic: Funktioniert mit setuptools, poetry, flit und anderen Build-Backends
  • No code execution: Sicherer und vorhersehbarer als setup.py
  • Standardized: Folgt PEP-Standards für bessere Tool-Unterstützung

Example: pyproject.toml

Hier ist ein einfaches pyproject.toml-Beispiel mit setuptools:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "pythonCheatsheet"
version = "0.1"
description = "A Python cheatsheet package"
readme = "README.txt"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [
    {name = "Your Name", email = "your.email@example.com"}
]
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0",
    "black>=22.0",
]

Installing from pyproject.toml

Mit pyproject.toml können Sie Ihr Paket mit pip installieren:

pip install .

Oder im editierbaren Modus:

pip install -e .
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

What is the main advantage of pyproject.toml over setup.py?
A. It's faster to execute
B. It's declarative, safer (no code execution), and follows PEP standards
C. It requires less configuration
D. It only works with Python 3.10+

Choosing the Right Approach

  • Use setup.py: If you’re working with legacy projects or need fine-grained control
  • Use pyproject.toml: For new projects (recommended), as it’s the modern standard and provides better tooling support

Find more information visit the official documentation.