Packaging Python
Une opinion « controversée »
L'utilisation de setup.py pour empaqueter et distribuer vos packages Python peut être assez difficile de temps en temps. Les outils modernes comme Poetry et UV rendent non seulement l'empaquetage beaucoup plus facile, mais vous aident également à gérer vos dépendances de manière très pratique. UV est particulièrement remarquable pour être 10 à 100 fois plus rapide que les outils traditionnels.
Si vous souhaitez plus d’informations sur Poetry, vous pouvez lire les articles suivants :
- Projets Python avec Poetry et VSCode. Partie 1
- Projets Python avec Poetry et VSCode. Partie 2
- Projets Python avec Poetry et VSCode. Partie 3
Pour un guide complet sur UV, le gestionnaire de packages Python ultra-rapide, lisez : UV : Le gestionnaire de packages Python ultra-rapide.
Introduction
L’empaquetage Python (Python packaging) est le processus de préparation de votre projet Python pour la distribution et l’installation. Il existe deux approches principales : la méthode traditionnelle setup.py et l’approche moderne pyproject.toml (définie dans PEP-517, PEP-518 et PEP-660).
Pour un guide complet sur la gestion des chemins de fichiers et de répertoires, essentiel pour gérer les structures de projet, consultez la page Chemins de fichiers et de répertoires.
Approche Traditionnelle : setup.py
Le fichier setup.py est au cœur d’un projet Python traditionnel. Il décrit toutes les métadonnées de votre projet. Il existe un certain nombre de champs que vous pouvez ajouter à un projet pour lui donner un ensemble riche de métadonnées décrivant le projet. Cependant, seuls trois champs sont obligatoires : name, version et packages. Le champ name doit être unique si vous souhaitez publier votre package sur l’Index des Packages Python (PyPI). Le champ version suit les différentes versions du projet. Le champ packages décrit où vous avez placé le code source Python au sein de votre projet.
Cela vous permet d’installer facilement des packages Python. Souvent, il suffit d’écrire :
python setup.py install
et le module s’installera lui-même.
Exemple : setup.py
Notre setup.py initial inclura également des informations sur la licence et réutilisera le fichier README.txt pour le champ long_description. Cela ressemblera à ceci :
# setup.py: define package metadata for distribution
from distutils.core import setup
setup(
name='pythonCheatsheet', # Package name (must be unique on PyPI)
version='0.1', # Version number
packages=['pipenv',], # List of packages to include
license='MIT', # License type
long_description=open('README.txt').read(), # Read description from file
)
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
setup.py ?Approche Moderne : pyproject.toml
Le fichier pyproject.toml est la norme moderne pour la configuration des projets Python (PEP-517, PEP-518, PEP-660). Il fournit une manière unifiée de spécifier les exigences du système de construction (build system) et les métadonnées du projet dans un format de fichier unique et déclaratif.
Avantages de pyproject.toml
- Déclaratif : Toutes les métadonnées du projet en un seul endroit
- Agnostique du système de construction : Fonctionne avec setuptools, poetry, flit et d’autres backends de construction
- Pas d’exécution de code : Plus sûr et plus prévisible que setup.py
- Standardisé : Suit les normes PEP pour un meilleur support des outils
Exemple : pyproject.toml
Voici un exemple de base de pyproject.toml utilisant setuptools :
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "pythonCheatsheet"
version = "0.1"
description = "A Python cheatsheet package"
readme = "README.txt"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [
{name = "Your Name", email = "your.email@example.com"}
]
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0",
"black>=22.0",
]
Installation à partir de pyproject.toml
Avec pyproject.toml, vous pouvez installer votre package en utilisant pip :
pip install .
Ou en mode éditable :
pip install -e .
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
pyproject.toml par rapport à setup.py ?Choisir la bonne approche
- Utiliser
setup.py: Si vous travaillez avec des projets hérités (legacy) ou si vous avez besoin d’un contrôle granulaire - Utiliser
pyproject.toml: Pour les nouveaux projets (recommandé), car c’est la norme moderne et offre un meilleur support des outils
Trouvez plus d’informations en visitant la documentation officielle.