Python 依赖管理:requirements.txt 与 Pipfile
在 Python 项目中,准确记录和安装所需第三方库(即“依赖”)是保证代码在不同环境(如你的电脑、同事的电脑、服务器)上行为一致的关键。requirements.txt 和 Pipfile 是两种主流方案,它们目标相同,但实现方式和能力有显著差异。
一、快速上手:用 requirements.txt 管理依赖
requirements.txt 是最传统、最广泛支持的方式,本质是一个纯文本文件,每行列出一个包及其版本。
创建 requirements.txt 文件
-
进入你的项目根目录(即包含主代码的文件夹)。
-
运行命令生成当前环境的所有依赖列表:
pip freeze > requirements.txt这会把当前 Python 环境中所有已安装的包及其精确版本号写入
requirements.txt。 -
安装他人提供的
requirements.txt中的依赖:pip install -r requirements.txt
手动编辑 requirements.txt
你可以直接用文本编辑器打开 requirements.txt,按需增删。常见写法:
requests==2.31.0:指定精确版本。flask>=2.0,<3.0:指定版本范围。numpy:不指定版本(不推荐,可能导致环境不一致)。
这种方式简单直接,几乎所有 Python 部署平台(如 Heroku、Docker)都原生支持。
二、进阶选择:用 Pipfile 与 Pipenv 管理依赖
Pipfile 是新一代依赖管理方案,由 pipenv 工具驱动,解决了 requirements.txt 的多个痛点:自动隔离虚拟环境、区分开发与生产依赖、使用更安全的 Pipfile.lock 锁定依赖树。
安装 Pipenv
安装 pipenv 工具(只需一次):
pip install pipenv
初始化项目
-
进入你的项目根目录。
-
运行以下命令初始化
Pipfile:pipenv install如果目录下没有
Pipfile,此命令会自动创建一个,并生成一个专属的虚拟环境。 -
安装生产依赖(如
flask):pipenv install flask这会将
flask写入Pipfile的[packages]区块,并更新Pipfile.lock。 -
安装开发依赖(如测试工具
pytest):pipenv install pytest --dev这会将
pytest写入[dev-packages]区块,仅用于开发,部署时不会安装。
使用依赖环境
-
激活虚拟环境以运行代码:
pipenv shell此后所有
python和pip命令都在隔离环境中执行。 -
直接运行脚本而不进入 shell:
pipenv run python app.py -
从现有 requirements.txt 导入依赖:
pipenv install -r requirements.txt
三、核心区别:何时用哪个?
虽然两者都能管理依赖,但设计哲学和适用场景不同。关键差异如下:
| 特性 | requirements.txt |
Pipfile (via Pipenv) |
|---|---|---|
| 文件格式 | 纯文本,每行一个包 | TOML 格式,结构化配置 |
| 虚拟环境 | 需手动创建 (python -m venv) |
自动创建并管理 |
| 依赖分类 | 无法区分开发/生产依赖 | 明确分 [packages] 和 [dev-packages] |
| 依赖锁定 | 无内置锁定机制(需额外生成) | 自动生成 Pipfile.lock,锁定完整依赖树 |
| 可重复性 | 较弱(除非手动维护精确版本) | 强(Pipfile.lock 确保每次安装完全一致) |
| 学习成本 | 极低,几乎零门槛 | 略高,需理解新工具链 |
| 生态支持 | 全平台通用 | 部分旧系统或 CI/CD 流程需额外配置 |
选择建议:
- 选
requirements.txt:如果你需要最大兼容性(如部署到老旧平台)、项目简单、或团队已习惯该流程。 - 选
Pipfile:如果你希望自动化虚拟环境、明确分离开发/生产依赖、追求更强的环境一致性,且能接受引入新工具。
四、迁移与共存策略
你不必非此即彼。很多项目同时提供两种文件以兼顾不同用户。
从 requirements.txt 迁移到 Pipfile
- 确保项目根目录有
requirements.txt。 - 运行:
pipenv install -r requirements.txt - 手动检查
Pipfile,将明显属于开发用途的包(如pytest,black)移动到[dev-packages]区块。 - 删除
requirements.txt(可选),或保留供不使用pipenv的用户使用。
从 Pipfile 生成 requirements.txt
如果你需要为不支持 Pipfile 的平台提供依赖列表:
- 确保
Pipfile.lock是最新的(运行过pipenv install)。 - 运行命令导出生产依赖:
pipenv requirements > requirements.txt或导出全部依赖(含开发依赖):
pipenv requirements --dev > requirements.txt
无论采用哪种方式,始终将依赖文件纳入版本控制(如 Git),这是团队协作和持续集成的基础。

暂无评论,快来抢沙发吧!