Ich habe Python-Skripte für einfache Aufgaben bei der Arbeit erstellt und mich nie wirklich darum gekümmert, sie für andere zu verpacken. Jetzt wurde ich beauftragt, einen Python-Wrapper für eine REST-API zu erstellen. Ich habe absolut keine Ahnung, wie ich anfangen soll und ich brauche Hilfe.
Was ich habe:
(Ich möchte nur so genau wie möglich sein.) Ich habe die virtuelle Umgebung bereit, sie ist auch in Github verfügbar . Die .gitignore-Datei für Python ist ebenfalls vorhanden. Außerdem gibt es die Anforderungsbibliothek für die Interaktion mit der REST-API. Das ist es.
Hier ist der aktuelle Verzeichnisbaum
.
├── bin
│ └── /the usual stuff/
├── include
│ └── /the usual stuff/
├── lib
│ └── python2.7
│ └── /the usual stuff/
├── local
│ └── /the usual stuff/
└── README.md
27 directories, 280 files
Ich weiß nicht einmal, wo ich die .py-Dateien ablegen soll, falls ich jemals eine mache.
Was ich machen wollte:
Machen Sie ein Python-Modul mit "pip install ..." installierbar.
Wenn möglich, möchte ich einen allgemeinen Schritt-für-Schritt-Prozess zum Schreiben von Python-Modulen.
quelle
Antworten:
Ein Modul ist eine Datei, die Python-Definitionen und -Anweisungen enthält. Der Dateiname ist der Modulname mit dem Suffix
.py
Erstellen Sie
hello.py
dann die folgende Funktion als Inhalt:Dann können Sie importieren
hello
:Um viele
.py
Dateien zu gruppieren , legen Sie sie in einem Ordner ab. Jeder Ordner mit einem__init__.py
wird von Python als Modul betrachtet, und Sie können sie als Paket bezeichnenSie können die import-Anweisung auf Ihrem Modul wie gewohnt ausführen.
Weitere Informationen finden Sie unter 6.4. Pakete .
quelle
Python 3 - AKTUALISIERT am 18. November 2015
Ich fand die akzeptierte Antwort nützlich, wollte aber aufgrund meiner eigenen Erfahrungen einige Punkte zum Nutzen anderer erweitern.
Modul: Ein Modul ist eine Datei, die Python-Definitionen und -Anweisungen enthält. Der Dateiname ist der Modulname mit dem angehängten Suffix .py.
Modulbeispiel : Angenommen, wir haben ein einzelnes Python-Skript im aktuellen Verzeichnis, hier nenne ich es mymodule.py
Die Datei mymodule.py enthält den folgenden Code:
Wenn wir den Python3-Interpreter aus dem aktuellen Verzeichnis ausführen, können wir die Funktion myfunc auf folgende Arten importieren und ausführen (normalerweise wählen Sie einfach eine der folgenden Möglichkeiten):
Ok, das war einfach genug.
Angenommen, Sie müssen dieses Modul in einem eigenen Ordner ablegen, um einen Modul-Namespace bereitzustellen, anstatt es nur ad-hoc aus dem aktuellen Arbeitsverzeichnis auszuführen. Hier lohnt es sich, das Konzept eines Pakets zu erläutern .
Paket : Pakete sind eine Möglichkeit, den Modul-Namespace von Python mithilfe von „gepunkteten Modulnamen“ zu strukturieren. Beispielsweise bezeichnet der Modulname AB ein Submodul mit dem Namen B in einem Paket mit dem Namen A. So wie die Verwendung von Modulen die Autoren verschiedener Module davon abhält, sich um die globalen Variablennamen der anderen zu kümmern, spart die Verwendung von gepunkteten Modulnamen die Autoren von Paketen mit mehreren Modulen wie NumPy oder der Python Imaging Library, die sich nicht um die Modulnamen der anderen kümmern müssen.
Paketbeispiel : Nehmen wir nun an, wir haben den folgenden Ordner und die folgenden Dateien. Hier ist mymodule.py identisch mit zuvor und __init__.py ist eine leere Datei:
Die Dateien __init__.py sind erforderlich, damit Python die Verzeichnisse als Pakete enthaltend behandelt. Weitere Informationen finden Sie unter dem Link zur Dokumentation der Module, der später bereitgestellt wird.
Unser aktuelles Arbeitsverzeichnis befindet sich eine Ebene über dem normalen Ordner namens mypackage
Wenn wir jetzt den Python3-Interpreter ausführen, können wir das Modul mymodule.py, das die erforderliche Funktion myfunc enthält, auf folgende Weise importieren und ausführen (normalerweise wählen Sie einfach eine der folgenden Optionen ):
Unter der Annahme von Python 3 gibt es eine hervorragende Dokumentation unter: Module
In Bezug auf Namenskonventionen für Pakete und Module sind die allgemeinen Richtlinien in PEP-0008 enthalten - siehe Paket- und Modulnamen
Module sollten kurze Namen in Kleinbuchstaben haben. Unterstriche können im Modulnamen verwendet werden, wenn dies die Lesbarkeit verbessert. Python-Pakete sollten auch kurze Namen in Kleinbuchstaben enthalten, obwohl von der Verwendung von Unterstrichen abgeraten wird.
quelle
import mypackage
. Wenn Sie nur eine Funktion aus einem Modul (sogar einer Datei) importieren möchten, ist dies besser zu verwendenfrom module import function
. In dem Fall ein Unterordner,from subfolder.module import function
so dass Sie einfachfunction()
ohne Feuer andere Codeteile aufrufen können. Verwendenfrom module import *
Sie es auch nicht, wenn Sie es nicht wirklich brauchen.import mypackage
. Hinzufügenimport mymodule
zu__init__.py
funktioniert nicht ..Da noch niemand diese Frage des OP behandelt hat:
Hier ist ein absolut minimales Beispiel, das die grundlegenden Schritte zum Vorbereiten und Hochladen Ihres Pakets auf PyPI mit
setuptools
und zeigttwine
.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:
Um zum
setuptools
Verpacken zu verwenden, müssen wir eine Datei hinzufügensetup.py
, die in den Stammordner unseres Projekts verschoben wird:Zumindest geben wir die Metadaten für unser Paket an, unsere
setup.py
würden folgendermaßen aussehen:Da wir festgelegt haben, fügen
license='MIT'
wir eine Kopie in unser Projekt einLICENCE.txt
, zusammen mit einer Readme-Datei in reStructuredText alsREADME.rst
:An diesem Punkt können wir mit dem Verpacken beginnen
setuptools
. Wenn wir es noch nicht installiert haben, können wir es installieren mitpip
:Um dies zu tun und einen zu erstellen
source distribution
, rufen wir in unserem Projektstammordner unserensetup.py
über die Befehlszeile auf und geben an, dass wir Folgendes möchtensdist
:Dadurch werden unser Distributionspaket und die Ei-Informationen erstellt und eine Ordnerstruktur wie diese erstellt. Unser Paket enthält
dist
: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):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:
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: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: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 :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.
quelle
setuptools
?twine
, aber Sie können Ihr Paket vor dem Veröffentlichen lokal testen, nachdem Sie es mit erstellt habensetuptools
.Nachdem Sie die von Ihnen ausgewählten Befehle definiert haben, können Sie die gespeicherte Datei einfach per Drag & Drop in den Lib-Ordner in Ihren Python-Programmdateien ziehen.
quelle
Erstellen Sie eine Datei mit dem Namen "hello.py".
Wenn Sie Python 2.x verwenden
Wenn Sie Python 3.x verwenden
Führen Sie die Datei aus. Dann können Sie Folgendes versuchen:
Wenn Sie ein bisschen hart wollen, können Sie Folgendes verwenden:
Wenn Sie Python 2.x verwenden
Wenn Sie Python 3.x verwenden
Sehen Sie die in der Klammer neben der Definition? Das ist wichtig. Es ist dasjenige, das Sie innerhalb der Definition verwenden können.
Text - Sie können ihn verwenden, wenn das Programm sagen soll, was Sie wollen. Nach seinem Namen ist es Text. Ich hoffe du weißt was Text bedeutet. Es bedeutet "Wörter" oder "Sätze".
Führen Sie die Datei aus. Wenn Sie Python 3.x verwenden, können Sie Folgendes versuchen:
Für Python 2.x - denke ich dasselbe mit Python 3? Keine Ahnung. Korrigieren Sie mich, wenn ich in Python 2.x einen Fehler gemacht habe (ich kenne Python 2, werde aber mit Python 3 verwendet)
quelle
Ich habe ein Projekt erstellt, um ein Projektskelett einfach von Grund auf neu zu initiieren . https://github.com/MacHu-GWU/pygitrepo-project .
Sie können beispielsweise ein Testprojekt erstellen
learn_creating_py_package
.Sie können lernen, welche Komponente Sie für verschiedene Zwecke haben sollten, wie zum Beispiel :
Der Vorteil der Verwendung
pygitrepo
ist , dass diese mühsame erstellt sich automatisch und passen Sie Ihrepackage_name
,project_name
,github_account
,document host service
,windows or macos or linux
.Es ist ein guter Ort, um zu lernen, wie man ein Python-Projekt wie ein Profi entwickelt.
Hoffe das könnte helfen.
Vielen Dank.
quelle