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

 更新时间:2026年04月27日 09:23:19   作者:冷炫風刃  
本文主要介绍了Python中Pipreqs自动生成项目依赖清单的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

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

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

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

  • 适用场景:新项目初始化、交接给他人、准备 Docker 构建、提交前自查依赖
  • 不适用场景:想导出包括 pytest、black 这类纯开发依赖——pipreqs 默认忽略它们(需额外参数)
  • 注意:它不解析 setup.py 或 pyproject.toml,只看 Python 源文件里的 import 语句

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

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

pip install --upgrade pipreqs

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

pipreqs ./

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

  • --encoding=utf-8:遇到中文注释或路径时报 UnicodeDecodeError 时必加
  • --diff requirements.txt:对比现有文件,只输出新增依赖(适合增量更新)
  • --savepath ./reqs-dev.txt:指定输出路径,避免覆盖主文件

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

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

pipreqs ./src ./apps --force

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

  • 常见坑:Django 项目里 INSTALLED_APPS 列表中的第三方 app(如 'django-crispy-forms')不会被自动识别,必须人工核对添加
  • 若用 setuptools 的 entry_points 或插件机制,pipreqs 也无能为力
  • 建议搭配 grep -r "import\|from.*import" . --include="*.py" 快速扫一遍可疑模块名

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

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

  • import requests as req → 能识别 requests
  • import mypkg.utils → 只认 mypkg,不会深挖 utils 依赖的其他包
  • from . import config 或 from ..models import User → 相对导入只影响模块查找,不引入新第三方包,没问题
  • try: import ujson except ImportError: import json → ujson 会被识别,即使实际运行走的是 json

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

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

相关文章

  • python实现机器人卡牌

    python实现机器人卡牌

    这篇文章主要为大家详细介绍了python实现机器人卡牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python导出依赖的五种方法

    Python导出依赖的五种方法

    本文主要介绍了Python导出依赖的五种方法,包括使用pip freeze、pipreqs、poetry、pip-tools和conda,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Python中kivy库的使用教程详解

    Python中kivy库的使用教程详解

    Kivy是一个开源Python框架,用于构建具有创意和多点触控功能的用户界面(UI)应用程序,本文主要为大家介绍了一下Kivy的具体使用,需要的可以参考下
    2024-01-01
  • 在python里面运用多继承方法详解

    在python里面运用多继承方法详解

    在本篇文章中小编给各位分享的是关于在python里面运用多继承方法以及知识点总结,有兴趣的朋友们可以学习下。
    2019-07-07
  • Flask中sqlalchemy模块的实例用法

    Flask中sqlalchemy模块的实例用法

    在本篇文章里小编给大家整理了关于Flask中sqlalchemy模块的实例用法,需要的朋友们可以学习下。
    2020-08-08
  • Tensorflow、Keras与Python版本兼容性完全解析

    Tensorflow、Keras与Python版本兼容性完全解析

    在深度学习的开发过程中,TensorFlow和Keras作为最流行的深度学习框架,已经成为了众多开发者和研究人员的首选,这篇文章主要介绍了Tensorflow、Keras与Python版本兼容性的相关资料,需要的朋友可以参考下
    2025-11-11
  • php使用递归与迭代实现快速排序示例

    php使用递归与迭代实现快速排序示例

    这篇文章主要介绍了php使用递归与迭代实现快速排序的示例,大家参考使用吧
    2014-01-01
  • Python2和3字符编码的区别知识点整理

    Python2和3字符编码的区别知识点整理

    在本篇文章中小编给各位分享的是关于Python2和3字符编码的区别知识点,有需要的朋友们可以学习下。
    2019-08-08
  • 简单谈谈Python的pycurl模块

    简单谈谈Python的pycurl模块

    PycURl是一个C语言写的libcurl的python绑定库。libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库。它的功能很强大,PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂的接口。
    2018-04-04
  • 用Python解决计数原理问题的方法

    用Python解决计数原理问题的方法

    计数原理是数学中的重要研究对象之一,分类加法计数原理、分步乘法计数原理是解决计数问题的最基本、最重要的方法,也称为基本计数原理,它们为解决很多实际问题提供了思想和工具。本文教大家怎么用Python解决在数学中遇到的计数原理问题。
    2016-08-08

最新评论