Python 基础Technical Deep Dive
pip 与虚拟环境:Python 包管理完全指南
发布时间2025/11/26
分类Python 基础
预计阅读7 分钟
作者吴长龙
*
Python 项目依赖管理是必备技能。本文介绍 pip、venv、uv 等工具,以及 requirements.txt、pyproject.toml 的最佳实践。
01.内容
# pip 与虚拟环境:Python 包管理完全指南
Python 项目的依赖管理非常重要,本文介绍完整的包管理方案。
02.1. pip 基础
1.1 安装与升级
bash snippetbash
# 安装包
pip install requests
pip install requests==2.28.0 # 指定版本
# 升级包
pip install --upgrade requests
# 卸载包
pip uninstall requests1.2 requirements.txt
bash snippetbash
# 导出当前环境依赖
pip freeze > requirements.txt
# 安装依赖
pip install -r requirements.txt
# requirements.txt 示例
requests==2.28.0
numpy>=1.21.0
pandas
openai>=1.0.0
langchain>=0.1.01.3 指定源
bash snippetbash
# 使用国内镜像
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
# 持久化配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple03.2. 虚拟环境
2.1 venv
bash snippetbash
# 创建虚拟环境
python -m venv venv
# 激活 (Linux/Mac)
source venv/bin/activate
# 激活 (Windows)
venv\Scripts\activate
# 退出
deactivate2.2 项目结构
code snippetcode
my-project/
├── venv/ # 虚拟环境
├── src/ # 源代码
├── tests/ # 测试
├── requirements.txt # 依赖
├── .gitignore
└── README.md2.3 .gitignore
code snippetcode
venv/
__pycache__/
*.py[cod]
.pytest_cache/
.env04.3. pyproject.toml (推荐)
toml snippettoml
[project]
name = "my-ai-app"
version = "0.1.0"
description = "AI Application"
requires-python = ">=3.10"
dependencies = [
"openai>=1.0.0",
"langchain>=0.1.0",
"python-dotenv>=1.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"ruff>=0.1.0",
]
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
testpaths = ["tests"]
[tool.ruff]
line-length = 10005.4. uv (更快的新选择)
bash snippetbash
# 安装 uv
pip install uv
# 创建项目
uv init my-project
cd my-project
# 安装依赖
uv add requests
uv add langchain --group main
uv add pytest --group dev
# 创建虚拟环境
uv venv
# 运行脚本
uv run main.py06.5. 最佳实践
| 场景 | 推荐方案 |
|---|---|
| 小项目 | venv + requirements.txt |
| 大项目 | uv + pyproject.toml |
| 团队协作 | pyproject.toml + uv |
07.6. 总结
- •使用虚拟环境隔离依赖
- •推荐 pyproject.toml
- •uv 更快更现代
(未完待续...)