🐸 青蛙编程网
首页 / Python / 虚拟环境 venv / 4. requirements.txt

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 动手改

  1. 给你的 .venv 导出 requirements.txt,数数有多少行(含间接依赖)
  2. 在项目里装 click,重打清单,对比 diff 看变化
  3. 建第二个项目 + 新环境,用 install -r 复现第一个项目

4.7 小结

  • pip freeze > requirements.txt 导出,pip install -r 复现
  • == 锁死版本是跨机一致的关键
  • .venv 不进 Git,清单进 Git——快照式协作

下一章:多项目隔离与日常切换 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。