Python 环境与包管理
Python 的"环境地狱"——装错地方、版本冲突、依赖打架——根源只有一个:所有项目共用一个全局解释器。解法是每个项目一个虚拟环境。本文覆盖 venv / pip / uv 全流程。
虚拟环境 venv:标准答案
# ---- 创建与激活 ----
python -m venv .venv # 在项目根目录建 .venv(约定俗成的名字)
source .venv/bin/activate # Linux/macOS 激活
.venv\Scripts\activate # Windows(PowerShell: activate.ps1)
# 激活后提示符带 (.venv),python/pip 都指向虚拟环境内
which python # .../.venv/bin/python
python --version
deactivate # 退出虚拟环境
不激活也能用
直接用绝对路径的 python/pip 就是虚拟环境内的:.venv/bin/pip install requests。CI 和脚本里常这么写,省得管激活状态。
pip 常用操作
pip install requests # 装
pip install "requests>=2.31,<3" # 版本约束
pip install -r requirements.txt # 按清单装
pip install -e . # 以可编辑模式装当前项目(改代码即时生效)
pip list / pip show requests # 已装清单 / 某包详情
pip freeze > requirements.txt # 导出当前环境(精确版本==)
pip install --upgrade requests
pip uninstall requests
requirements 的两个版本
# requirements.txt —— 应用级:锁死版本,可复现部署
requests==2.32.3
numpy==2.1.0
# requirements.in —— 库开发/自己用:只写直接依赖和宽松约束
requests>=2.31
numpy
国内加速(清华源):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
# 永久配置:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
uv:2026 年的新默认
uvc(Rust 写的 pip/venv 替代品)快 10~100 倍,一条工具链管到底,新项目值得直接上:
# 安装 uv(Windows: powershell 脚本;或 pip install uv)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv # 创建 .venv(比 python -m venv 快得多)
uv pip install requests # 兼容 pip 接口
uv pip install -r requirements.txt
# ---- 项目模式(pyproject.toml 驱动,推荐)----
uv init myproject && cd myproject
uv add requests # 添加依赖并写入 pyproject.toml + uv.lock
uv add --dev pytest # 开发依赖分组
uv run python main.py # 自动确保环境就绪后运行
uv sync # 按 lockfile 精确还原环境(CI/同事接手)
uv python install 3.12 # 连 Python 解释器都能帮你装
| 任务 | 老办法 | uv |
|---|---|---|
| 建环境 | python -m venv .venv + activate |
uv venv / uv sync |
| 装包 | pip install |
uv add / uv pip install |
| 锁版本 | pip freeze(手维护) |
uv.lock 自动生成与校验 |
| 多版本 Python | pyenv(要编译) | uv python install 3.12 |
| 跑一次性脚本 | 手动装依赖 | uv run --with requests script.py |
版本管理速览
python --version # 当前的
python3.12 -m venv .venv # 用指定版本建环境(多版本共存时)
# Windows 官方 launcher:py 列表切换
py -0 # 列出已装版本
py -3.12 -m venv .venv
# pyproject.toml 里声明要求(uv / pip 均识别)
# requires-python = ">=3.11"
pyproject.toml:现代项目的标准入口
[project]
name = "myproject"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"requests>=2.31",
]
[project.optional-dependencies] # 额外分组
dev = ["pytest", "ruff"]
它取代了 setup.py + requirements.txt + 各种配置文件:构建配置、依赖声明、工具配置(ruff/pytest)统一在一个 TOML 里。库发布用 uv build / python -m build 产 wheel。
常见坑
| 坑 | 说明 |
|---|---|
| 装到了全局 | 没激活/用错 pip。排查:pip -V 看路径里有没有 .venv |
python 指向错版本 |
Windows 用 py -3.12 精确指定;Linux 用 python3 |
直接 pip install 到系统 Python |
新版 Ubuntu 会直接拒绝(PEP 668,externally-managed)——本来就该用 venv |
| 忘记导出依赖 | 项目能跑但别人装不出来;uv add 的项目模式天然解决 |
| git 提交了 .venv | .gitignore 加 .venv/(虚拟环境不可迁移,靠 requirements/lock 还原) |
相关:写代码的惯用法见Python 惯用法速查;在容器里固化环境见Docker 基础。