Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python

Ich kannte die Standardmethode zum Entwickeln und Verteilen von Paketen in Python nicht und habe sie nachgeschlagen. Poesie ist einfacher, aber es ist nützlich, sich daran zu erinnern, an einem von Menschen gemachten Projekt zu arbeiten.

Erstellen einer virtuellen Umgebung

Beginnen Sie mit dem neuesten Python wie Python 3.7.7, das mit Python-Befehlen ausgeführt werden kann. Um das Paket von nun an zu entwickeln, erstellen Sie zunächst eine virtuelle Umgebung, damit die verwendete Bibliothek nicht mit anderen Python-Programmen gemischt wird. Die Standardmethode zum Erstellen einer virtuellen Umgebung ist die Verwendung des venv-Moduls https://docs.python.org/ja/3/tutorial/venv.html. Es gibt keinen festen Speicherort für die virtuelle Umgebung, aber der Ordner ".venv" wird häufig verwendet.

mkdir packaging_tutorial
cd packaging_tutorial
python -m venv .venv
source .venv/bin/activate

Die letzte "Quelle .venv / bin / enable" ist der Befehl zum Eingeben der Umgebung. Geben Sie zum Beenden einfach "Deaktivieren" ein.

Installation der für die Entwicklung verwendeten Bibliotheken (möglicherweise nicht erforderlich)

Schreiben Sie die für die Entwicklung verwendete Bibliothek in eine Datei mit dem Namen "require.txt". Hier verwenden wir ein Paket namens Anfragen.

requests ~= 2.23.0

Verwenden Sie den folgenden Befehl, um das in der Datei require.txt beschriebene Paket zu installieren.

pip install -r requirements.txt 

Dadurch werden die erforderlichen Bibliotheken in einer gültigen virtuellen Umgebung ".venv" installiert. Wenn Sie bereits viel "pip install" gemacht und vergessen haben, was Sie eingegeben haben

pip freeze > requirements.txt

So können Sie in der aktuellen Umgebung die Datei require.txt erstellen.

Implementieren Sie das Paket

Dieses Mal verwenden wir die folgende Verzeichnisstruktur.

packaging_tutorial/
  corona/
    __init__.py
    __main__.py
  tests/
  requirements.txt
  setup.py
  LICENSE
  README.md

Hier ist ein Beispiel für "corona / __ init __. Py". Ich habe die Funktion get () implementiert, um Informationen über die neue Korona zu erhalten, die heutzutage beliebt ist. Bereiten Sie auch main () vor, damit es einfach über die Befehlszeile ausgeführt werden kann.

import requests
import sys

def get(country: str) -> str:
    url = f"https://corona-stats.online/{country}?minimal=true"
    response = requests.get(url, headers={'user-agent': 'curl'})
    return response.text

def main() -> None:
    country = sys.argv[1] if len(sys.argv) > 1 else ""
    print(get(country))

Schreiben Sie "corona / __ main __. Py", um "main ()" mit "pythonm -m" aufzurufen.

from . import main
main()

Versuch es.

% python -m corona jp
Rank Country    Total Cases  New Cases ▲ Total Deaths New Deaths ▲ Recovered Active  Critical Cases / 1M pop
1    Japan (JP)        2,495                       62                    472   1,961       60             20
     World         1,015,466       523 ▲       53,190         24 ▲   212,229 750,047   37,696         130.29

Schreiben Sie setup.py, um das Paket zu vervollständigen.

Erstellen Sie eine Datei mit dem Namen setup.py und schreiben Sie die Paketinformationen. Detaillierte Spezifikationen finden Sie unter https://packaging.python.org/guides/distributing-packages-using-setuptools/. Als Punkt

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="corona-propella", # Replace with your own username
    version="0.0.1",
    install_requires=[
        "requests",
    ],
    entry_points={
        'console_scripts': [
            'corona=corona:main',
        ],
    },
    author="Propella",
    author_email="[email protected]",
    description="A covoid-19 tracker",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/pypa/sampleproject",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.7',
)

Nachdem das Paket vollständig ist, installieren wir es in dieser Umgebung und führen es aus.

pip install -e .
rehash
corona

Dieser Befehl pip install -e installiert das Paket im Entwicklungsmodus. Dies ist hilfreich, sobald Sie den Quellcode ändern.

Machen Sie ein Handout

Ich werde das Paket, das ich gemacht habe, zusammenfassen, damit ich es verteilen kann. Das Standardformat ist Rad. Installieren Sie die erforderlichen Befehle und erstellen Sie eine whl-Datei in dist.

pip install --upgrade pip setuptools wheel
python setup.py bdist_wheel

Eine Datei wie dist / corona_propella-0.0.1-py3-none-any.whl ist die Distribution. Sie können dies mit pip installieren.

Testen des Handouts

Erstellen wir eine weitere virtuelle Umgebung und testen Sie die Verteilung.

deactivate
cd ..
mkdir packaging_test
cd packaging_test
python -m venv .venv
source .venv/bin/activate
pip install ../packaging_tutorial/dist/corona_propella-0.0.1-py3-none-any.whl
python -m corona jp

Dadurch wird das soeben erstellte Paket zusammen mit den abhängigen Paketen in Ihrer virtuellen Umgebung installiert. Glatt. .. ..

Ein Ei erstellen

Anstelle von Wheel können Sie ein Format namens Egg erstellen, das in der Vergangenheit verwendet wurde.

python setup.py bdist_egg

Verwenden Sie easy_install anstelle von pip, um Egg zu installieren.

easy_install ../packaging_tutorial/dist/corona_propella-0.0.1-py3.7.egg

Verschiedene Aufräumarbeiten

Löschen Sie die von setup.py erstellte Datei

python setup.py clean --all

Löschen Sie die virtuelle Umgebung

rm -r .venv

Beziehung zwischen require.txt und setup.py

Die Methode, die ich eingeführt habe, ist langwierig, da Sie am Ende die erforderlichen Pakete sowohl in den Anforderungen.txt als auch in install_requires in setup.py schreiben. Laut https://caremad.io/posts/2013/07/setup-vs-requirement/ gibt es die folgenden Unterschiede in den Manieren.

Beim Erstellen einer Bibliothek installiert pip install -e . Auch die abhängigen Pakete, sodass ich nicht denke, dass Sie die Datei require.txt benötigen.

Referenz

Recommended Posts

Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python
Organisieren Sie Python-Module und -Pakete in einem Chaos
Schritte zum Entwickeln einer Webanwendung in Python
Wie man in Python entwickelt
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Ändern Sie das Standardausgabeziel in eine Datei in Python
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
Einführung einer guten Methode zur Verwaltung von DB-Verbindungen in Python
[Mac] Eine supereinfache Möglichkeit, Systembefehle in Python auszuführen und die Ergebnisse auszugeben
Versuchen Sie einfach, einen Webhook mit ngrok und Python zu erhalten
Ich suche einen einheitlichen Weg, um auf Statusänderungen von Selenium für Python-Elemente zu warten
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
So verpacken und verteilen Sie Python-Skripte
Module und Pakete in Python sind "Namespaces"
Wie bekomme ich Stacktrace in Python?
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Verwalten Sie Python-Pakete, um sie in Containern zu installieren
Verwendung ist und == in Python
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
So setzen Sie in Python ein Leerzeichen mit halber Breite vor Buchstaben und Zahlen.
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Berechnen wir das statistische Problem mit Python
So generieren Sie eine Sequenz in Python und C ++
Einbetten von Variablen in Python-Strings
Ich möchte mit Python ein Fenster erstellen
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
So erstellen Sie eine JSON-Datei in Python
Ich habe eine Klasse in Python3 und Java geschrieben
Senden Sie eine Nachricht an Skype und Chatwork in Python
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
So benachrichtigen Sie Discord-Kanäle in Python
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
So geben Sie "Ketsumaimo" standardmäßig in Python aus
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben
Python-Pakete und -Module
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
[Python] So erweitern Sie Variablen in einer Zeichenfolge
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei