12. 虚拟环境和包
venv 隔离、激活/退出、pip 常用命令、requirements 冻结与恢复——对齐 node_modules,并补一行现代依赖管理提示。
12.1 为什么需要虚拟环境
| 痛点 | venv 解决 |
|---|---|
| 项目 A/B 依赖版本冲突 | 每项目独立 site-packages |
全局 pip install 弄脏系统 Python | 依赖装进 .venv |
| CI 复现 | 固定解释器版本 + 锁文件 |
# 进入仓库根目录后:
python --version # 先确认你要的 minor 版本
python -m venv .venv12.2 创建
python -m venv .venv旧命令
pyvenv已废弃;第三方virtualenv仍有场景,但对新手不必要。
12.3 激活
Windows(cmd / PowerShell)
.venv\Scripts\activatemacOS / Linux
source .venv/bin/activate成功时提示符前常出现 (.venv);此时 which python / where python 应指向 .venv。
12.4 退出
deactivate12.5 pip:安装与维护
python -m pip install -U pip
python -m pip install requests
python -m pip install "requests>=2.31,<3"
python -m pip uninstall requests
python -m pip list
python -m pip show requests始终用 python -m pip:避免 PATH 上的 pip.exe 指向另一只 Python。
12.6 锁定依赖:freeze 与恢复
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt局限:freeze 是「环境里装着啥」,不区分直接依赖 / 传递依赖。更严肃的做法:
# 只举例:把编译后的锁定文件交给 CI
python -m pip install pip-tools
# pip-compile requirements.in → 生成完整 pins(需自行查 pip-tools 文档)或直接采用 uv / poetry / pdm 等工具链。
12.7 可编辑安装(开发库时常用)
在包根目录(含 pyproject.toml 或 setup.cfg):
python -m pip install -e .这像「本地 npm link」:改源码立即影响当前环境,适合开发自研库。
12.8 前端对照表
| 概念 | Python | Node.js |
|---|---|---|
| 环境隔离 | venv | nvm + 每项目 node_modules |
| 包装器 | pip | npm / pnpm / yarn |
| 清单 | requirements.txt / pyproject.toml | package.json |
| 锁文件 | 工具生成(pip-tools、uv…) | package-lock.json 等 |
12.9 速记
- 先建 venv → 激活 → 再
pip install。 - 不要提交
.venv;提交依赖声明 / 锁文件。 - CI 固定 Python 版本矩阵(例如 3.11、3.12)。