Un projet, un ensemble de bibliothèques
Les projets ont besoin de bibliothèques tierces comme numpy ou pandas, et des projets différents en demandent des versions différentes. Tout installer dans un seul Python partagé provoque des conflits de versions : mettre à jour pour un projet en casse un autre. Un environnement virtuel est un dossier privé contenant sa propre copie de l'interpréteur Python et ses propres bibliothèques installées, de sorte que chaque projet dispose exactement de ce qu'il lui faut. pip est l'outil qui télécharge et installe des bibliothèques depuis le Python Package Index (PyPI) dans l'environnement actif.
# Create an environment in the project folder (once)
python -m venv .venv
# Activate it (every new terminal)
source .venv/bin/activate # macOS and Linux
.venv\Scripts\activate # Windows
# The prompt now shows (.venv); python and pip belong to it
python -c "import sys; print(sys.prefix)"
# Leave it
deactivateInstaller avec pip
Avec l'environnement actif, pip install numpy ajoute une bibliothèque, pip install numpy==1.26.4 fixe une version exacte, pip install -U numpy la met à jour et pip uninstall numpy la retire. pip list montre ce qui est installé. Appelez-le en cas de doute comme python -m pip, ce qui garantit qu'il appartient au même Python que celui que vous lancerez. N'utilisez jamais sudo pip et n'installez pas dans le Python du système.
# Install, pin and inspect (environment active)
python -m pip install numpy pandas
python -m pip install "scipy>=1.11,<2"
python -m pip list
# Show one library
python -m pip show numpyrequirements.txt et règles de version
Un fichier de dépendances liste les bibliothèques dont un projet a besoin, une par ligne, pour que chacun puisse reconstruire l'environnement avec pip install -r requirements.txt ; pip freeze > requirements.txt écrit les versions exactes installées. Chaque ligne est un nom plus un spécificateur de version facultatif : ==1.26.4 (exactement), >=2.0 (au moins), <3 (en dessous), !=2.1 (tout sauf) et ~=1.4.2 (compatible : au moins 1.4.2 mais toujours 1.4.x). Les lignes commençant par # sont des commentaires. Les versions se comparent comme des nombres, partie par partie : 1.10 est donc plus récente que 1.9, pas plus ancienne.
# A version is a tuple of numbers, not a string
print("1.10" > "1.9") # False (text order is wrong!)
def version_tuple(text):
return tuple(int(part) for part in text.split("."))
print(version_tuple("1.10") > version_tuple("1.9")) # True
print(version_tuple("2.0.1")) # (2, 0, 1)
# Reading one requirements line
line = "numpy>=1.26 # for arrays"
name_and_spec = line.split("#", 1)[0].strip()
print(name_and_spec) # numpy>=1.26Habitudes qui gardent les projets reproductibles
Créez un environnement par projet et gardez-le dans le projet sous le nom .venv, mais ne le versionnez pas : il est volumineux et propre à votre machine. Versionnez plutôt requirements.txt (ou pyproject.toml). Écrivez des règles souples (>=) pour ce dont vous avez besoin et fixez des versions exactes (==) quand vous devez reproduire des résultats. Si quelque chose se comporte mal, vous pouvez toujours supprimer .venv et le reconstruire en une minute à partir du fichier de dépendances.
# requirements.txt
numpy==1.26.4 # pinned: reproduce results exactly
pandas>=2.0 # at least 2.0
scipy~=1.11.0 # 1.11.x, but not 1.12
# plotting waits until we need it
# Rebuild the environment anywhere
python -m venv .venv
python -m pip install -r requirements.txt
# Record what is installed right now
python -m pip freeze > requirements.txtimport échoue quand vous lancez votre code. Vérifiez que l'invite affiche (.venv) et que python -c "import sys; print(sys.prefix)" pointe dans votre projet avant d'installer quoi que ce soit.python -m venv .venv, puis activez-le : un environnement par projet.python -m pip install name==version,pip install -r requirements.txt,pip freeze.- Spécificateurs :
==,>=,<,!=,~=; comparez les versions comme des tuples de nombres ; versionnez les dépendances, pas.venv.
À suivre : les bases de Git, pour suivre chaque modification de votre code et revenir en arrière quand quelque chose casse.
Lab : ce qui est noté
- Lire une ligne de dépendance avec
parse_requirement25 pts - Lire un fichier de dépendances entier avec
parse_requirements25 pts - Rendre les versions comparables avec
version_tuple25 pts - Vérifier une version par rapport à une règle avec
satisfies25 pts