Environnements Python
Type: Build
Languages: Shell
Prerequisites: Phase 0, Lesson 01
Time: ~30 minutes
Objectifs d'apprentissage
- Créer des environnements virtuels isolés en utilisant
uv- Je suis là .venvouconda - Écrivez une
pyproject.tomlavec des groupes de dépendance facultatifs et générer des fichiers verrouillés pour la reproductibilité - Diagnostication et réparation des pièges communs: installations globales, mélange pip/conda, incompatibilités de version CUDA
- Mettre en œuvre une stratégie environnementale à chaque étape pour les projets ayant des dépendances en conflit
Le problème
Vous installez PyTorch 2.4 pour un projet de réglage. La semaine prochaine, un autre projet a besoin de PyTorch 2.1 parce que sa mise en place CUDA est fixée. Vous mettez à niveau mondial, et le premier projet se casse. Vous dégradez, et le second se casse.
C'est l'enfer de la dépendance. Cela arrive constamment dans le travail AI/ML parce que:
- PyTorch, JAX et TensorFlow envoient chacun leurs propres liens CUDA
- Les bibliothèques de modèle sont des versions de cadres spécifiques
- Une organisation mondiale
pip installIl écris ce qui était là avant. - Les constructions CUDA 11.8 ne fonctionnent pas avec les pilotes CUDA 12.x (et vice versa)
Le problème: chaque projet a son propre environnement isolé avec ses propres forfaits.
Le concept
graph TD
subgraph without["Without virtual environments"]
SP[System Python] --> T24["torch 2.4.0 (CUDA 12.4)\nProject A needs this"]
SP --> T21["torch 2.1.0 (CUDA 11.8)\nProject B needs this"]
SP --> CONFLICT["CONFLICT: only one\ntorch version can exist"]
end
subgraph with["With virtual environments"]
PA["Project A (.venv/)"] --> PA1["torch 2.4.0 (CUDA 12.4)"]
PA --> PA2["transformers 4.44"]
PB["Project B (.venv/)"] --> PB1["torch 2.1.0 (CUDA 11.8)"]
PB --> PB2["diffusers 0.28"]
endFaites-le
Option 1: uv venv (recommandé)
uvest le gestionnaire de paquets Python le plus rapide (10-100 fois plus rapide que pip). Il gère des environnements virtuels, des versions Python et une résolution de dépendance dans un seul outil.
bashcurl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.12
cd your-project
uv venv
source .venv/bin/activateDes paquets d'installation:
bashuv pip install torch numpyCréer un projet avec pyproject.tomlen une seule étape:
bashuv init my-ai-project
cd my-ai-project
uv add torch numpy matplotlibOption 2: venv (intégré)
Si vous ne pouvez pas installer uv, les navires Python avec venv- Le numéro de la liste:
bashpython3 -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
pip install torch numpyPlus lent que uv, mais fonctionne partout où Python est installé.
Option 3: conda (lorsque vous en avez besoin)
Conda gère des dépendances non Python comme les kits d'outils CUDA, cuDNN et les bibliothèques C. Utilisez-le lorsque:
- Vous avez besoin d'une version spécifique de la trousse d' outils CUDA sans l' installer dans tout le système
- Vous êtes sur un cluster partagé où vous ne pouvez pas installer des paquets système
- Les instructions d'installation d'une bibliothèque disent "utiliser conda"
bash# Install miniconda (not the full Anaconda)
curl -LsSf https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o miniconda.sh
bash miniconda.sh -b
conda create -n myproject python=3.12
conda activate myproject
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidiaUne règle: si vous utilisez conda pour un environnement, utilisez conda pour tous les emballages de cet environnement.pip installdans un conda env provoque des conflits de dépendance qui sont douloureux à déboguer.
Pour ce cours: stratégie par phase
Vous pouvez créer un environnement pour tout le cours. Ne le faites pas. Différentes phases ont besoin de dépendances différentes (parfois contradictoires).
Stratégie:
ai-engineering-from-scratch/
├── .venv/ <-- shared lightweight env for phases 0-3
├── phases/
│ ├── 04-neural-networks/
│ │ └── .venv/ <-- PyTorch env
│ ├── 05-cnns/
│ │ └── .venv/ <-- same PyTorch env (symlink or shared)
│ ├── 08-transformers/
│ │ └── .venv/ <-- might need different transformer versions
│ └── 11-llm-apis/
│ └── .venv/ <-- API SDKs, no torch neededLe scénario en code/env_setup.shcrée l'environnement de base pour ce cours.
pyproject.toml Basics
Chaque projet Python devrait avoir unpyproject.tomlIl remplace ...setup.py- Je suis là .setup.cfg, et requirements.txtdans un seul dossier.
toml[project]
name = "ai-engineering-from-scratch"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"numpy>=1.26",
"matplotlib>=3.8",
"jupyter>=1.0",
"scikit-learn>=1.4",
]
[project.optional-dependencies]
torch = ["torch>=2.3", "torchvision>=0.18"]
llm = ["anthropic>=0.39", "openai>=1.50"]Puis installez:
bashuv pip install -e ".[torch]" # base + PyTorch
uv pip install -e ".[llm]" # base + LLM SDKs
uv pip install -e ".[torch,llm]" # everythingFichiers de verrouillage
Un fichier de verrouillage pinne toutes les dépendances (y compris les transitives) vers des versions exactes. Cela garantit la reproductibilité: toute personne installant à partir du fichier de verrouillage obtient exactement les mêmes paquets.
bash# uv generates uv.lock automatically when using uv add
uv add numpy
# pip-tools approach
uv pip compile pyproject.toml -o requirements.lock
uv pip install -r requirements.lockQuand quelqu'un clone le repo, il installe à partir du fichier de verrouillage et obtient des versions identiques.
Des erreurs courantes
1. Installation à l'échelle mondiale
bashpip install torch # BAD: installs to system Python
source .venv/bin/activate
pip install torch # GOOD: installs to virtual environmentVérifiez où vont vos colis:
bashwhich python # should show .venv/bin/python, not /usr/bin/python
which pip # should show .venv/bin/pip2. mélange de pip et de conda
bashconda create -n myenv python=3.12
conda activate myenv
conda install pytorch -c pytorch
pip install some-other-package # BAD: can break conda's dependency tracking
conda install some-other-package # GOOD: let conda manage everythingSi vous devez utiliser pip à l'intérieur de conda (certains paquets sont uniquement pip), installez d'abord tous les paquets conda, puis les paquets pip durent.
3. Oublier d'activer
bashpython train.py # uses system Python, missing packages
source .venv/bin/activate
python train.py # uses project Python, packages foundVotre requête de coque doit afficher le nom de l'environnement:
(.venv) $ python train.py4. Compromettre .venv à git
bashecho ".venv/" >> .gitignoreLes environnements virtuels sont de 200 Mo à 2 Go. Ils sont locaux, pas portables entre les machines.pyproject.tomlet le fichier de verrouillage à la place.
5. Ne correspond pas à la version CUDA
bashnvidia-smi # shows driver CUDA version (e.g., 12.4)
python -c "import torch; print(torch.version.cuda)" # shows PyTorch CUDA version
# These must be compatible.
# PyTorch CUDA version must be <= driver CUDA version.Utilisez-le
Exécutez le script de configuration pour créer votre environnement de cours:
bashbash phases/00-setup-and-tooling/06-python-environments/code/env_setup.shCela crée une.venvà la racine repo avec des dépendances de base installées et vérifiées.
Exercices
- On court .
env_setup.shet vérifier le passage de tous les contrôles - Créez un deuxième environnement virtuel, installez une version différente de numpy et confirmez que les deux environnements sont isolés
- Écrivez une
pyproject.tomlpour un projet qui a besoin de PyTorch et de l'SDK Anthropic - Installez délibérément un package à l'échelle mondiale (sans activer un venv), notez où il va, puis désinstallez-le
Les termes clés
| Term | What people say | What it actually means |
|---|---|---|
| Virtual environment | "A venv" | An isolated directory containing a Python interpreter and packages, separate from the system Python |
| Lockfile | "Pinned dependencies" | A file listing every package and its exact version, guaranteeing identical installs across machines |
| pyproject.toml | "The new setup.py" | The standard Python project configuration file, replacing setup.py/setup.cfg/requirements.txt |
| Transitive dependency | "A dependency of a dependency" | Package B depends on C; if you install A which depends on B, C is a transitive dependency of A |
| CUDA mismatch | "My GPU isn't working" | PyTorch was compiled for a different CUDA version than what your GPU driver supports |
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.