python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Pipreqs自动生成依赖清单

Python中Pipreqs自动生成项目依赖清单的实现

作者:冷炫風刃

本文主要介绍了Python中Pipreqs自动生成项目依赖清单的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

pipreqs更靠谱因其仅扫描源码中实际import的包,避免混入未使用的全局包;而pip freeze导出全部已安装包,易导致部署失败或CI冲突。

pipreqs 生成 requirements.txt 为什么比 pip freeze 更靠谱

因为 pipreqs 只扫描项目源码中实际 import 的包,不会把全局环境里装了但没用到的包也塞进 requirements.txt。而 pip freeze 是照单全收当前环境所有已安装包,尤其在虚拟环境管理不严时,容易混入开发依赖、临时调试工具甚至系统级包。

常见错误现象:pip freeze > requirements.txt 导出后部署失败,报错说某个包根本没被项目引用;或者 CI 流水线因多余依赖冲突卡住。

安装和基础命令怎么跑起来

先确保没和旧版 pipreqs 冲突(老版本有路径 bug):

pip install --upgrade pipreqs

进到项目根目录(含 src/ 或 app.py 等源码的那层),执行:

pipreqs ./

它会自动扫描所有 .py 文件,生成 requirements.txt。如果提示 FileNotFoundError: No such file or directory: 'requirements.txt',说明文件已存在且被锁——删掉再试,或加 --force。

怎么让 pipreqs 扫描子目录和识别动态导入

默认情况下,pipreqs 只扫当前目录及直接子目录,遇到 src/mylib/ 或 apps/api/ 这类结构会漏掉。必须显式指定路径:

pipreqs ./src ./apps --force

但它无法识别字符串拼接式导入(如 __import__(f"{name}_plugin"))或 importlib.import_module() 动态加载——这类依赖得手动补进 requirements.txt。

生成结果不准?先检查 import 语句写法

pipreqs 解析的是字面量 import,不是运行时行为。所以这些写法会导致漏依赖:

真正容易被忽略的是条件导入 + 第三方包组合,比如 if sys.version_info >= (3, 9): from importlib import resources else: import importlib_resources as resources——pipreqs 会把两个都列进去,你得自己删掉不生效的那个。

到此这篇关于Python中Pipreqs自动生成项目依赖清单的实现的文章就介绍到这了,更多相关Python Pipreqs自动生成依赖清单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文