4. 依赖清单 requirements.txt
这是什么:requirements.txt = 记录本项目装了哪些包、什么版本的清单文件,一行一个 包名==版本号。
为什么用:环境本身是个文件夹,但不能发给同事、不能传给服务器。有了这份清单,别人按它一装,就得到和你一模一样的环境。
如何用:本章先用 pip freeze 把当前环境导出成清单,再在另一台机器上 pip install -r 一键复现出来。
4.1 导出:freeze
(.venv) pip freeze > requirements.txt
打开文件你会看到:
blinker==1.9.0
click==8.1.8
Flask==3.1.0
...
一行一条 包名==精确版本——这就是当前环境的完整快照。连同 Flask 的间接依赖一起,所以拿到清单的人装出来和你一模一样。
4.2 复现:install -r
在另一个项目(或另一台电脑)里重复地球另一端的世界:
python -m venv .venv
# 激活(第二章命令)
(.venv) pip install -r requirements.txt
几分钟后,.venv 和清单作者的环境完全一致。「我这里能跑」不再是玄学——是可复现的工程事实。
4.3 不同写法的差别
| 写法 | 含义 |
|---|---|
Flask==3.1.0 |
锁定精确版本(freeze 生成的默认) |
Flask>=3.0 |
最低版本,可能装到更新的 |
Flask~=3.1 |
允许 3.x 补丁更新 |
实践建议:项目交给别人时用 == 锁死(freeze 产物),自己写库给别用时用 >= 放宽兼容。
4.4 .gitignore:环境文件不进版本库
这是 Git 教程 2.4 危险名单里 Python 的那条:
.venv/
__pycache__/
*.pyc
.env
.venv 体积大(动辄几十上百 MB)、内容可由 requirements.txt 精确重建——它没有理由进 Git。清单进仓库,环境用清单造,这是 Python 项目的黄金分工。
4.5 什么时候更新清单
三个时机:装了新包、升级了版本、删除了包。一句话:环境一变,freeze 重打。
# 装/删/更新之后
(.venv) pip freeze > requirements.txt
团队习惯:requirements.txt 的变更要单独成一条 commit(「本次加了 boto3」),让依赖演进有一部清晰历史。
4.6 动手改
- 给你的
.venv导出 requirements.txt,数数有多少行(含间接依赖) - 在项目里装
click,重打清单,对比 diff 看变化 - 建第二个项目 + 新环境,用
install -r复现第一个项目
4.7 小结
pip freeze > requirements.txt导出,pip install -r复现==锁死版本是跨机一致的关键.venv不进 Git,清单进 Git——快照式协作
下一章:多项目隔离与日常切换 🐸