Da bisher niemand diese Frage des OP beantwortet hat:
Was ich tun wollte:
Ein Python-Modul installierbar machen mit "pip install ..."
Hier ist ein absolut minimales Beispiel, das die grundlegenden Schritte zum Vorbereiten und Hochladen Ihres Pakets auf PyPI mit setuptools
und twine
zeigt.
Dies ersetzt keineswegs das Lesen des Tutorials, es gibt viel mehr als in diesem sehr grundlegenden Beispiel behandelt.
Das Erstellen des Pakets selbst wurde bereits von anderen Antworten hier behandelt, daher nehmen wir an, dass wir diesen Schritt abgedeckt haben und unsere Projektstruktur wie folgt aussieht:
.
hellostackoverflow/
__init__.py
hellostackoverflow.py
Um setuptools
für das Verpacken zu verwenden, müssen wir eine Datei setup.py
hinzufügen, dies kommt in den Root-Ordner unseres Projekts:
.
setup.py
hellostackoverflow/
__init__.py
hellostackoverflow.py
Mindestens geben wir die Metadaten für unser Paket an, unser setup.py
würde so aussehen:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='ein Beispiel für ein mit pip installierbares Paket',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
Da wir license='MIT'
festgelegt haben, fügen wir eine Kopie in unserem Projekt als LICENCE.txt
hinzu, zusammen mit einer Readme-Datei in reStructuredText als README.rst
:
.
LICENCE.txt
README.rst
setup.py
hellostackoverflow/
__init__.py
hellostackoverflow.py
An diesem Punkt sind wir bereit, mit dem Verpacken mit setuptools
zu beginnen. Wenn wir es noch nicht installiert haben, können wir es mit pip
installieren:
pip install setuptools
Um dies zu tun und eine source distribution
zu erstellen, rufen wir in unserem Projekt-Root-Ordner unser setup.py
über die Befehlszeile auf und geben an, dass wir sdist
möchten:
python setup.py sdist
Dadurch wird unser Verteilungspaket und Egg-Info erstellt und führt zu einer Ordnerstruktur wie dieser, mit unserem Paket in dist
:
.
dist/
hellostackoverflow.egg-info/
LICENCE.txt
README.rst
setup.py
hellostackoverflow/
__init__.py
hellostackoverflow.py
An diesem Punkt haben wir ein Paket, das wir mit pip
installieren können, also sie aus unserem Projekt-Root (unter der Annahme, dass Sie alle Bezeichnungen wie in diesem Beispiel haben):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Wenn alles gut geht, können wir jetzt einen Python-Interpreter öffnen, ich würde sagen, irgendwo außerhalb unseres Projektverzeichnisses, um Verwirrung zu vermeiden, und versuchen, unser neues Paket zu verwenden:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'
Jetzt, da wir bestätigt haben, dass das Paket installiert und funktioniert, können wir es auf PyPI hochladen.
Da wir das Live-Repository nicht mit unseren Experimenten verunreinigen wollen, erstellen wir ein Konto für das Test-Repository und installieren twine
für den Upload-Prozess:
pip install twine
Jetzt sind wir fast fertig, mit unserem erstellten Konto sagen wir twine
einfach, dass wir unser Paket hochladen möchten. Es wird nach unseren Anmeldedaten fragen und unser Paket im angegebenen Repository hochladen:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Jetzt können wir uns in unser Konto im PyPI-Test-Repository einloggen und für eine Weile unser frisch hochgeladenes Paket bestaunen und es dann mit pip
herunterladen:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Wie wir sehen können, ist der grundlegende Prozess nicht sehr kompliziert. Wie bereits erwähnt, gibt es viel mehr als hier behandelt, also gehen Sie vor und lesen Sie das Tutorial für eine ausführlichere Erklärung.