当前位置: 首页 > news >正文

pipreqs:快速准确生成当前项目的requirements.txt,还有和freeze的对比

大家好,这里是程序员晚枫。

今天给大家推荐一个快速生成requirements.txt的小工具:pipreqs

什么是requirements.txt?

我们在开发Python项目的时候,需要用到requirements.txt来管理项目中使用的第三方库。

当我们把项目部署到一个没有第三方库的新环境,我们可以通过pip install -r requirements.txt来重新下载这些第三方库。

例如下面这个就是python-officerequirements.txt内容。

alive_progress==3.1.5
auto_mix_prep==0.2.0
Faker==25.2.0
moviepy==1.0.3
numpy==1.26.4
openpyxl==3.1.2
pandas==2.2.2
pdf2image==1.17.0
Pillow==10.3.0
pocode==0.0.3
poemail==0.0.3
pypandoc==1.13
PyPDF2==3.0.1
PyQt5==5.15.10
pytest==8.2.1
pywifi==1.1.12
pywin32==306
qt_material==2.14
reportlab==4.2.0
Requests==2.32.2
search4file==0.1.15
setuptools==69.0.2
tqdm==4.66.4
typer==0.12.3
wftools==0.0.9
xlrd==1.2.0
xlwt==1.3.0

如何生成requirements.txt?

常见的工具有:pipreqspip freeze 两种,它们在Python项目中用于管理依赖关系,但它们的用途和工作方式有所不同。

简单来说:

  • 生成当前项目的requirements.txt,用pipreqs
  • 生成当前环境的requirements.txt,用pip freeze

以下是它们的详细比较:

pipreqs

  • 用途pipreqs 是一个从项目代码中自动生成 requirements.txt 文件的工具。它分析项目中的Python文件,找出导入的模块,并生成一个包含这些模块及其对应版本的列表。
  • 工作方式pipreqs 通过扫描项目目录中的Python文件,识别出项目实际使用的库,然后生成一个 requirements.txt 文件,这个文件只包含项目代码中用到的库。
  • 优点
    • 只包含项目实际使用的库,避免包含不必要的依赖。
    • 可以忽略某些目录或文件,提高生成依赖列表的精确度。
    • 支持Jupyter Notebook,能够识别Notebook中的依赖。
  • 缺点
    • 需要手动运行,不会自动更新 requirements.txt 文件。
    • 可能不会识别出所有间接依赖。

pip freeze

  • 用途pip freeze 是一个列出当前环境中所有已安装的Python包及其确切版本的命令。
  • 工作方式pip freeze 会列出当前虚拟环境中安装的所有包,包括那些不是由项目直接依赖的包(例如,某些包的依赖)。
  • 优点
    • 快速列出当前环境中所有已安装的包。
    • 可以用于确保在不同环境中重现相同的环境配置。
  • 缺点
    • 包含所有环境包,可能会包含项目不需要的依赖。
    • 不能识别项目中未使用的包。

总结

  • 项目依赖管理:如果你需要一个精确的项目依赖列表,只包含项目实际使用的库,pipreqs 是更好的选择。
  • 环境复制:如果你需要复制整个Python环境,包括所有包及其版本,pip freeze 是更合适的工具。
  • 自动化与手动pipreqs 需要手动运行以生成依赖列表,而 pip freeze 只需在环境中运行即可列出所有包。

总的来说,pipreqs 更适合用于项目开发阶段,生成精确的依赖列表,而 pip freeze 更适合用于环境管理,确保环境的一致性。

大家在阅读过程中有任何问题,或者觉得有收获的话,欢迎点赞、评论和收藏。

http://www.lryc.cn/news/480173.html

相关文章:

  • Spark 中的 RDD 分区的设定规则与高阶函数、Lambda 表达式详解
  • redis十大数据类型
  • 国内AI工具复现GPTs效果详解
  • 【学习笔记】SAP ABAP——OPEN SQL(一)【INTO语句】
  • vscode使用之vscode-server离线安装
  • 字符编码和字符集
  • 【WRF理论第七期】WPS预处理
  • Flutter鸿蒙next中的按钮封装:自定义样式与交互
  • 代码随想录算法训练营Day57 | 卡玛网 101.孤岛的总面积、卡玛网 102.沉没孤岛、卡玛网 103. 水流问题、卡玛网 104.建造最大岛屿
  • 美团代付微信小程序系统 read.php 任意文件读取漏洞复现
  • Windows安装tensorflow的GPU版本
  • 2021-04-22 51单片机玩转点阵
  • lua入门教程:数字
  • [CKS] K8S ServiceAccount Set Up
  • QML:Menu详细使用方法
  • 时间复杂度和空间复杂度 part2
  • 【电机控制器】STC8H1K芯片——UART串口通信
  • STM32移植RT-Thread---时钟管理
  • Jasypt 实现 yml 配置加密
  • uniapp—android原生插件开发(2原生插件开发)
  • NLP之ASR之moonshine:moonshine的简介、安装和使用方法、案例应用之详细攻略
  • albert模型实现微信公众号虚假新闻分类
  • OceanBase 应用实践:如何处理数据空洞,降低存储空间
  • 计算机的错误计算(一百四十八)
  • MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解
  • SLM401A系列42V商业照明线性恒流芯片 线性照明调光在LED模组及灯带智能球泡灯上应用
  • 京东零售推荐系统可解释能力详解
  • 蓝桥杯 懒洋洋字符串--字符串读入
  • SDL打开YUV视频
  • 微服务架构面试内容整理-Archaius