====== Packaging de modules Python ====== ==== Version de base ==== * [[https://packaging.python.org/en/latest/tutorials/packaging-projects/]] * https://setuptools.pypa.io/en/latest/index.html Arborescence : . ├── pyproject.toml ├── setup.cfg └── src └── example_package ├── example.py └── __init__.py [build-system] requires = [ "setuptools>=42", "wheel" ] build-backend = "setuptools.build_meta" [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 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