Packaging de modules Python
Version de base
Arborescence :
.
├── pyproject.toml
├── setup.cfg
└── src
└── example_package
├── example.py
└── __init__.py
- pyproject.toml
[build-system] requires = [ "setuptools>=42", "wheel" ] build-backend = "setuptools.build_meta"
- setup.cfg
[metadata] name = example-pkg-YOUR-USERNAME-HERE version = 0.0.1 author = Example Author author_email = author@example.com description = A small example package url = https://github.com/pypa/sampleproject project_urls = Bug Tracker = https://github.com/pypa/sampleproject/issues classifiers = Programming Language :: Python :: 3 License :: OSI Approved :: MIT License Operating System :: OS Independent [options] package_dir = = src packages = find: python_requires = >=3.6 [options.packages.find] where = src
- example.py
def add_one(number): return number + 1
Le fichier __init__.py est vide.
On peut construire le paquet avec :
python3 -m build # ou pip wheel .
On peut directement installer le paquet avec (avec pip pas besoin de construire le paquet avant) :
pip install .
On peut ensuite le désinstaller :
pip uninstall example-pkg-YOUR-USERNAME-HERE
Le module est installé dans ~/.local/lib/python3.9/site-packages.
Une fois installé le module est utilisable :
from example_package import example example.add_one(3)
Cacher l'organisation interne du module
En mettant dans __init__.py :
from .example import *
on peut directement faire :
import example_package example_package.add_one(3)
Simplifier l'arborescence
Il est possible de supprimer un niveau dans l'arborescence :
. ├── example_package │ ├── example.py │ └── __init__.py ├── pyproject.toml └── setup.cfg
Les options dans setup.cfg deviennent alors seulement :
[options] packages = find: python_requires = >=3.6