Python 虚拟环境与依赖管理完全指南

Python 虚拟环境与依赖管理完全指南

Python 项目依赖管理是开发者日常工作中的高频场景。从 virtualenv 到 Poetry,从 pip 到 uv,工具不断演进。本文系统梳理 Python 环境管理最佳实践,帮你告别”在我机器上能跑”的困境。

一、为什么需要虚拟环境

Python 全局安装包会导致版本冲突:项目A需要 Django 4.2,项目B需要 Django 3.2,两者无法共存于同一 Python 环境。虚拟环境为每个项目创建独立的 Python 解释器和包目录,彻底解决版本冲突问题。

二、venv(内置,推荐新手)

python -m venv .venv           # 创建虚拟环境
source .venv/bin/activate      # 激活(Linux/Mac)
.venv\Scripts\activate         # 激活(Windows)
pip install -r requirements.txt
deactivate                     # 退出虚拟环境

将 .venv 加入 .gitignore,只提交 requirements.txt。

三、pip 最佳实践

pip install requests            # 安装包
pip install requests==2.31.0   # 安装指定版本
pip freeze > requirements.txt  # 导出依赖
pip install -r requirements.txt # 安装所有依赖
pip list --outdated            # 查看可更新的包
pip install --upgrade pip      # 升级 pip 本身

注意:直接 pip freeze 会包含所有间接依赖,推荐用 pip-tools 管理直接依赖和锁定文件。

四、Poetry(现代化依赖管理)

Poetry 是目前最推荐的 Python 项目管理工具,解决了 pip 的诸多痛点:

pip install poetry
poetry new my-project          # 创建新项目
poetry add requests            # 添加依赖
poetry add pytest --dev        # 添加开发依赖
poetry install                 # 安装所有依赖
poetry run python main.py      # 在虚拟环境中运行
poetry shell                   # 进入虚拟环境 shell
poetry build                   # 打包项目
poetry publish                 # 发布到 PyPI

Poetry 自动生成 poetry.lock 文件锁定精确版本,确保团队环境完全一致。

五、pyenv(多版本管理)

当需要同时维护 Python 3.9、3.11、3.12 等多个版本时,pyenv 是最佳选择:

pyenv install 3.12.0           # 安装 Python 3.12
pyenv global 3.12.0           # 设置全局版本
pyenv local 3.11.0            # 设置项目本地版本(写入 .python-version)
pyenv versions                # 列出所有已安装版本

六、uv(新一代极速工具)

uv 是 2024 年新兴的 Python 包管理工具,用 Rust 编写,速度比 pip 快 10-100 倍:

pip install uv
uv venv .venv                  # 创建虚拟环境(极速)
uv pip install requests        # 安装包(速度惊人)
uv pip sync requirements.txt  # 同步依赖

七、Docker 统一环境

对于生产部署,将 Python 应用容器化是最彻底的环境隔离方案,完全消除”环境差异”问题。配合多阶段构建可以得到精简的生产镜像。

总结

新项目推荐使用 Poetry,老项目继续用 venv + pip-tools,多版本场景加上 pyenv。关键原则:每个项目独立环境,锁定依赖版本,将环境配置纳入版本控制。

发表评论