So erstellen Sie Ihr allererstes Python-Paket
Vor ein paar Monaten habe ich beschlossen, Caer zu veröffentlichen, ein in Python verfügbares Computer Vision-Paket. Ich empfand den Prozess als unerträglich schmerzhaft. Sie können wahrscheinlich erraten, warum es wenig (und verwirrende) Dokumentation gibt, es an guten Tutorials mangelt und so weiter.
Deshalb habe ich beschlossen, diesen Artikel zu schreiben, in der Hoffnung, dass er Menschen hilft, die damit zu kämpfen haben. Wir werden ein sehr einfaches Modul erstellen und es jedem auf der ganzen Welt zur Verfügung stellen.
Die Inhalte dieses Moduls folgen einer sehr grundlegenden Struktur. Insgesamt gibt es vier Python-Dateien, von denen jede eine einzelne Methode enthält. Wir werden es vorerst ganz einfach halten.
base-verysimplemodule --> Base
└── verysimplemodule --> Actual Module
├── extras
│ ├── multiply.py
│ ├── divide.py
├── add.py
├── subtract.py
Sie werden feststellen, dass ich einen Ordner namens verysimplemodule
habe, der wiederum zwei Python-Dateien add.py
und subtract.py
enthält. Es gibt auch einen Ordner namens extras
(der multiply.py
und divide.py
enthält). Dieser Ordner bildet die Grundlage unseres Python-Moduls.
Die __init__s herausbringen
Etwas, das Sie immer in jedem Python-Paket finden, ist eine __init__.py
-Datei. Diese Datei weist Python an, Verzeichnisse als Module (oder Untermodule) zu behandeln.
Ganz einfach: Es enthält die Namen aller Methoden in allen Python-Dateien, die sich in seinem unmittelbaren Verzeichnis befinden.
Eine typische __init__.py
-Datei hat das folgende Format:
from file import method
# 'method' is a function that is present in a file called 'file.py'
Wenn Sie Pakete in Python erstellen, müssen Sie in jedem Unterverzeichnis Ihres Pakets eine Datei __init__.py
hinzufügen. Diese Unterverzeichnisse sind die Untermodule Ihres Pakets.
In unserem Fall fügen wir unsere __init__.py-Dateien wie folgt zum Verzeichnis „aktuelles Modul“ verysimplemodule
hinzu:
from add import add
from subtract import subtract
und wir machen dasselbe für den Ordner extras
, etwa so:
from multiply import multiply
from divide import divide
Sobald das erledigt ist, haben wir fast die Hälfte des Prozesses hinter uns!
So richten Sie setup.py ein
Im Ordner base-verysimplemodule
(und im selben Verzeichnis wie unser Modul verysimplemodule
) müssen wir eine Datei setup.py
hinzufügen. Diese Datei ist unerlässlich, wenn Sie beabsichtigen, das tatsächliche Modul zu erstellen.
Hinweis: Benennen Sie die Datei setup.py
nach Ihren Wünschen. Diese Datei ist nicht namensspezifisch wie unsere Datei __init__.py
.
Mögliche Namensoptionen sind setup_my_very_awesome_python_package.py
und python_package_setup.py
, aber normalerweise empfiehlt es sich, bei setup.py
zu bleiben.
Die Datei setup.py
enthält Informationen über Ihr Paket, insbesondere den Namendes Pakets, seine Version, Plattformabhängigkeiten und vieles mehr mehr.
Für unsere Zwecke benötigen wir keine erweiterten Metainformationen, daher sollte der folgende Code für die meisten von Ihnen erstellten Pakete geeignet sein:
from setuptools import setup, find_packages
VERSION = '0.0.1'
DESCRIPTION = 'My first Python package'
LONG_DESCRIPTION = 'My first Python package with a slightly longer description'
# Setting up
setup(
# the name must match the folder name 'verysimplemodule'
name="verysimplemodule",
version=VERSION,
author="Jason Dsouza",
author_email="<youremail@email.com>",
description=DESCRIPTION,
long_description=LONG_DESCRIPTION,
packages=find_packages(),
install_requires=[], # add any additional packages that
# needs to be installed along with your package. Eg: 'caer'
keywords=['python', 'first package'],
classifiers= [
"Development Status :: 3 - Alpha",
"Intended Audience :: Education",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 3",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
]
)
Nachdem dies erledigt ist, müssen wir als Nächstes nur noch den folgenden Befehl im selben Verzeichnis wie base-verysimplemodule
ausführen:
python setup.py sdist bdist_wheel
Dadurch werden alle notwendigen Pakete erstellt, die Python benötigt. Die Befehle sdist
und bdist_wheel
erstellen eine Quelldistribution und ein Rad, die Sie später auf PyPi hochladen können.
PyPi – hier kommen wir!
PyPi ist das offizielle Python-Repository, in dem alle Python-Pakete gespeichert sind. Sie können es sich als Github für Python-Pakete vorstellen.
Um Ihr Python-Paket Menschen auf der ganzen Welt zur Verfügung zu stellen, benötigen Sie ein Konto bei PyPi.
Nachdem dies erledigt ist, können wir unser Paket auf PyPi hochladen. Erinnern Sie sich an die Quelldistribution und das Rad, die erstellt wurden, als wir python setup.py
ausgeführt haben? Nun, das ist es, was tatsächlich auf PyPi hochgeladen wird.
Aber bevor Sie das tun, müssen Sie twine
installieren, falls Sie es noch nicht installiert haben. Es ist so einfach wie pip install twine
.
So laden Sie Ihr Paket auf PyPi hoch
Vorausgesetzt, Sie haben twine
installiert, führen Sie Folgendes aus:
twine upload dist/*
Dieser Befehl lädt den Inhalt des Ordners dist
hoch, der automatisch generiert wurde, als wir python setup.py
ausgeführt haben. Sie werden aufgefordert, Ihren PyPi-Benutzernamen und Ihr Passwort einzugeben. Geben Sie diese also ein.
Wenn Sie dieses Tutorial bis zum Ende befolgt haben, erhalten Sie möglicherweise eine Fehlermeldung wie „Repository existiert bereits“.
Dies liegt normalerweise daran, dass ein Namenskonflikt zwischen dem Namen Ihres Pakets und einem bereits vorhandenen Paket besteht. Mit anderen Worten: Ändern Sie den Namen Ihres Pakets – jemand anderes hat diesen Namen bereits angenommen.
Und das ist es!
Um Ihr Modul stolz mit pip
zu installieren, starten Sie ein Terminal und führen Sie Folgendes aus:
pip install <package_name>
# in our case, this is
pip install verysimplemodule
Sehen Sie, wie Python Ihr Paket sauber aus den zuvor generierten Binärdateien installiert.
Öffnen Sie eine interaktive Python-Shell und versuchen Sie, Ihr Paket zu importieren:
>> import verysimplemodule as vsm
>> vsm.add(2,5)
7
>> vsm.subtract(5,4)
1
Um auf die Divisions- und Multiplikationsmethoden zuzugreifen (denken Sie daran, dass sie sich in einem Ordner namens extras
befanden?), führen Sie Folgendes aus:
>> import verysimplemodule as vsm
>> vsm.extras.divide(4,2)
2
>> vsm.extras.multiple(5,3)
15
So einfach ist das.
Glückwunsch! Sie haben gerade Ihr erstes Python-Paket erstellt. Obwohl es sehr einfach ist, kann Ihr Paket jetzt von jedem auf der ganzen Welt heruntergeladen werden (vorausgesetzt natürlich, er verfügt über Python).
Was kommt als nächstes?
Testen Sie PyPi
Das Paket, das wir in diesem Tutorial verwendet haben, war ein äußerst einfaches Modul – grundlegende mathematische Operationen der Addition, Subtraktion, Multiplikation und Division. Es macht keinen Sinn, sie direkt auf PyPi hochzuladen, insbesondere, da Sie dies zum ersten Mal ausprobieren.
Zu unserem Glück gibt es Test PyPi, eine separate Instanz von PyPi, in der Sie Ihr Paket testen und damit experimentieren können (Sie müssen sich für ein separates Konto auf der Plattform anmelden).
Der Vorgang, den Sie zum Hochladen auf Test PyPi befolgen, ist bis auf ein paar geringfügige Änderungen im Wesentlichen derselbe.
# The following command will upload the package to Test PyPi
# You will be asked to provide your Test PyPi credentials
twine upload --repository testpypi dist/*
So laden Sie Projekte von Test PyPi herunter:
pip install --index-url "https://test.pypi.org/simple/<package_name>"
Erweiterte Metainformationen
Die Metainformationen, die wir in der Datei setup.py
verwendeten, waren sehr einfach. Sie können zusätzliche Informationen hinzufügen, z. B. mehrere Betreuer (falls vorhanden), E-Mail-Adresse des Autors, Lizenzinformationen und eine ganze Reihe anderer Daten.
Dieser Artikel wird sich als besonders hilfreich erweisen, wenn Sie dies beabsichtigen.
Schauen Sie sich andere Repositories an
Ein Blick darauf, wie andere Repositories ihre Pakete erstellt haben, kann sich für Sie als äußerst nützlich erweisen.
Beim Aufbau von Caer habe ich ständig darauf geachtet, wie Numpy und Sonnet ihre Pakete eingerichtet haben. Ich würde empfehlen, einen Blick auf die Repositorys von Caer, Numpy und Tensorflow zu werfen, wenn Sie vorhaben, etwas fortgeschrittenere Pakete zu erstellen.