Module 4Déployer la solution Python
Chapitre 10 sur 11
Déployer une solution Python
pip et PyPI, créer et publier un paquet, PyInstaller et documentation avec Sphinx.
- ≈ 125 min
- 5 leçons
- 1 vidéo
- 2 exercices
Module 4Déployer la solution Python
Chapitre 10 sur 11
pip et PyPI, créer et publier un paquet, PyInstaller et documentation avec Sphinx.
Objectifs
Avec ce chapitre, tu sauras…
pyproject.toml, setup.py / setup.cfg, README.md, LICENSE ;Ton programme fonctionne et il est débogué. Il reste à le partager : avec d'autres développeurs (un paquet installable avec pip), avec des utilisateurs qui n'ont pas Python (un exécutable), et avec ceux qui maintiendront ton code (une documentation).
Leçon 1
py -m pip install --upgrade pip # mettre pip à jour (Windows : py ; sinon python3)
pip install requests # installer un paquet depuis PyPI
pip install requests==2.32.3 # une version précise
pip list # paquets installés
pip freeze > requirements.txt # enregistrer les dépendances du projet
pip install -r requirements.txt # les réinstaller ailleurs
pip uninstall requestsTableau: L'histoire des outils (résumé OFPPT)
| Outil | Date | Rôle |
|---|---|---|
| distutils | 1998 (Greg Ward), dans la bibliothèque standard depuis Python 1.6 (2000) | organise un projet autour d'un fichier setup.py ; configurer, compiler, déployer |
| PyPI | 2003 (Richard Jones) | index central des paquets |
| setuptools | 2005 (Phillip Eby) | extension de distutils : paquets binaires (eggs), installation automatique (easy_install) |
| distribute | 2008 | fork de setuptools supportant Python 3, puis refusionné dans setuptools en 2013 |
Leçon 2
| Fichier | Rôle |
|---|---|
__init__.py | rend le dossier importable comme paquet |
pyproject.toml | indique aux outils (pip, build) comment construire le paquet |
setup.py / setup.cfg | nom, version, auteur, description, dépendances, fichiers à inclure |
README.md | la description affichée sur PyPI |
LICENSE | les conditions d'utilisation (MIT, GPL…) : obligatoire pour publier |
Leçon 3
py -m pip install --upgrade twinepy -m twine upload --repository testpypi dist/* ; utilisateur : __token__, mot de passe : le jeton (avec le préfixe pypi-).pip install --index-url https://test.pypi.org/simple/ example-pkg-ton-pseudo.Leçon 4
Leçon 5
1pip est…
2PyPI est…
3Le fichier qui rend un dossier importable comme paquet est…
4La commande qui génère les archives .whl et .tar.gz est…
5PyInstaller sert à…
6Sphinx génère…
L'essentiel du chapitre
requirements.txt et environnement virtuel venv par projet.pyproject.toml + wheel.src/paquet/__init__.py, pyproject.toml, setup.py (ou [project]), README.md, LICENSE ; py -m build ; twine upload vers TestPyPI.pyinstaller --onefile prog.py → exécutable dans dist/, un par système.sphinx-quickstart, make html, autodoc).Vidéo · À regarder
FRPython - Cours complet pour débutants (2026)
SimpleTech par Sergio · YouTube
distutils a été retiré de Python 3.12 et easy_install est abandonné. Les outils actuels sont setuptools (ou d'autres backends comme Hatch, Poetry), le fichier de configuration pyproject.toml, le format d'archive wheel (.whl), build pour construire et twine pour publier.
packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg ← ou setup.py
├── src/
│ └── example_package/
│ ├── __init__.py ← fait du dossier un paquet importable (peut être vide)
│ └── example.py ← le code : fonctions, classes, constantes
└── tests/def add_one(number):
"""Renvoie number + 1."""
return number + 1[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"import setuptools
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setuptools.setup(
name="example-pkg-ton-pseudo",
version="0.0.1",
author="Anas El Amrani",
author_email="anas@exemple.ma",
description="Un petit paquet d'exemple",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/anas/example-pkg",
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
package_dir={"": "src"},
packages=setuptools.find_packages(where="src"),
python_requires=">=3.6",
)Tableau: Les fichiers du paquet
py -m pip install --upgrade build
py -m build
# dist/
# example_pkg_ton_pseudo-0.0.1-py3-none-any.whl ← paquet binaire (wheel)
# example_pkg_ton_pseudo-0.0.1.tar.gz ← archive sourcePublier sur TestPyPI
PyInstaller regroupe une application Python et toutes ses dépendances dans un seul paquet : l'utilisateur peut la lancer sans installer Python.
pip install pyinstaller
pyinstaller mon_programme.py # un dossier dist/mon_programme/
pyinstaller --onefile mon_programme.py # un seul fichier exécutable dans dist/
pyinstaller --onefile --noconsole app.py # sans fenêtre de console (application graphique)Un exécutable créé sous Windows (.exe) ne fonctionne que sous Windows ; pour macOS ou Linux, il faut lancer PyInstaller sur ce système. Et les antivirus signalent parfois à tort les exécutables PyInstaller : c'est connu, et on le règle en signant l'application.
Le résumé OFPPT indique d'installer pywin32 et d'ajouter le dossier Scripts de Python au PATH. Avec les versions récentes de Python, cocher « Add Python to PATH » à l'installation suffit, et pip install pyinstaller installe les dépendances nécessaires.
Les docstrings
def moyenne(notes):
"""Calcule la moyenne d'une liste de notes.
:param notes: liste de nombres, non vide
:type notes: list
:return: la moyenne des notes
:rtype: float
:raises ZeroDivisionError: si la liste est vide
"""
return sum(notes) / len(notes)
help(moyenne) # affiche la docstringSphinx
Sphinx génère automatiquement la documentation d'un projet Python, au format HTML ou PDF, à partir de fichiers reStructuredText (.rst) et des docstrings du code. C'est l'outil utilisé pour la documentation officielle de Python.
py -m pip install -U sphinx
cd mon_projet
mkdir docs
cd docs
sphinx-quickstart # crée conf.py et index.rst (quelques questions)
make html # génère le site dans _build/html (Windows : make.bat html)Dans conf.py, ajoute l'extension "sphinx.ext.autodoc" à la liste extensions, puis dans un fichier .rst la directive .. automodule:: example_package.example suivie de :members:. Sphinx lira alors toutes les docstrings du module.
Transforme le jeu du nombre mystère (exercice 8.5) en un exécutable unique avec PyInstaller, et teste-le sur un ordinateur où Python n'est pas installé.
Crée un paquet outils_ton_pseudo contenant un module calculs.py avec les fonctions moyenne(notes) et est_premier(n) documentées par des docstrings. Écris pyproject.toml, setup.py, README.md et LICENSE, génère les archives avec py -m build, et vérifie le contenu du dossier dist/.
Aujourd'hui, toutes les informations de setup.py peuvent être écrites directement dans pyproject.toml, dans une section [project] (name, version, description, dependencies…). Les deux méthodes sont acceptées ; le résumé OFPPT présente celle avec setup.py.
Les fonctions, modules et packages en Python : pour bien comprendre ce qu'est un module et un paquet avant de les distribuer.