Da noch niemand diese Frage des OP behandelt hat:
Was ich machen wollte:
Machen Sie ein Python-Modul mit "pip install ..." installierbar.
Hier ist ein absolut minimales Beispiel, das die grundlegenden Schritte zum Vorbereiten und Hochladen Ihres Pakets auf PyPI mit setuptools
und zeigt twine
.
Dies ist keineswegs ein Ersatz für das Lesen zumindest des Tutorials . Es steckt viel mehr dahinter, als in diesem sehr einfachen Beispiel behandelt wird.
Das Erstellen des Pakets selbst wird hier bereits durch andere Antworten behandelt. Nehmen wir also an, wir haben diesen Schritt und unsere Projektstruktur wie folgt:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Um zum setuptools
Verpacken zu verwenden, müssen wir eine Datei hinzufügen setup.py
, die in den Stammordner unseres Projekts verschoben wird:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Zumindest geben wir die Metadaten für unser Paket an, unsere setup.py
würden folgendermaßen aussehen:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='a pip-installable package example',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
Da wir festgelegt haben, fügen license='MIT'
wir eine Kopie in unser Projekt ein LICENCE.txt
, zusammen mit einer Readme-Datei in reStructuredText als README.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
An diesem Punkt können wir mit dem Verpacken beginnen setuptools
. Wenn wir es noch nicht installiert haben, können wir es installieren mit pip
:
pip install setuptools
Um dies zu tun und einen zu erstellen source distribution
, rufen wir in unserem Projektstammordner unseren setup.py
über die Befehlszeile auf und geben an, dass wir Folgendes möchten sdist
:
python setup.py sdist
Dadurch werden unser Distributionspaket und die Ei-Informationen erstellt und eine Ordnerstruktur wie diese erstellt. Unser Paket enthält dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Zu diesem Zeitpunkt haben wir ein Paket, das wir mithilfe pip
unseres Projektstamms installieren können (vorausgesetzt, Sie haben alle Namen wie in diesem Beispiel):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Wenn alles gut geht, können wir jetzt einen Python-Interpreter öffnen, würde ich irgendwo außerhalb unseres Projektverzeichnisses sagen, um Verwirrung zu vermeiden, und versuchen, unser glänzendes 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!'
Nachdem wir bestätigt haben, dass das Paket installiert ist und funktioniert, können wir es auf PyPI hochladen.
Da wir das Live-Repository mit unseren Experimenten nicht verschmutzen möchten, erstellen wir ein Konto für das Test-Repository und installieren es twine
für den Upload-Prozess:
pip install twine
Jetzt sind wir fast da. Nachdem unser Konto erstellt wurde, werden wir einfach twine
aufgefordert, unser Paket hochzuladen. Es fragt nach unseren Anmeldeinformationen und lädt unser Paket in das angegebene Repository hoch:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Wir können uns jetzt in unser Konto im PyPI-Test-Repository einloggen und unser frisch hochgeladenes Paket eine Weile bestaunen und es dann mit pip
folgenden Informationen abrufen :
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Wie wir sehen können, ist der grundlegende Prozess nicht sehr kompliziert. Wie ich bereits sagte, steckt viel mehr dahinter als hier beschrieben. Lesen Sie also das Tutorial, um eine ausführlichere Erklärung zu erhalten.