01 - 虚拟环境管理¶
学习时间: 1小时 重要性: ⭐⭐⭐⭐⭐ 项目隔离必备
🎯 学习目标¶
- 理解为什么需要虚拟环境
- 掌握conda和venv的基本使用
- 了解poetry等现代依赖管理工具
- 掌握uv——新一代超快Python包管理器
- 学会管理项目依赖
📦 为什么需要虚拟环境?¶
问题场景¶
Bash
# 项目A需要tensorflow 2.0
# 项目B需要tensorflow 1.x
# 没有虚拟环境?冲突!
# 另一个常见问题:
# 项目A需要requests 2.25.0
# 项目B需要requests 2.28.0
# 全局安装只能有一个版本
解决方案¶
每个项目独立环境,互不干扰:
Text Only
项目A环境: Python 3.11 + TensorFlow 2.16 + requests 2.32.0
项目B环境: Python 3.10 + PyTorch 2.2 + requests 2.31.0
项目C环境: Python 3.12 + PyTorch 2.4 + 其他依赖
🐍 Conda使用(推荐)¶
基础命令¶
Bash
# 创建环境
conda create -n myproject python=3.11
# 创建环境时指定多个包
conda create -n datascience python=3.11 numpy pandas matplotlib
# 激活环境
conda activate myproject
# 退出环境
conda deactivate
# 安装包
conda install numpy pandas
pip install package-name # conda没有的包可以用pip
# 查看已安装的包
conda list
# 更新包
conda update numpy
# 删除包
conda remove numpy
环境管理¶
Bash
# 列出所有环境
conda env list
# 克隆环境
conda create -n new_env --clone old_env
# 删除环境
conda env remove -n myproject
# 导出环境(精确版本)
conda env export > environment.yml
# 导出环境(仅显式安装的包)
conda env export --from-history > environment.yml
# 从文件创建环境
conda env create -f environment.yml
environment.yml示例¶
YAML
name: myproject
channels:
- defaults
- conda-forge
dependencies:
- python=3.11
- numpy=1.24
- pandas=2.0
- matplotlib=3.7
- pip
- pip:
- requests==2.31.0
- python-dotenv==1.0.0
🐍 venv使用(Python内置)¶
基础命令¶
Bash
# 创建虚拟环境
python -m venv myenv
# 激活环境(Windows)
myenv\Scripts\activate
# 激活环境(Linux/Mac)
source myenv/bin/activate
# 退出环境
deactivate
# 删除环境(直接删除文件夹)
rm -rf myenv # Linux/Mac
rmdir /s myenv # Windows
依赖管理¶
Bash
# 生成requirements.txt
pip freeze > requirements.txt
# 安装依赖
pip install -r requirements.txt
# pip 不支持区分生产/开发依赖,需使用独立的文件管理
pip install -r requirements.txt # 生产依赖
pip install -r requirements-dev.txt # 开发依赖(可选)
requirements.txt示例¶
Text Only
# 生产依赖
numpy>=1.24.0
pandas>=2.0.0
requests==2.31.0
# 开发依赖(可选)
pytest>=7.0.0
black>=23.0.0
flake8>=6.0.0
📦 Poetry(现代依赖管理)¶
安装¶
Bash
# 安装poetry
pip install poetry
# 或使用官方安装脚本
curl -sSL https://install.python-poetry.org | python3 -
基础使用¶
Bash
# 创建新项目
poetry new myproject
cd myproject
# 在现有项目初始化
poetry init
# 添加依赖
poetry add numpy pandas
# 添加开发依赖
poetry add --group dev pytest black
# 安装所有依赖
poetry install
# 激活shell
poetry shell
# 运行命令
poetry run python script.py
# 更新依赖
poetry update
# 导出requirements.txt
poetry export -f requirements.txt --output requirements.txt
pyproject.toml示例¶
TOML
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = "My awesome project"
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.11"
numpy = "^1.24.0"
pandas = "^2.0.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.0.0"
black = "^23.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
⚡ uv(新一代超快包管理器)¶
uv 是由 Astral(Ruff 的开发团队)用 Rust 开发的 Python 包管理器,速度比 pip 快 10-100 倍,旨在替代 pip、pip-tools、virtualenv、poetry、pyenv 等多个工具。
安装¶
Bash
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 通过 pip 安装(也可以,但推荐上面的独立安装方式)
pip install uv
# 通过 Homebrew
brew install uv
Python 版本管理(替代 pyenv)¶
Bash
# 查看可安装的 Python 版本
uv python list
# 安装指定版本的 Python
uv python install 3.12
# 安装多个版本
uv python install 3.11 3.12
# 固定项目使用的 Python 版本
uv python pin 3.12
项目管理(替代 poetry / pip-tools)¶
Bash
# 创建新项目(自动生成 pyproject.toml 和虚拟环境)
uv init myproject
cd myproject
# 在现有项目初始化
uv init
# 添加依赖
uv add numpy pandas
# 添加开发依赖
uv add --dev pytest black ruff
# 移除依赖
uv remove pandas
# 同步环境(安装 lock 文件中的所有依赖)
uv sync
# 更新所有依赖
uv lock --upgrade
# 运行命令(自动使用项目虚拟环境)
uv run python script.py
uv run pytest
虚拟环境管理(替代 virtualenv / venv)¶
Bash
# 创建虚拟环境
uv venv
# 指定 Python 版本创建
uv venv --python 3.12
# 指定目录名
uv venv .venv
# 激活(与 venv 相同)
# Windows:
.venv\Scripts\activate
# Linux/Mac:
source .venv/bin/activate
pip 兼容模式(替代 pip)¶
Bash
# 用法与 pip 几乎完全一致,只是快得多
uv pip install numpy pandas
uv pip install -r requirements.txt
uv pip uninstall numpy
uv pip freeze > requirements.txt
uv pip list
uv pip show numpy
# 编译锁定文件(替代 pip-tools)
uv pip compile requirements.in -o requirements.txt
uv pip sync requirements.txt
一次性运行工具(替代 pipx)¶
Bash
# 无需安装,直接运行 CLI 工具
uv tool run ruff check .
uvx ruff check . # uvx 是 uv tool run 的简写
uvx black --check .
uvx jupyter lab
uvx cookiecutter gh:audreyfeldroy/cookiecutter-pypackage
pyproject.toml 示例(uv 项目)¶
TOML
[project]
name = "myproject"
version = "0.1.0"
description = "My awesome project"
requires-python = ">=3.11"
dependencies = [
"numpy>=1.24.0",
"pandas>=2.0.0",
"requests>=2.31.0",
]
[dependency-groups]
dev = [
"pytest>=7.0.0",
"black>=23.0.0",
"ruff>=0.1.0",
]
[tool.uv]
dev-dependencies = [
"pytest>=7.0.0",
"black>=23.0.0",
]
uv vs 其他工具速度对比¶
Text Only
安装 numpy + pandas + matplotlib(冷缓存):
pip : ~15s
poetry : ~12s
uv : ~1.5s ← 快 10 倍
创建虚拟环境:
python -m venv : ~3s
uv venv : ~0.01s ← 几乎瞬间
工具选择建议¶
| 场景 | 推荐工具 |
|---|---|
| 快速原型 / 脚本开发 | uv(最快,零配置) |
| 数据科学 / ML 项目 | conda(管理非 Python 依赖如 CUDA) |
| 库开发 / 发布 PyPI | uv 或 poetry |
| 旧项目维护 | venv + pip(兼容性最好) |
| 团队标准化新项目 | uv(速度快,标准化程度高) |
| 需要运行一次性 CLI 工具 | uvx(替代 pipx) |
💡 最佳实践¶
1. 项目结构¶
Text Only
myproject/
├── src/ # 源代码
│ └── mypackage/
├── tests/ # 测试代码
├── docs/ # 文档
├── notebooks/ # Jupyter notebooks
├── environment.yml # conda环境文件
├── requirements.txt # pip依赖文件
├── requirements-dev.txt # 开发依赖
├── pyproject.toml # 现代Python项目配置
└── README.md
2. 依赖管理策略¶
Bash
# 策略1:锁定版本(生产环境推荐)
# requirements.txt
numpy==1.24.3
pandas==2.0.2
# 策略2:最小版本约束
# requirements.txt
numpy>=1.24.0
pandas>=2.0.0,<3.0.0
# 策略3:使用poetry(推荐新项目)
# 自动管理依赖和虚拟环境
3. 环境切换脚本¶
Bash
# setup.sh - 快速设置开发环境
#!/bin/bash
# 创建环境
conda env create -f environment.yml -n myproject
# 激活环境
conda activate myproject
# 安装预提交钩子
pre-commit install
echo "环境设置完成!"
📝 练习¶
练习1: 创建项目环境¶
Bash
# 1. 为你的数据分析项目创建一个conda环境
# 2. 安装numpy, pandas, matplotlib, jupyter
# 3. 导出environment.yml
# 4. 删除环境并重新从文件创建
练习2: 依赖管理¶
练习3: 尝试Poetry¶
练习4: 体验uv的速度¶
Bash
# 1. 安装uv
# 2. 使用 uv init 创建一个新项目
# 3. 用 uv add 添加 numpy, pandas, matplotlib
# 4. 用 uv run python -c "import numpy; print(numpy.__version__)" 验证
# 5. 用 uvx ruff check . 体验一次性工具运行
# 6. 对比 pip install 和 uv pip install 的速度差异
🎯 自我检查¶
- 理解虚拟环境的作用
- 会创建和管理conda环境
- 会使用venv
- 会管理项目依赖(requirements.txt)
- 了解poetry的基本使用
- 掌握uv的项目管理与包安装
- 了解不同场景下的工具选择
📚 延伸阅读¶
下一步: 02 - 代码调试