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.
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.
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.
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
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
install_requires
abhängt, wird es von pip automatisch installiert.command name = module: function
in console_scripts
von entry_points
schreiben, wird ein Befehl generiert, der dieses Paket verwendet.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.
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.
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. .. ..
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
Löschen Sie die von setup.py erstellte Datei
python setup.py clean --all
Löschen Sie die virtuelle Umgebung
rm -r .venv
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.
Recommended Posts