Python-Pakete selbst veröffentlichen

  Friedjof   Lesezeit: 9 Minuten Auf Mastodon ansehen

In diesem Artikel lernst du, wie du Python-Pakete erstellst, sicher verwaltest und auf PyPI veröffentlichst.

python-pakete selbst veröffentlichen

Python hat sich als eine der beliebtesten Programmiersprachen etabliert, vor allem wegen ihrer klaren und gut strukturierten Syntax. Wo andere Sprachen oft viele Zeilen Code erfordern, kommt Python mit wenigen, prägnanten Ausdrücken aus. Dies macht die Sprache besonders für Einsteiger attraktiv. Diese Effizienz ist maßgeblich auf die umfangreiche Sammlung von Bibliotheken zurückzuführen, die Entwicklern viele Aufgaben abnehmen und das Programmieren erleichtern.

Eine zentrale Rolle bei der Verteilung dieser Bibliotheken spielt der Python Package Index (PyPI). PyPI ist das offizielle Repository für Python-Pakete und ermöglicht Entwicklern, ihre Bibliotheken und Tools einfach zu veröffentlichen und der breiten Öffentlichkeit zugänglich zu machen. PyPI wurde 2003 eingeführt und hat sich seitdem zu einem unverzichtbaren Bestandteil des Python-Ökosystems entwickelt. Es bietet eine zentrale Plattform, auf der Python-Entwickler ihre Arbeit teilen und gleichzeitig auf die Arbeit anderer zugreifen können. Seit seiner Einführung hat PyPI das Wachstum und die Verbreitung von Python erheblich gefördert und spielt eine wesentliche Rolle in der Open-Source-Community

Bibliotheken unter Python

Wenn du bereits mit Python programmiert hast, bist du wahrscheinlich schon auf pip gestoßen, den Paketmanager, mit dem sich sowohl Bibliotheken als auch Programme installieren lassen. Mit dem Befehl pip freeze kannst du dir alle lokal installierten Bibliotheken inklusive ihrer Versionsnummern anzeigen lassen.

Wenn du ein Python-Projekt veröffentlichst, ist es empfehlenswert, eine requirements.txt-Datei bereitzustellen. Diese Datei listet alle Abhängigkeiten des Projekts auf, sodass andere Entwickler diese direkt mit pip install -r requirements.txt installieren können. Die requirements.txt ist nicht nur für die Zusammenarbeit wichtig, sondern auch für die Reproduzierbarkeit von Umgebungen. In Continuous Integration/Continuous Deployment (CI/CD)-Pipelines ermöglicht sie, eine konsistente Entwicklungs- und Produktionsumgebung sicherzustellen, was für die Qualität und Stabilität eines Projekts entscheidend ist.

Es wird außerdem empfohlen, eine virtuelle Python-Umgebung (venv) zu nutzen, die du einfach mit python -m venv .venv einrichten kannst. Dadurch bleiben die Abhängigkeiten deines Projekts isoliert und geraten nicht in Konflikt mit anderen Projekten.

Sicherheit bei der Installation von Python-Paketen

Die meisten Python-Pakete werden über PyPI, den Python Package Index, bereitgestellt und lassen sich einfach mit pip installieren. Allerdings ist es wichtig zu beachten, dass PyPI keine Pakete auf Sicherheit überprüft. Es gab Fälle, in denen schadhafte Pakete über PyPI verbreitet wurden, die potenziell gefährliche Backdoors enthielten.

Um dich vor solchen Risiken zu schützen, solltest du folgende Maßnahmen ergreifen:

  1. Beliebtheit prüfen: Achte auf die Anzahl der Downloads und Bewertungen eines Pakets. Beliebte Pakete sind in der Regel sicherer, da sie von einer größeren Community genutzt und überprüft werden.

  2. Aktualität checken: Vermeide Bibliotheken, die seit langer Zeit nicht mehr aktualisiert wurden. Regelmäßige Updates sind ein Indikator dafür, dass das Projekt aktiv gepflegt und auf dem neuesten Stand gehalten wird.

  3. Maintainer anschaue: Schau dir die Entwickler des Projekts an. Sind sie aktiv in der Community? Haben sie bereits andere Projekte veröffentlicht? Aktive Maintainer sind ein gutes Zeichen für die Zuverlässigkeit eines Pakets.

  4. Quellcode untersuchen: Wenn du unsicher bist, wirf einen Blick in den Quellcode des Pakets. Viele Pakete verlinken auf GitHub oder GitLab, wo du den Code einsehen und auf verdächtige Abschnitte prüfen kannst.

Indem du diese Schritte befolgst, kannst du das Risiko minimieren, ein unsicheres Paket zu installieren, und sicherstellen, dass die von dir verwendeten Bibliotheken vertrauenswürdig sind. Eine 100% Sicherheit gibt es dabei allerdings auch nicht.

CLI-Programme mit pipx

Während pip hauptsächlich zur Installation von Bibliotheken in einer virtuellen Python-Umgebung verwendet wird, ist pipx ideal für die Installation von CLI-Tools (Command Line Interface). Diese Tools können nach der Installation ganz normal über das Terminal oder per Shortcut genutzt werden.

Das ist besonders praktisch, wenn du eigene nützliche CLI-Tools entwickelst und sie anderen einfach zugänglich machen möchtest. Ich habe bereits zwei solcher Projekte auf PyPI veröffentlicht. Der Vorteil eigener Python-Skripte auf PyPI liegt darin, dass sie nach der Veröffentlichung auf jedem Linux-Rechner mit einem einzigen Befehl installiert werden können.

Hinweis: Auch diese Skripte könnten potenziell schädlich sein.

Vielleicht hast du bereits ein Skript, das du häufig verwendest und möchtest es nun auf PyPI veröffentlichen. Dann kannst du dir meine beiden Projekte als Beispiel nehmen und deren Projektstruktur übernehmen:

  • QRClipboard: Erstellt QR-Codes aus der Zwischenablage und zeigt diese direkt an.
  • hosts-manager: Verwalten und Anzeigen von Einträgen in der /etc/hosts-Datei.

So veröffentlichst du dein eigenes Python-Paket

Natürlich solltest du bereits Python installiert haben und auch schon ein Projektverzeichnis benutzten. Zudem brauchst du auch einen Account bei PyPI. Dies ist kostenlos möglich. Im Anschluss erstellst du dir in den Profileinstellungen einen API Token und legst ihn auf deinem Gerät ab. Eine Anleitung dazu findest du nach der Erstellung des Tokens.

Ich habe in meinen Projekten immer folgende Struktur benutzt:

Mein-Projekt-Name/
├── README.md            # Dokumentation des Projekts
├── LICENSE              # Rechtliche Hinweise zur Nutzung
├── pyproject.toml       # Metadaten und Abhängigkeiten des Projekts
├── Mein-Projekt-Name/   # Hauptpaketverzeichnis mit dem Python-Code
│   ├── __init__.py      # Markiert das Verzeichnis als Python-Paket
│   └── main.py          # Hauptmodul, das die Logik des Programms enthält
├── Makefile             # Automatisierungsskript für häufige Aufgaben
├── requirements.txt     # Liste der Abhängigkeiten, die für das Projekt benötigt werden

Die pyproject.toml beinhaltet maschinenlesbar alle wichtigen Informationen zu deinem Projekt. Hier ist ein Beispiel verlinkt für eine pyproject.toml

Paket bauen und hochladen

Um dein Python-Paket zu veröffentlichen, folge diesen Schritten:

  1. Paket erstellen: Falls noch nicht geschehen, installiere das Build-Tool:

    pip install --upgrade build

    Baue dann das Paket:

    python -m build

    Das erzeugt die benötigten Dateien im dist/-Verzeichnis.

  2. Paket hochladen: Installiere twine, falls es noch nicht installiert ist:

    pip install --upgrade twine

    Lade das Paket auf PyPI hoch:

    twine upload dist/*

    Gib dabei deinen PyPI-Benutzernamen und API-Schlüssel ein, falls dieser nicht bereits auf deinem System hinterlegt ist.

Für eine noch einfachere Bedienung empfehle ich dir, eine Makefile zu nutzen, wie diese HIER.

Mit diesen Schritten bist du bestens gerüstet, um dein eigenes Python-Paket zu erstellen, sicher zu verwalten und es mit der Community auf PyPI zu teilen – viel Erfolg bei deinem nächsten Projekt!

Quellen:
1. **Python Package Index (PyPI) Documentation** - Informationen zur Veröffentlichung von Paketen auf PyPI, inklusive der Nutzung von `twine` und `build`. [PyPI Documentation](https://packaging.python.org/tutorials/packaging-projects/) (23.08.2024)

2. **Python.org: Python Packaging Authority (PyPA)** - Offizielle Anleitung zur Nutzung von `pip`, `pipx`, und anderen Tools für die Paketverwaltung in Python. [Python Packaging User Guide](https://packaging.python.org/) (23.08.2024)

3. **Real Python** - Schritt-für-Schritt-Anleitungen zur Erstellung und Veröffentlichung von Python-Paketen. [Real Python: How to Publish an Open-Source Python Package to PyPI](https://realpython.com/pypi-publish-python-package/) (23.08.2024)

Tags

Python, pip, pipx, pypi.org, Sicherheit, Pakete, Bibliotheken, Skripte

Es wurden noch keine Kommentare verfasst, sei der erste!