主题
Python 环境与依赖管理
本文合并讲解 Python 的包管理(pip)与虚拟环境(venv / pip-tools / poetry / conda),帮助你隔离依赖、可复现地构建项目。
作者:yanshaodong
为什么需要隔离
不同项目可能依赖同一库的不同版本。全局安装会造成版本冲突,虚拟环境为每个项目提供独立的 site-packages,互不干扰。
pip 基础
pip 是 Python 的包管理器(Python 3.4+ 默认内置,安装时勾选 "Add Python to PATH")。
bash
# 安装 / 升级 / 卸载
pip install requests
pip install --upgrade requests
pip uninstall requests
# 查看已安装包
pip list注:
pip search因 PyPI API 调整多数版本已不可用,建议直接访问 https://pypi.org/ 搜索。
多版本 Python 用户可用 pyenv(跨平台)或 Anaconda(数据科学)切换。
标准库 venv
Python 3.3+ 内置,无需额外安装:
bash
# 创建环境
python -m venv .venv
# 激活(Windows)
.venv\Scripts\activate
# 激活(macOS / Linux)
source .venv/bin/activate
# 停用
deactivate激活后,python / pip 指向环境内解释器。建议把 .venv/ 加入 .gitignore。
依赖记录
bash
pip install requests fastapi
pip freeze > requirements.txt # 导出全部传递依赖
pip install -r requirements.txt # 他人安装pip freeze 锁定完整依赖树便于复现,但不区分直接/间接依赖。
pip-tools(可复现 + 分层)
bash
pip install pip-toolsrequirements.in(仅写直接依赖):
requests
fastapi编译为带哈希的锁定文件:
bash
pip-compile requirements.in # 生成 requirements.txt(含哈希)
pip-sync requirements.txt # 精确同步环境Poetry(现代化一体化)
poetry 同时管理依赖、虚拟环境与打包:
bash
pip install poetry
poetry init
poetry add fastapi
poetry add --group dev pytest
poetry install # 安装全部依赖(自动建环境)
poetry run python app.py
poetry shellpyproject.toml 示例:
toml
[tool.poetry]
name = "my-app"
version = "0.1.0"
description = ""
authors = ["yanshaodong"]
[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.110.0"
[tool.poetry.group.dev.dependencies]
pytest = "^8.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"poetry.lock 提供精确锁定,适合团队与发布。
Conda(数据科学场景)
适合需要非 Python 依赖(如 CUDA、R)的场景:
bash
conda create -n myenv python=3.10
conda activate myenv
conda install numpy pandasconda 包更全但对纯 Python 项目偏重,建议数据科学 / AI 场景使用。
选型建议
| 场景 | 推荐 |
|---|---|
| 简单脚本 / 学习 | venv + requirements.txt |
| 需要可复现构建 | pip-tools |
| 应用开发 / 发布 | poetry |
| 数据科学 / AI(含系统依赖) | conda / mamba |
小结
- 永远不要污染全局环境,每个项目独立环境。
pip负责装包,venv/poetry负责隔离与锁定。- 锁定文件(
requirements.txt/poetry.lock)应提交到版本库。 - 数据科学多系统依赖场景优先
conda。