Cette page présente l'environnement de développement Python. D'autres mémos sont disponibles dans les pages suivantes : les bases, l'orienté objet et les modules.
Environnements de développement
VSCodium
Éditeur de code pour les petits projets ou l'édition de scripts.
VSCodium est une version libre et sans télémétrie de Visual Studio Code. Elle est construite à partir des mêmes sources.
Sous Arch Linux il faut installer les packages AUR vscodium-bin
et vscodium-bin-marketplace
. Ensuite les extensions suivantes peuvent être ajoutées :
- Python : linting, debugging, code autocomplete, code navigation, code formatting, refactoring, variable explorer, test explorer...
- autoDocstring : générateur de docstring
- SQLite : bases de données SQLite
Fleet
Environnement de développement intégré léger et multilangage.
Fleet est l'IDE nouvelle génération de JetBrains en réponse à Visual Studio Code.
Sous Arch Linux il faut installer le package AUR jetbrains-fleet
.
PyCharm
Environnement de développement intégré pour les projets plus importants.
Il existe une version "community" gratuite et une version "professional" payante incluant la prise en charge du développement Web : HTML, JS, SQL...
PyCharm contient de base toutes les fonctionnalités nécessaires pour coder en Python.
Sous Arch Linux il faut installer le package pycharm-community-edition
. Pour améliorer la lisibilité du code, installer les polices Fira Code (ttf-fira-code
) ou JetBrains Mono (ttf-jetbrains-mono
).
Attention : sous Wayland il faut ajouter la variable d'environnement suivante pour que ça fonctionne.
# bash : .bashrc export _JAVA_AWT_WM_NONREPARENTING=1 # fish set -xg _JAVA_AWT_WM_NONREPARENTING 1
Les principaux raccourcis clavier :
- Maj Maj
- Recherche globale
- Ctrl + Maj + F / R
- Recherche / remplacement dans le projet
- Ctrl + Space / Tab
- Complétion de code / remplacement
- Ctrl + Maj + Space
- Complétion de code intelligente
- Alt + Entrée
- Actions contextuelles
- Ctrl + B / Clique gauche
- Déclaration / implémentation(s)
- Ctrl + Q
- Documentation rapide
- Ctrl + /
- Commentaires de ligne
- Ctrl + Alt + O
- Optimisation des imports
- Ctrl + Alt + L
- Formatage du code
- Ctrl + Alt + I
- Indentation automatique
- Ctrl + W / Ctrl + Maj + W
- Sélection étendre / diminuer
- Ctrl + - / +
- Plier / déplier un bloc
- Ctrl + Maj + - / +
- Plier / déplier tous les blocs de code
- Ctrl + Maj + Bas / Haut
- Déplacer une ligne ou un bloc
- Ctrl + X / C / D
- Couper / copier / dupliquer une ligne
- Ctrl + Alt + <- / ->
- Naviguer en avant / arrière
Note : l'outil Emmet inclus dans PyCharm, défini une syntaxe d'abréviations qui permet d'ajouter des fonctionnalités d'autocomplétion puissantes dans les fichiers HTML et CSS.
JupyterLab
Environnement de développement orienté science des données et formation. Il s'agit d'un cahier de laboratoire pour expérimenter, documenter et partager du code Python.
JupyterLab se lance avec la commande jupyter-lab
et s'ouvre automatiquement dans le navigateur.
Astuce : PythonAnywhere propose des instances avec ses offres payantes.
Note : Streamlit est un module qui permet de transformer des scripts de données en applications web.
Environnements virtuels : venv
Un environnement virtuel est un espace isolé du système dans lequel est installé une version spécifique de l'interpréteur Python et des modules nécessaires au fonctionnement d'un projet.
La commande suivante crée un environnement virtuel dans le répertoire courant avec le module venv
:
python3.10 -m venv .env
L'arborescence suivante est créée :
.env
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── Activate.ps1
│ ├── pip
│ ├── pip3
│ ├── pip3.10
│ ├── python -> python3.10
│ ├── python3 -> python3.10
│ └── python3.10 -> /sbin/python3.10
├── lib
│ └── python3.10
└── pyvenv.cfg
bin
: interpréteur Python et scripts d'activation de l'environnementlib
: bibliothèques installéespyvenv.cfg
: configuration de l'environnement
Pour activer et désactiver l'environnement virtuel :
~/project$ source .env/bin/activate
(.env) ~/project$ which python
(.env) ~/project$ pip list
(.env) ~/project$ deactivate
Astuce : avec le shell fish lancer le script
activate.fish
.
Gestionnaire de paquets : pip
Le gestionnaire de paquets PIP permet d'installer des modules, des bibliothèques ou des programmes hébergés sur le site pypi.org.
Les commandes principales :
pip list
: liste les paquets installéspip show
: affiche les informations d'un paquetpip search
: recherche un paquetpip install
: installe un paquet et ses dépendancespip uninstall
: désinstalle un paquetpip freeze
: affiche les paquets installés au format requirements
Par exemple pour mettre à jour des dépendances :
pip list --outdated
pip install dependance --upgrade
Attention : ces commandes doivent être lancées dans un environnement virtuel pour ne pas interférer avec les paquets installés sur le système.
Alternative : uv est un gestionnaire de paquets extrêmement rapide, par les développeurs de ruff. L'objectif est d'en faire un gestionnaire de projet complet à la Cargo.
# Create and activate a virtual environment
uv venv
source .venv/bin/activate
# Install packages from a pyproject.toml file
uv pip install -r pyproject.toml
# Generate a set of locked dependencies from a pyproject.toml file
uv pip compile pyproject.toml -o requirements.txt
# Sync a set of locked dependencies with the virtual environment from a requirements.txt file
uv pip sync requirements.txt
Gestionnaire de projet : poetry
Poetry est un outil de gestion de projet pour Python. Il permet de gérer les métadonnées d’un projet, les dépendances, l’environnement de développement, la génération de livrables, la publication, l’environnement d’exécution... Plus de détails dans la dépêche sur LinuxFr et dans la documentation.
Description des commandes principales :
poetry new
initialise un projet en créant une structure de répertoires minimalepoetry init
initialise un fichier pyproject.toml en posant quelques questions sur les métadonnées fondamentalespoetry install
initialise un virtualenv et y installe le projet et ses dépendancespoetry add
etpoetry remove
permettent d’ajouter ou retirer des dépendances d’exécution ou de développementpoetry shell
etpoetry run
exécutent du code dans le virtualenv du projetpoetry env
permet de basculer d’une version de Python à l’autrepoetry version
incrémente la version de votre projet selon la spécification SemVerpoetry build
etpoetry publish
génère et téléverse les livrables d’un projetpoetry export
génère un fichier requirements.txt pour alimenter pippoetry update
met à jour l’ensemble des dépendances en garantissant la compatibilité et en ajoutant les nouvelles sous‑dépendances
Installation et mise à jour :
curl -sSL https://install.python-poetry.org | python3 -
poetry completions bash > /etc/bash_completion.d/poetry
poetry completions fish > ~/.config/fish/completions/poetry.fish
poetry self update
Sous Alpine Linux l'installation des packages suivants est un prérequis :
apk add build-base python3-dev
Création d'un nouveau projet :
poetry new project
L'arborescence suivante est créée :
project
├── pyproject.toml
├── README.md
├── project
│ └── __init__.py
└── tests
├── __init__.py
└── test_project.py
Un fichier pyproject.toml
est créé à la racine. Il rassemble la configuration du projet.
Création d'un nouveau projet Django :
mkdir project cd project poetry init --no-interaction --dependency django poetry install poetry run django-admin startproject config .
Ajout de dépendances :
poetry add markdown # ajoute la dernière version d'une dépendance
poetry add "arrow==1.2.3" # ajoute la version spécifiée d'une dépendance
poetry add --group dev ruff # ajoute une dépendance de développement
Le fichier pyproject.toml
peut aussi être modifié manuellement. Dans ce cas il faudra ensuite installer les dépendances (poetry add
fait automatiquement l'installation en plus de l'ajout dans le fichier) :
poetry check # vérifie la validité du fichier pyproject.toml
poetry install
poetry install --extras feed2toot # installe une dépendance optionnelle
Une fois ceci fait les dépendances sont figées dans un fichier poetry.lock
.
Mise à jour des dépendances :
poetry show --tree
poetry show --outdated
poetry update
Pour mettre à jour une dépendance vers une version plus récente que celle indiquée dans le fichier pyproject.toml
:
poetry add flake8@latest # mise à jour vers la dernière version d'une dépendance
Il est possible d'exporter la liste des dépendances dans un fichier requirements.txt
compatible avec PIP pour simplifier une installation sur un autre poste par exemple :
poetry export -f requirements.txt --output requirements.txt
pip install -r requirements.txt
Lancement d'une commande dans l'environnement virtuel du projet :
poetry run black project # lancement du formateur de code black
poetry run build-site # lancement d'une commande personnalisée
La commande personalisée peut être définie ainsi dans le fichier pyproject.toml
:
[tool.poetry.scripts]
build-site = "project.site:build"
Gestion des environnements virtuels :
poetry shell # ouvre un shell dans l'environnement virtuel
poetry env use python3.10 # change d'environnement
poetry env list # liste les environnements
poetry env info # détaille les environnements
poetry env remove env_name # supprime un environnement
La configuration de Poetry est située dans le fichier .config/pypoetry/config.toml
et peut être affichée avec :
poetry config --list
Pour afficher l'aide :
poetry help
Gestionnaire de projet : uv
uv est un outil de gestion de projet pour Python. Il permet de gérer les métadonnées d’un projet, les dépendances, l’environnement de développement, la génération de livrables, la publication, l’environnement d’exécution… Plus de détails dans la documentation.
De manière générale, uv gère automatiquement les environnements virtuels et les dépendances bien qu'il soit possible de les gérer manuellement avec les commandes uv venv
et uv pip
. uv gère également les versions de Python, en utilisant les versions installées sur le système ou en récupérant les versions sur Internet si nécessaire. Il est aussi possible de les gérer manuellement avec les commandes uv python
.
Installation et gestion des versions de Python :
uv python install
installe des versions de Pythonuv python list
affiche les versions de Python disponiblesuv python find
recherche une version de Python installéeuv python pin:
utilise une version de Python spécifique pour le projet courantuv python uninstall
désinstalle une version de Python
Exécution de scripts Python (example.py) :
uv run
exécute un scriptuv add --script
ajoute une dépendance au scriptuv remove --script
supprime une dépendance d'un script
Création et gestion de projets Python (pyproject.toml) :
uv init
crée un nouveau projet Pythonuv add
ajoute une dépendance au projetuv remove
supprime une dépendance du projetuv sync
synchronise les dépendances du projet avec l'environnementuv lock
crée un lockfile pour les dépendances du projetuv run
exécute une commande dans l'environnement du projetuv tree
affiche l'arbre des dépendances du projetuv build
génère les livrables du projetuv publish
publie les livrables du projet
Exécution et Installation d'outils publiés sur le Python Package Index :
uv tool run / uvx
exécute un outil dans un environnement temporaireuv tool install
installe un outil dans l'espace utilisateuruv tool uninstall
désinstalle un outiluv tool upgrade
met à jour un outiluv tool list
liste les outils installésuv tool update-shell
met à jour le shell pour inclure les outils exécutables
Installation et mise à jour :
curl -LsSf https://astral.sh/uv/install.sh | sh
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc
echo 'uv generate-shell-completion fish | source' >> ~/.config/fish/config.fish
uv self update
Note : l'installation du package
uv
de la distribution peut être suffisant bien que moins à jour.
Création d'un nouveau projet :
uv init project
L'arborescence suivante est créée :
project
├── .venv
├── hello.py
├── pyproject.toml
├── README.md
└── uv.lock
Un fichier pyproject.toml
qui rassemble la configuration du projet est créé à la racine.
L'environnement virtuel .venv
et le lockfile des dépendances uv.lock
sont créés à la première exécution du projet.
Création d'un nouveau projet Django :
mkdir project cd project uv init uv add django uv run django-admin startproject config .
Ajout et suppression de dépendances :
uv add requests # ajoute la dernière version d'une dépendance
uv add 'requests==2.31.0' # ajoute la version spécifiée d'une dépendance
uv add httpx --optional group # ajoute une dépendance optionnelle
uv add pytest --group group # ajoute une dépendance de développement
uv add ruff --dev # ajoute une dépendance de développement dans le groupe dev
uv remove requests
Le fichier pyproject.toml
peut aussi être modifié manuellement.
Les dépendances sont ensuite synchronisées automatiquement dans l'environnement virtuel et dans le le fichier uv.lock
.
Mise à jour des dépendances :
uv tree --outdated
uv add 'requests==2.32.0'
Pour mettre à jour une dépendance vers une version plus récente que celle indiquée dans le fichier pyproject.toml
:
uv add 'requests>2.0.0' --upgrade-package requests
uv lock --upgrade
La liste des dépendances est figée dans le fichier uv.lock
pour homogénéiser les déploiements ou les installations sur les autres postes de développement :
uv sync
uv sync --all-extras # inclus toutes les dépendances optionnelles
uv sync --extra group # inclus les dépendances optionnelles d'un groupe
uv sync --group group # inclus les dépendances de développement d'un groupe
uv sync --dev # inclus les dépendances de développement du groupe dev
Lancement d'une commande dans l'environnement virtuel du projet :
uv run hello.py # lancement d'un script
uv run ruff format # lancement d'un outil
uv run build-site # lancement d'une commande personnalisée
La commande personalisée peut être définie ainsi dans le fichier pyproject.toml
:
[project.scripts]
build-site = "project.site:build"
Pendant le développement, il est possible de définir d'autres sources de dépendances pour des paquets non disponibles sur PyPI :
- Index: A package resolved from a specific package index.
- Git: A Git repository.
- URL: A remote wheel or source distribution.
- Path: A local wheel, source distribution, or project directory (see also editable dependencies).
- Workspace: A member of the current workspace.
Note : un workspace regroupe plusieurs projets ayant des dépendances proches et un environnement virtuel commun. Les dépendances éditables sont utiles lorsque des projets ont des dépendances en conflit et des environnements virtuels distincts (voir when-not-to-use-workspaces).
Autres outils
pyinstaller
Distribuer un fichier exécutable contenant une application et toutes ses dépendances : documentation.
Astuce : sous Windows, il existe une interface graphique : auto-py-to-exe.
Création d'une application en mode console à partir d'un script python :
pyinstaller --noconfirm --onedir --console --name AppName app.py
Création d'une application graphique en ajoutant des ressources dans un répertoire data
:
pyinstaller --noconfirm --onedir --windowed --add-data "/home/user/project/data:data" --name AppName /home/user/project/app.py
Création d'une application à partir d'un fichier de configuration :
pyinstaller app.spec
L'option --clean
supprime le cache et les fichiers temporaires.
L'option --onefile
crée un fichier exécutable unique.
Astuce : pour distribuer une application Qt multiplateforme, le module fbs est tout indiqué. Mais seule la version commerciale non libre prend en charge Python 3.7 et Pyside 6. Voir aussi nuitka.
docker
docker permet de conteneuriser les serveurs (email, base de données…) sans les installer sur le système de développement. Il permet aussi de conteneuriser une application afin de la déployer en production.
ngrok
ngrok permet de rendre accessible une application web locale sur Internet en créant un tunnel sécurisé.
mailhog
mailhog permet de tester l'envoi d'emails grâce à un serveur SMTP local.
tokei
tokei permet d'afficher des statistiques sur le code d'un projet.