Eigene Python-Pakete erstellen und auf PyPI veröffentlichen
Eigene Python-Pakete erstellen und auf PyPI veröffentlichen
Ein praxisnaher Leitfaden zum Erstellen, Testen und Veröffentlichen von wiederverwendbarem Python-Code für die Community
Inhaltsverzeichnis
Kapitel 1: Warum ein eigenes Python-Paket erstellen?
- Wiederverwendbarkeit und Modularität
- Vorteile für Teams, Open Source und persönliche Projekte
- Überblick: Von der Idee zum installierbaren Paket
Kapitel 2: Vorbereitung des Projekts
- Verzeichnisstruktur nach Best Practices
- src/-Layout vs. Flat Layout
- Namensgebung und Lizenzwahl
- Mini-Projekt: Einfaches Werkzeug als Paketidee entwickeln
Kapitel 3: Die pyproject.toml-Datei verstehen
- Moderne Projektbeschreibung nach PEP 518 und PEP 621
- Pflicht- und optionale Felder
- Beispielkonfiguration Schritt für Schritt
- Alternativen: setup.py, setup.cfg
Kapitel 4: Abhängigkeiten definieren
- install_requires vs. optional-dependencies
- Entwicklungsabhängigkeiten und Extras
- Mini-Projekt: Paket mit Abhängigkeit zu requests
Kapitel 5: Metadaten und Dokumentation
- Projektbeschreibung für PyPI, README.md, LICENSE, CHANGELOG
- long_description und Inhalt für die Projektseite
- Mini-Projekt: Dokumentation mit Markdown und reStructuredText
Kapitel 6: Tests und Qualitätssicherung
- Tests mit pytest oder unittest
- tox und coverage einbinden
- Linter wie flake8, black, mypy nutzen
- Mini-Projekt: Testfall für Funktionsbibliothek schreiben
Kapitel 7: Paket bauen mit build und twine
- python -m build: sdist und wheel erzeugen
- Paket lokal installieren und testen
- Vorbereitung für die Veröffentlichung
Kapitel 8: Veröffentlichen auf PyPI
- Account auf https://pypi.org anlegen
- Hochladen mit twine upload
- Fehlerquellen beim Upload vermeiden
- Mini-Projekt: Erstes Paket auf TestPyPI und dann auf PyPI veröffentlichen
Kapitel 9: Versionierung und Releases verwalten
- Semantische Versionierung (SemVer)
- Git-Tags und automatisierte Releases
- Versionen in __init__.py oder pyproject.toml pflegen
Kapitel 10: Pflege, Feedback und Weiterentwicklung
- Issue-Tracking und Pull Requests auf GitHub
- Nutzerfeedback integrieren
- Abwärtskompatibilität und Deprecations
- Automatisierung mit CI/CD (GitHub Actions, GitLab CI)
Anhang A: Beispielstruktur eines vollständigen Pakets
/mein_paket/
├── src/
│ └── mein_paket/
│ ├── __init__.py
│ └── tools.py
├── tests/
│ └── test_tools.py
├── pyproject.toml
├── README.md
├── LICENSE
└── .gitignore
📚 Anhang B: Nützliche Tools und Links
- build, twine, hatch, poetry, pdm
- TestPyPI: https://test.pypi.org
- Dokumentation: https://packaging.python.org
Anhang C: Übungsaufgaben mit Lösungen
- Einfaches Tool als Paket strukturieren
- Metadata-Dateien erstellen und validieren
- Paket lokal testen und veröffentlichen
- Lösungen mit Schritt-für-Schritt-Erklärung