So teilen Sie Ihre Python-Pakete

Überblick

Python-Pakete sind die Bausteine ​​von Python-Anwendungen. Sie kapseln einige kohärente Funktionen, die von vielen Anwendungen und Systemen importiert und verwendet werden können. Zunächst müssen Entwickler Ihr Paket finden und installieren können. Python stellt ein kostenloses öffentliches Repository für Pakete bereit. Dies ist der De-facto-Standard für die gemeinsame Nutzung von Python-Paketen. Sie können auch private Paket-Repositorys für proprietäre Pakete verwenden.

In diesem Tutorial erfahren Sie, wie Sie Ihre eigenen Pakete mit der Community teilen können. Wenn Sie über proprietäre Pakete verfügen, die Sie nur innerhalb Ihres Unternehmens freigeben müssen, lernen Sie auch, wie Sie dies tun können.

Hintergrundinformationen finden Sie unter Python-Pakete verwenden und Eigene Python-Pakete schreiben. 

Was ist PyPI??

PyPI steht für den Python Package Index. Es ist ein öffentliches Repository zum Hochladen Ihrer Pakete. Pip kennt PyPI und kann Pakete von PyPI installieren und / oder aktualisieren. PyPI wurde nach Monty Pythons berühmter Skizze "Cheese Shop" genannt. Wenn Sie hören, dass Leute in einem Python-Paketierungskontext auf den "Cheese Shop" verweisen, machen Sie sich keine Sorgen. Es ist nur PyPI.

Bereiten Sie ein Paket für den Upload vor

Bevor Sie ein Paket hochladen, benötigen Sie ein Paket. Ich verwende das Conman-Paket, das ich im Artikel Wie schreibe ich eigene Python-Pakete geschrieben habe. Da PyPI Tausende von Paketen enthält, ist es sehr wichtig, dass Sie Ihr Paket richtig beschreiben können, wenn Sie möchten, dass die Leute es finden. PyPI unterstützt einen beeindruckenden Satz von Metadaten-Tags, damit die Benutzer das richtige Paket für den Job finden können.

Die Datei setup.py enthält viele wichtige Informationen zur Installation Ihres Pakets. Es kann jedoch auch die Metadaten enthalten, die zur Klassifizierung Ihres Pakets auf PyPI verwendet werden. Pakete werden anhand mehrerer Metadaten-Tags klassifiziert. Einige von ihnen sind textuell und einige haben eine Liste möglicher Werte. Die vollständige Liste ist auf der Seite Pyclis List Classifiers verfügbar.

Fügen wir ein paar Klassifizierer hinzu setup.py. Es ist nicht erforderlich, die Versionsnummer zu erhöhen, da es sich nur um Metadaten handelt und der Code gleich bleibt:

von setuptools import setup, find_packages setup (name = 'conman', version = "0.3"), url = "https://github.com/the-gigi/conman", license = "MIT", author = "Gigi Sayfan" , author_email = "[email protected]", description = "Konfigurationsdateien verwalten", classifiers = ['Entwicklungsstatus :: 3 - Alpha', 'Zielgruppe :: Entwickler', 'Thema :: Softwareentwicklung :: Bibliotheken ',' Lizenz :: OSI Approved :: MIT-Lizenz ',' Programmiersprache :: Python :: 2 ',' Programmiersprache :: Python :: 2.6 ',' Programmiersprache :: Python :: 2.7 ',], packages = find_packages (exclude = ['tests']), long_description = open ('README.md'). read (), zip_safe = False, setup_requires = ['nose> = 1.0'], test_suite = "nose.collector" )

Ein Konto erstellen

Sie müssen ein Konto bei PyPI erstellen, um Pakete hochladen zu können. Füllen Sie dieses Formular aus und bestätigen Sie Ihre Identität, indem Sie auf die URL in der Bestätigungs-E-Mail klicken. Nun müssen Sie ein erstellen .Pypyrc Datei in Ihrem Heimatverzeichnis, die die zum Hochladen von Paketen erforderlichen Informationen enthält.

[distutils] index-servers = pypi [pypi] -Repository = https://pypi.python.org/pypi username = the_gigi 

Sie können Ihr Passwort auch hinzufügen, aber es ist sicherer, wenn Sie nicht für den Fall, dass Ihr Laptop von einem schlechten Element erfasst wird. Dies ist besonders wichtig, wenn Sie beliebte Pakete hochladen. Wenn jemand Ihre Pakete hochladen oder aktualisieren kann, sind alle Personen, die diese Pakete verwenden, anfällig.

Testen

Wenn Sie die Paketregistrierung und den Upload-Prozess testen möchten und sich keine Sorgen darüber machen müssen, dass etwas unvollständig veröffentlicht wird, können Sie mit der alternativen PyPI-Testseite arbeiten. Erweitern Sie Ihre ~ / .pypirc-Datei um einen 'pypitest'-Abschnitt.

[distutils] index-servers = pypi pypitest [pypitest] repository = https://testpypi.python.org/pypi username = the_gigi [pypi] repository = https://pypi.python.org/pypi username = the_gigi 

Denken Sie daran, dass die Testseite regelmäßig bereinigt wird. Verlassen Sie sich also nicht darauf. Es ist nur zu Testzwecken bestimmt.

Registrieren Sie Ihr Paket

Wenn dies die erste Version Ihres Pakets ist, müssen Sie es bei PyPI registrieren. Twine hat einen Registerbefehl, aber ich kann nicht herausfinden, wie man es benutzt. Nach der Dokumentation wird ein Fehler ausgegeben, und beim Prüfen der Einheitentests auf Garn wird der Befehl register nicht geprüft. Naja. Sie können dies auch manuell tun, indem Sie dieses Formular verwenden, um die PKG-INFO-Datei hochzuladen. Wenn Sie Python 2.7.9+ oder Python 3.2+ verwenden, können Sie sich auch sicher mit Python registrieren setup.py registrieren.

Lassen Sie uns conman auf der PyPI-Testseite registrieren. Beachten Sie das -r pypitest, die auf dem Abschnitt in basiert ~ / .pypirc wird sich bei der Teststelle registrieren.

python setup.py register -r pypitest laufendes Register läuft egg_info schreibt conman.egg-info / PKG-INFO schreibt Top-Level-Namen in conman.egg-info / top_level.txt und schreibt abhängige_Links zum conman.egg-info / dependency_links.txt-Lesen Manifestdatei 'conman.egg-info / SOURCES.txt' Vorlage zum Manifest lesen 'MANIFEST.in' Manifestdatei 'conman.egg-info / SOURCES.txt' wird ausgeführt. Kennwort: Conman wird unter https: //testpypi.python registriert. org / pypi Server-Antwort (200): OK

Schnur

Sie können ein Paket mit hochladen python setup.py hochladen, Es ist jedoch nicht sicher, da es bis Python 2.7.9 und Python 3.2 zum Senden von Benutzername und Kennwort über HTTP verwendet wurde. Twine verwendet immer HTTPS und bietet zusätzliche Vorteile wie das Hochladen vorab erstellter Distributionen. Außerdem unterstützt es jedes Verpackungsformat, einschließlich Rollen. Ich werde Twine für den eigentlichen Upload verwenden.

Twine ist nicht Teil der Standardbibliothek, daher müssen Sie es installieren: pip einbauen.

Laden Sie Ihr Paket hoch

Schließlich ist es Zeit, das Paket tatsächlich hochzuladen. 

> Hochladen von Upload -r pypitest -p ******* dist / * Hochladen von Distributionen auf https://testpypi.python.org/pypi Hochladen von conman-0.3-py2-none-any.whl Hochladen von conman-0.3-py2 .py3-none-any.whl Hochladen von conman-0.3.tar.gz

Twine hat alle Distributionsformate hochgeladen, sowohl die Quelle als auch die Räder. 

Testen Sie Ihr Paket

Sobald sich Ihr Paket auf PyPI befindet, sollten Sie sicherstellen, dass Sie es installieren können und alles funktioniert. Hier erstelle ich eine einmalige virtuelle Umgebung, pip install conman von der PyPI-Test-Site aus und importiere sie dann. Möglicherweise möchten Sie Ihr Paket gründlicher testen.

> mkvirtualenv test_conman_pypi Neue ausführbare Python-Datei in test_conman_pypi / bin / python2.7. Auch ausführbare Datei in test_conman_pypi / bin / python erstellen. Setuptools installieren, pip ... fertig. Verwendung: source disableivate entfernt das 'bin' -Verzeichnis der Umgebung, die mit 'source enable' aktiviert wurde, aus PATH. (test_conman_pypi)> pip install -i https://testpypi.python.org/pypi conman Conman herunterladen / entpacken Herunterladen conman-0.3-py2-none-any.whl Speichern des Downloads im Cache unter /Users/gigi/.cache/pip /https%3A%2F%2Ftestpypi.python.org%2Fpackages%2Fpy2%2Fc%2Fconman%2Fconman-0.3-py2-none-any.whl Installieren gesammelter Pakete: conman erfolgreich installiert conman Aufräumen… (test_conman_pypi)> python Python .10 (Standardeinstellung: 10. Juni 2015, 19:43:32) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] auf Darwin Geben Sie "help", "copyright", "credits" oder "license" ein. für mehr Informationen. >>> importieren sie conman >>>

Beachten Sie, dass die Radverteilung standardmäßig installiert wurde.

Versionierung

Wenn Sie Ihre Pakete weiterentwickeln und neue Versionen hochladen, ist es wichtig, ein vernünftiges Versionsschema zu verwenden. Die Leute werden sich ziemlich aufregen, wenn ein unbeabsichtigtes Upgrade ihren Code verletzt. Ihr Versionsschema muss der PEP-440 - Versionskennzeichnung und Spezifikation der Abhängigkeiten entsprechen. 

Diese Spezifikation ermöglicht die Auswahl mehrerer Schemata. Ich empfehle die Verwendung des bekannten Semantic Versioning-Schemas. Es ist so ziemlich "..", was PEP-440 entspricht"..". Achten Sie nur auf Versionen, die den Bindestrich oder das Pluszeichen verwenden, die nicht mit PEP-440 kompatibel sind.

Private Paketdepots

PyPI ist großartig, aber manchmal möchten Sie Ihre Pakete nicht teilen. Viele Unternehmen und Organisationen verfügen über Entwicklungsteams, die Python verwenden und Pakete untereinander austauschen müssen, diese aber nicht öffentlich auf PyPI freigeben dürfen. Das ist kein Problem. Sie können Pakete in privaten Paketdepots unter Ihrer Kontrolle freigeben. 

Beachten Sie, dass Sie manchmal ein privates Paket-Repository unter Ihrer Kontrolle haben möchten, nur um die Abhängigkeiten von Drittanbietern zu verwalten. Ein Paketautor kann beispielsweise entscheiden, ein Paket aus PyPI zu löschen. Wenn Ihr System darauf angewiesen ist, dieses Paket über PyPI installieren zu können, haben Sie Probleme.

Devpi

Devpi (steht für Development Package Index) ist ein Drop-In-Ersatz für den öffentlichen PyPI-Server. Es ist Open Source und MIT-lizenziert, sodass Sie es in Ihrer Firewall ausführen können. Devpi ist sehr leistungsstark und verfügt über viele Funktionen, die es Ihnen ermöglichen, als ultimativer Verpackungsserver zu fungieren:

  • Schneller PyPI-Spiegel
  • Hochladen, Testen und Staging mit privaten Indizes
  • Vererbung des Index
  • Weboberfläche und Suche
  • Replikation
  • Importieren / Exportieren
  • Jenkins Integration

Devpi verfügt über eine hervorragende Dokumentation, ein Plugin-System und ist in einer aktiven Entwicklung mit einer lebendigen Community.

Fazit

Python bietet eine Komplettlösung für das Hosting Ihrer Pakete und die Bereitstellung dieser Pakete für Ihre Pythonisten. Es gibt einen optimierten Prozess, der von Tools zum Paketieren und Hochladen von Paketen unterstützt wird, um sie einfacher zu finden und zu installieren. 

Wenn Sie die Dinge privat halten möchten, ist Devpi als ausgereiftes und robustes Paket für private Pakete für Sie da.