pipreqs通过扫描项目python文件中的import语句自动生成精准requirements.txt,比pip freeze更贴合真实依赖;需先pip install pipreqs,在项目根目录运行pipreqs ./ --force,支持--exclude、--savepath等参数应对复杂场景。

直接用 pipreqs 扫描项目 Python 文件,自动提取实际 import 的第三方包,生成精准的 requirements.txt,比 pip freeze 更干净、更贴合项目真实依赖。
安装 pipreqs 工具
它不是 Python 内置工具,需单独安装:
pip install pipreqs
建议在项目虚拟环境中安装,避免权限或环境干扰。
生成 requirements.txt(基础用法)
进入项目根目录(即包含 .py 文件的目录),运行:
pipreqs ./
它会递归扫描所有 .py 文件,解析 import 和 from ... import 语句,只列出真正被引用的第三方包(忽略标准库和本地模块),并写入当前目录下的 requirements.txt。
常见情况处理:
- 若提示
File exists(文件已存在),加--force覆盖:pipreqs ./ --force - 若项目含子目录但不想扫描(如
tests/或migrations/),用--exclude排除:pipreqs ./ --exclude tests/,migrations/ - 若想指定输出路径(如放到
deploy/下),用--savepath:pipreqs ./ --savepath deploy/requirements.txt
识别失败?检查 import 写法和环境
pipreqs 仅靠静态分析,以下情况会导致漏识别:
-
动态导入:如
__import__(xxx)、importlib.import_module()不会被捕获 -
字符串形式的包名:如
requests_package = "requests"+importlib.import_module(requests_package),无法推断 -
未安装的包别名:如
import tensorflow as tf,但本地没装tensorflow,pipreqs可能跳过(因无法解析别名映射) -
条件 import:写在
if False:或异常处理块中,部分版本可能忽略
遇到漏包,可手动补全,或结合 pip freeze | grep -i xxx 辅助确认。
配合 CI/CD 或日常维护的小技巧
把生成依赖作为开发流程一环,提升可复现性:
- 加到
Makefile中:make reqs对应pipreqs ./ --force --encoding=utf8 - Git 提交前校验:
pipreqs ./ --diff requirements.txt可对比差异,提醒是否遗漏更新 - CI 脚本中加入:
pipreqs ./ --savepath /tmp/reqs.txt && cmp -s requirements.txt /tmp/reqs.txt || (echo "requirements.txt out of date" && exit 1),确保清单始终同步
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











