So veröffentlichen Sie Ihr eigenes Python-Paket auf PyPi


von Marco Massenzio

Möchten Sie Ihren Python-Code mit anderen Entwicklern teilen? Möchten Sie Ihren Benutzern das Leben bei der Installation Ihres Pakets erleichtern? Dann sollten Sie Ihre Python-Pakete auf PyPi veröffentlichen.

Die gute Nachricht ist, dass es jetzt einfacher denn je ist. Dies ist eine kurze Anleitung, die Sie durch den Prozess führt und Sie dabei auf die relevante Dokumentation verweist.

Schritt #1: Erstellen Sie eine setup.py-Datei

Die Argumente für setup() sind hier dokumentiert und nicht trivial. Ein gutes Beispiel ist die Datei setup.py meines Filecrypt-Projekts.

Nachfolgend ein kurzer Auszug. Lesen Sie auch hier unbedingt die Dokumentation, um weitere Informationen zu diesem Thema zu erhalten, da dort viel besser erklärt wird, was all diese Argumente bedeuten, als ich es selbst mit einem vollständigen Medium-Artikel tun könnte:

setup(name='crytto',      description='An OpenSSL-based file encryption                    and decryption utility',      long_description=long_description,      version='0.2.0',      url='https://github.com/massenz/filecrypt',      author='M. Massenzio',      author_email='marco@alertavert.com',      license='Apache2',      classifiers=[          'Development Status :: 4 - Beta',          'Intended Audience :: System Administrators',          'License :: OSI Approved :: Apache Software License',          'Programming Language :: Python :: 3'      ],      packages=['crytto'],      install_requires=[          'PyYAML>=3.11',          'sh>=1.11'      ],      entry_points={          'console_scripts': [              'encrypt=crytto.main:run'          ]      })

Hinweis: Verwechseln Sie setuptools nicht mit distutils – hier ist der korrekte Import für setup.py:

from setuptools import setup

Der schwierigste Teil besteht darin, die Paketnamen und die richtige Konfiguration für Ihre Skriptdateien herauszufinden. Es ist wahrscheinlich am besten, diese im Voraus festzulegen, aber Sie können sie jederzeit beim Erstellen Ihrer setup.py korrigieren.

Die größte Herausforderung besteht darin, einen Paketnamen der obersten Ebene zu finden, der nicht mit einem bestehenden in Konflikt steht. Soweit ich das beurteilen kann, handelt es sich derzeit größtenteils um einen Prozess des Versuchs und Irrtums.

Sobald die setup.py in gutem Zustand ist, können Sie versuchen, ein Rad zu bauen:

python setup.py bdist_wheel

Danach empfiehlt es sich, eine neue virtuelle Umgebung zu erstellen und zu versuchen, das neue Paket dort zu installieren:

virtualenv test_env./test_env/bin/activatepip install dist/my-project.whl

Dies ist besonders nützlich, um zu testen, ob die console_scripts korrekt konfiguriert wurden.

Wenn Sie Klassifikatoren wie folgt verwenden:

classifiers=[     'Development Status :: 4 - Beta',     'Intended Audience :: System Administrators',     'License :: OSI Approved :: Apache Software License',    'Programming Language :: Python :: 3']

…sehen Sie sich dann unbedingt die Liste der Klassifikatoren an, da alles andere zu einem Fehler führt und die Registrierung verhindert.

Registrieren Sie Ihr Projekt

Hinweis: In der Dokumentation wurde mir gesagt, ich solle für diesen Schritt Bindfaden verwenden, aber das hat bei mir nicht funktioniert. Ihr Kilometerstand kann variieren.

Sofern Sie nicht bereits ein Konto bei PyPi haben, müssen Sie eines erstellen und sich dann anmelden.

Anschließend können Sie zum Registrierungsformular gehen und Ihre PKG_INFO-Datei hochladen. Dies wurde in einem Verzeichnis [prj name].egg-info/ erstellt. Es kann ein wenig Hin und Her dauern, während Sie versuchen, die Götter von PyPi zu besänftigen, damit sie Ihre Konfigurationsoptionen akzeptieren.

Insbesondere kann es mehr Versuche erfordern, einen nicht widersprüchlichen, aber dennoch aussagekräftigen Paketnamen zu finden, als Sie erwarten würden. Auch hier empfehle ich Ihnen, zu planen, da ich keine einfache Möglichkeit gefunden habe, alle Paketnamen aufzulisten. Wenn Sie eines kennen, hinterlassen Sie unbedingt einen Kommentar. Sie werden feststellen, dass laut PyPi…

There are currently 88906 packages here.

(„hier“ ist PyPi, Stand: 16. September 2016).

Auf PyPi hochladen

Sobald die Registrierung erfolgreich ist, ist der eigentliche Upload mithilfe von Twine recht einfach:

twine upload dist/*

Vorausgesetzt, Sie haben eine gültige ~/.pypirc, werden Sie lediglich nach Ihrem Passwort gefragt. Dann müssen Sie nur noch:

$ cat ~/.pypirc [distutils] index-servers=pypi
[pypi] repository = https://upload.pypi.org/legacy/ username = [your username]

Das ist es. Viel Spaß beim Erstellen und Teilen Ihrer Python-Pakete!

Ich habe dies ursprünglich auf meinem Blog bei codetrips.com veröffentlicht.