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 :

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
)
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Quels sont les trois champs obligatoires dans un fichier setup.py ?
A. name, author, license
B. name, description, packages
C. name, version, packages
D. name, version, license

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 .
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Quel est l'avantage principal de pyproject.toml par rapport à setup.py ?
A. Il est plus rapide à exécuter
B. Il est déclaratif, plus sûr (pas d'exécution de code) et suit les normes PEP
C. Il nécessite moins de configuration
D. Il ne fonctionne qu'avec Python 3.10+

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.

Liens pertinents