生成 Python 项目requirements的最小列表

Python项目中的requirements文件

requirements.txt的格式

在Python项目中,通常会包含一个 requirements.txt 文件,其中列出了项目运行所需的Python库及其版本信息。该文件用于部署Python项目的运行环境,并管理项目的依赖包,以确保代码能够在新部署的Python环境中正常运行。

requirements.txt 文件的每一行都包含一个库的名称和版本号信息(可选),支持的格式如下:

  • librosa:这行没有指定版本号,只指定了库的名称。
  • numpy==1.19.2:这行指定了库的名称为numpy,并且要求精确的版本号为1.19.2。
  • pandas>=1.1.3:这行指定了库的名称为pandas,并且要求最低版本号为1.1.3,包括该版本和更高版本。
  • scikit-learn~=0.23.2:这行指定了库的名称为scikit-learn,并且要求兼容的最低版本号为0.23.2,包括该版本和具有相同主版本号的更高版本。

使用requirements.txt文件安装依赖库

当你有了requirements.txt文件,你可以使用pip(Python的包管理器)来安装所有的依赖。你只需要运行以下命令:

pip install -r requirements.txt

这将会自动安装文件中列出的所有包及其指定版本。

创建requirements.txt文件

创建requirements.txt文件的一种常见方式是使用pip freeze命令,这个命令可以列出当前Python环境中安装的所有包及其版本。你可以把这个列表重定向到一个文件中,创建你的requirements.txt文件,如下所示:

pip freeze > requirements.txt

这样,requirements.txt文件就会包含你当前环境中所有的Python包及其精确版本。

Python项目依赖的包?最小+精准

使用pip freeze命令只会列出当前Python环境中安装的包,与Python项目本身无关。

以下是关于pip freeze的几点说明:

  • pip freeze只会分析当前Python环境中安装的库。
  • pip freeze根本不会解析Python项目中的任何Python源码。
  • 开发人员的Python环境通常只会运行他们负责的Python项目代码,因此从这个环境得到的requirements.txt可能并不包含所有的依赖包。
  • 运行Full Test的Python环境可以调用项目中的所有代码,但从这个环境得到的requirements.txt不一定是最小的依赖包列表,通常会包含许多不必要的依赖包。

为了获得Python项目的精确依赖包列表,可以使用pipreqs工具。pipreqs能够扫描项目,找出项目实际依赖的所有包,并生成requirements.txt文件。

安装pipreqs

  • 使用以下命令安装:pip install pipreqs
  • 如果使用conda环境,可以使用以下命令安装:conda install pipreqs

pipreqs 的命令行参数

pipreqs - Generate pip requirements.txt file based on imports
Usage:pipreqs [options] [<path>]
Arguments:<path>                The path to the directory containing the applicationfiles for which a requirements file should begenerated (defaults to the current workingdirectory).
Options:--use-local           Use ONLY local package info instead of querying PyPI.--pypi-server <url>   Use custom PyPi server.--proxy <url>         Use Proxy, parameter will be passed to requestslibrary. You can also just set the environmentsparameter in your terminal:$ export HTTP_PROXY="http://10.10.1.10:3128"$ export HTTPS_PROXY="https://10.10.1.10:1080"--debug               Print debug information--ignore <dirs>...    Ignore extra directories, each separated by a comma--no-follow-links     Do not follow symbolic links in the project--encoding <charset>  Use encoding parameter for file open--savepath <file>     Save the list of requirements in the given file--print               Output the list of requirements in the standardoutput--force               Overwrite existing requirements.txt--diff <file>         Compare modules in requirements.txt to projectimports--clean <file>        Clean up requirements.txt by removing modulesthat are not imported in project--mode <scheme>       Enables dynamic versioning with <compat>,<gt> or <non-pin> schemes.<compat> | e.g. Flask~=1.1.2<gt>     | e.g. Flask>=1.1.2<no-pin> | e.g. Flask

以下是 pipreqs 命令行参数的详细说明:

  • <path>: 包含应用程序文件的目录的路径,用于生成 requirements.txt 文件(默认为当前工作目录)。
  • -use-local: 仅使用已经安装的本地包信息,而不查询 PyPI。
  • -pypi-server <url>: 使用自定义的 PyPi 服务器。
  • -proxy <url>: 使用代理,该参数将传递给 requests 库。你也可以在终端中设置环境变量:
    • $ export HTTP_PROXY="<http://10.10.1.10:3128>"
    • $ export HTTPS_PROXY="<https://10.10.1.10:1080>"
  • -debug: 打印调试信息。
  • -ignore <dirs>...: 忽略额外的目录,每个目录以逗号分隔。
  • -no-follow-links: 不要跟随项目中的符号链接。
  • -encoding <charset>: 使用指定的字符编码打开文件。
  • -savepath <file>: 将依赖列表保存到指定的文件中。
  • -print: 将依赖列表输出到标准输出。
  • -force: 覆盖现有的 requirements.txt 文件。
  • -diff <file>: 将 requirements.txt 中的模块与项目导入的模块进行比较。
  • -clean <file>: 清理 requirements.txt,删除项目中未导入的模块。
  • -mode <scheme>: 启用动态版本管理,可使用 <compat><gt><non-pin> 方案。
    • <compat>: 例如 Flask~=1.1.2
    • <gt>: 例如 Flask>=1.1.2
    • <no-pin>: 例如 Flask

pipreqs 的例子

以下是使用 pipreqs 生成 requirements.txt 文件的几个示例:

  • 生成当前目录下Python项目的requirements.txt文件,并覆盖现有的requirements.txt文件:

    pipreqs . --force
    
  • 生成指定目录下Python项目的requirements.txt文件,并将结果保存到指定文件中:

    pipreqs /path/to/project --savepath custom_requirements.txt
    
  • 生成当前目录下Python项目的requirements.txt文件,并将结果输出到标准输出:

    pipreqs . --print
    

pipreqspip freeze 生成requirements.txt 的比较

  • pipreqs工具与pip freeze命令都可以用来生成requirements.txt文件,但它们之间有一些区别。

    • pip freeze命令只会列出当前Python环境中安装的包,并不会解析项目中的任何Python源码。这意味着从pip freeze生成的requirements.txt文件可能不包含项目的所有依赖包,并且可能包含一些不必要的依赖包。
    • pipreqs工具能够扫描项目中的Python源码,找出项目实际依赖的所有包,并生成一个精确的requirements.txt文件。这样可以确保requirements.txt文件中只包含项目所需的最小依赖包列表。
    • pipreqs生成的依赖包列表可能会出现重复的项(这可能是pipreqs的一个bug)。扫描过程相对复杂,因此很难确定是否会出现bug。而pip freeze则是一个简单的安装文件扫描,不容易出现问题。
  • requirements.txt文件中的包名格式也有区别:

    • pipreqs:扫描Python源文件中的包名,包名中不同单词之间的分隔符是下划线“_”,例如“websocket_client”。pip freeze:输出的包名是Python安装包在PyPI(Python包索引)中的名称列表。许多包在PyPI中的名称都是以减号“``”分隔的,例如“websocket-client”。
    • pipreqs:扫描Python源文件中的包名,包名的大小写与源代码中的包名大小写格式一致,例如“Pillow”。pip freeze中的包名来自PyPI的信息,例如“pillow”。

👌🏻 无需担心
pip会忽略包名的大小写,并且可以自动处理下划线和减号的转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java set集合相关介绍和方法使用操作

在Java中&#xff0c;Set是一种不允许元素重复的集合&#xff0c;它是基于哈希表实现的。Set接口继承自Collection接口&#xff0c;常见的实现类有HashSet、LinkedHashSet和TreeSet。 HashSet是基于哈希表实现的Set&#xff0c;它不保证元素的顺序&#xff0c;存储和访问速度较…

Codeforces Round 923 (Div. 3)E. Klever Permutation 找规律,有共同区间

Problem - E - Codeforces 目录 Source of idea: 思路&#xff1a; 代码&#xff1a; 另一个up的找规律的解法&#xff1a; Source of idea: Codeforces Round 923(A-F题解) - 哔哩哔哩 (bilibili.com) 思路&#xff1a; 上面up分析的很好。两个相邻区间也就端点不一样&…

nginx限制网段访问

文章目录 nginx限制网段访问介绍:使用:示例:介绍网段:nginx限制网段访问 介绍: Nginx的deny和allow指令是由ngx_http_access_module模块提供, Nginx安装默认内置了该模块 使用: nginx访问控制模块: 想禁止哪个ip访问就加上deny IP, 想允许哪个ip访问就加上allow…

使用Pillow来生成简单的红包封面

Pillow库&#xff08;Python Imaging Library的后继&#xff09;是一个强大而灵活的图像处理库&#xff0c;适用于Python。Pillow 库&#xff08;有时也称 PIL 库&#xff09; 是 Python 图像处理的基础库&#xff0c;它是一个免费开源的第三方库&#xff0c;由一群 Python 社区…

List与数组相互转换

文章目录 将 List 转 数组List.toArra()Stream().toArray() 将 数组 转 ListLists.newArrayList()Stream.of() 将 List 转 数组 List.toArra() List<Integer> list Lists.newArrayList(1, 2, 3);// 无需转换类型 --> [1,2,3]Integer[] intArray list.toArray(new I…

掌握Python爬虫的四大组件之Handler(处理器)

源码分享 https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tabBB08J2 在构建高效的Python爬虫时&#xff0c;理解和应用日志组件是至关重要的。在前一章节中&#xff0c;我们探讨了Logger&#xff08;记录器&#xff09;的概念和基础用法。本章节&#xff0c;我们将聚焦于Logge…

2024年Java架构篇之设计模式

2024年Java实战面试题_java 5 年 面试-CSDN博客 1、单例模式

IAR报错:Error[Pa045]: function “halUartInit“ has no prototype

在IAR工程.c文件末尾添加一个自己的函数&#xff0c;出现了报错Error[Pa045]: function "halUartInit" has no prototype 意思是没有在开头添加函数声明&#xff0c;即void halUartInit(void); 这个问题我们在keil中不会遇到&#xff0c;这是因为IAR编译器规则的一…

已解决java.sql.SQLSyntaxErrorException: Unknown database异常的正确解决方法,亲测有效!!!

已解决java.sql.SQLSyntaxErrorException: Unknown database异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 报错问题解决思路解决方法交流 报错问题 java.sql.SQLSyntaxErrorException: Unknown database 解决思路 对于出现 “java.…

FPGA_vga显示

一 VGA 1.1 VGA VGA是视频图像阵列&#xff0c;是一种使用模拟信号进行视频传输的标准协议。 1.2 VGA接引脚定义 VGA分公母两种&#xff0c;RGB显示标准。 1.3 VGA显示器 VGA显示器采用图像扫描的方式进行图像显示&#xff0c;将构成图像的像素点&#xff0c;在行同步信号…

7机器人位姿的数学描述与坐标变

由上次刚体的空间转动直接切换为机器人相关术语。 1.机器人位姿的数学描述与坐标变换 1.1位姿描述 {B}相对于{A}的姿态描述用3x3矩阵表示为&#xff1a; 式中为三个单位正交主矢量&#xff0c;分别表示刚体坐标系{B}的三个坐标轴XBYBZB在参考系{A}中的方位&#xff0c;∠XBXA表…

leetcode(滑动窗口)483.找到字符中所有字母异位词(C++详细解释)DAY4

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&a…

vivado GATED_CLOCK、IOB、IO_BUFFER_TYPE、KEEP、KEEP_HIERARCHY、MARK_DEBUG

Vivado合成允许门控时钟的转换。要执行此转换&#xff0c;请使用&#xff1a; •Vivado IDE中的一个开关&#xff0c;指示工具尝试转换。 •GATED_CLOCK RTL属性或XDC属性&#xff0c;指示工具关于哪个信号在门控逻辑中是时钟。将此属性放置在作为时钟的信号或端口上。要控制…

ChatGPT 3.5与4.0:深入解析技术进步与性能提升的关键数据

大家好&#xff0c;欢迎来到我的博客&#xff01;今天我们将详细比较两个引人注目的ChatGPT版本——3.5和4.0&#xff0c;通过一些关键数据来深入解析它们之间的差异以及4.0版本的技术进步。 1. 模型规模与参数 ChatGPT 3.5&#xff1a; 参数数量&#xff1a;约1.7亿个模型层数…

后端创建订单

package com.java1234.entity;import io.jsonwebtoken.Claims;/*** jwt验证信息* author java1234_小锋* site www.java1234.com* company Java知识分享网* create 2019-08-13 上午 10:00*/ public class CheckResult {private int errCode;private boolean success;private Cl…

JUnit5单元测试框架提供的注解

目录 第一章、注释在类上的注解1.1&#xff09;JUnit5注释在类上的注解集成测试&#xff1a;SpringBootTest集成测试&#xff1a;ExtendWith(SpringExtension.class)单元测试&#xff1a;ExtendWith(MockitoExtension.class)切片测试:WebMvcTest和DataJpaTest<font colorred…

开源软件对技术以及行业发展的影响

开源软件和代码对技术发展和行业产生了广泛而深远的影响。以下是一些主要方面的深入分析&#xff1a; 1. 协作和共享&#xff1a; 技术发展&#xff1a; 开源项目提供了一个集体协作和共享的平台&#xff0c;吸引了全球各地的开发者共同参与。这种协同工作模式推动了技术的快…

OpencV入门讲解

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了丰富的功能&#xff0c;用于开发实时图像处理、视频分析、物体识别、机器学习等应用。以下是OpenCV入门的基本讲解&#xff1a; OpenCV的核心概…

Linux内核与驱动面试经典“小”问题集锦(5)

接前一篇文章&#xff1a;Linux内核与驱动面试经典“小”问题集锦&#xff08;4&#xff09; 问题6 问&#xff1a;mutex_lock和mutex_lock_interruptible的区别是什么&#xff1f; 备注&#xff1a;此问题也是笔者近期参加蔚来面试时遇到的一个问题。 答&#xff1a; 尽管…

前端JavaScript篇之数组的遍历方法有哪些?forEach和map方法有什么区别?

目录 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别&#xff1f;forEach()map()filter()for…ofevery() 和 some()find() 和 findIndex()reduce() 和 reduceRight()forEach和map方法有什么区别总结 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别…