Je ne connaissais pas la manière standard de développer et de distribuer des packages en Python, alors j'ai cherché. La poésie est plus facile, mais il est utile de se rappeler de travailler sur un projet créé par l'homme.
Commencez avec le dernier Python, tel que Python 3.7.7, prêt à être exécuté avec des commandes python. Afin de développer un package à partir de maintenant, créez d'abord un environnement virtuel afin que les autres programmes et bibliothèques Python utilisés ne soient pas mélangés. La manière standard de créer un environnement virtuel est d'utiliser le module venv https://docs.python.org/ja/3/tutorial/venv.html. Il n'y a pas d'emplacement fixe pour l'environnement virtuel, mais le dossier .venv
est souvent utilisé.
mkdir packaging_tutorial
cd packaging_tutorial
python -m venv .venv
source .venv/bin/activate
Le dernier source .venv / bin / activate
est la commande pour entrer dans l'environnement. Tapez simplement «désactiver» pour quitter.
Écrivez la bibliothèque utilisée pour le développement dans un fichier appelé requirements.txt
. Ici, nous utilisons un package appelé requêtes.
requests ~= 2.23.0
Pour installer le package décrit dans requirements.txt, utilisez la commande suivante.
pip install -r requirements.txt
Cela installera les bibliothèques requises dans un environnement virtuel valide .venv
. Si vous avez déjà fait beaucoup de pip install
et que vous avez oublié ce que vous avez mis
pip freeze > requirements.txt
Vous pouvez créer requirements.txt à partir de l'environnement actuel comme ceci.
Cette fois, nous utiliserons la structure de répertoires suivante.
packaging_tutorial/
corona/
__init__.py
__main__.py
tests/
requirements.txt
setup.py
LICENSE
README.md
Voici un exemple de corona / __ init __. Py
. J'ai implémenté la fonction get ()
pour obtenir des informations sur la nouvelle corona qui est populaire ces jours-ci. Préparez également main ()
pour qu'il puisse être facilement exécuté à partir de la ligne de commande.
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))
Écrivez corona / __ main __. Py
pour appeler main ()
avec pythonm -m
.
from . import main
main()
Essaye le.
% 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
Créez un fichier appelé setup.py et écrivez les informations sur le package. Les spécifications détaillées peuvent être trouvées sur https://packaging.python.org/guides/distributing-packages-using-setuptools/. Comme un point
command name = module: function
dans console_scripts
de ʻentry_points` générera une commande utilisant ce package.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',
)
Maintenant que le package est complet, installez-le dans cet environnement et exécutez-le.
pip install -e .
rehash
corona
Cette commande pip install -e
installe le paquet en mode développement, ce qui est utile dès que vous changez le code source.
Je vais résumer le paquet que j'ai fait pour que je puisse le distribuer. Le format standard est la roue. Installez les commandes requises et créez un fichier whl dans dist.
pip install --upgrade pip setuptools wheel
python setup.py bdist_wheel
Un fichier comme dist / corona_propella-0.0.1-py3-none-any.whl
est la distribution. Vous pouvez l'installer avec pip.
Créons un autre environnement virtuel et testons la distribution.
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
Cela installera le package que vous venez de créer avec les packages dépendants dans votre environnement virtuel. Lisse. .. ..
Au lieu de Wheel, vous pouvez créer un format appelé Egg qui semble avoir été utilisé dans le passé.
python setup.py bdist_egg
Utilisez easy_install au lieu de pip pour installer Egg.
easy_install ../packaging_tutorial/dist/corona_propella-0.0.1-py3.7.egg
Supprimer le fichier créé par setup.py
python setup.py clean --all
Effacer l'environnement virtuel
rm -r .venv
La méthode que j'ai introduite est fastidieuse car vous finissez par écrire les packages requis à la fois dans requirements.txt et install_requires dans setup.py. Selon https://caremad.io/posts/2013/07/setup-vs-requirement/, il existe les différences de manières suivantes.
Lors de la création d'une bibliothèque, pip install -e .
installera également les packages dépendants, donc je ne pense pas que vous ayez besoin de requirements.txt.
Recommended Posts