Python项目依赖项管理的秘诀:requirements.txt文件

news2024/11/27 6:21:43

一、背景

公司里面很多时候我们开发的Python项目都不只是我们一个人使用,而是整体团队使用。Python项目需要在别人的电脑环境中运行,则需要别人的电脑环境中也要安装上我们项目需要的python库。那么项目中到底用到了哪些Python库,每个库具体是用哪个版本,一个一个手动记载肯定是非常麻烦,而且容易遗漏,另外别人拿着我们的项目去一个一个手动安装库也很不方便。

因为为了解决以上的问题,requirements.txt应运而生,只需要一个requirements.txt文件,记录项目使用了哪些库哪个版本,别人用我们的项目的时候也可以一键安装项目所需要的所有库。

二、什么是 requirements.txt 文件?

requirements.txt 文件是一个文本文件,用于列出你的Python项目所依赖的软件包及其版本。该文件通常位于项目的根目录中,并且由开发者手动维护。在该文件中,每行列出一个依赖项,格式为 package_name==version,其中 package_name 是软件包的名称,version 是软件包的版本号。例如:

requests==2.25.1
numpy==1.19.3
pandas==1.2.0

三、生成requirements.txt的两种方式

1、使用pip freeze命令

直接使用pip freeze命令生成requirements.txt文件:

pip freeze > requirements.txt

但是这种方式只适合你的项目是使用单虚拟环境的情况,因为该方式会将环境中安装的所有依赖库都记录在requirements.txt文件中,即使当前项目没有用到这个库:
在这里插入图片描述
如果项目是使用单虚拟环境的情况,由于单虚拟环境中只安装了本项目需要的库,因此用上面这个命令是可以的。

2、使用pipreqs命令

pipreqs也是一个库,先安装它:

pip install pipreqs

需要离线安装的可以在这里下载: https://github.com/bndr/pipreqs

然后使用下面的命令生成requirements.txt文件:

pipreqs ./ --encoding=utf8 --force

命令解释:

  • ./表示在当前目录下生成requirements.txt文件
  • encoding=utf8 为使用utf8编码,不然可能会报UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xae in position 406: illegal multibyte sequence 的错误。
  • force 强制执行,表示如果生成目录下的requirements.txt存在时,则覆盖生成新的。

可以看见requirements.txt文件中只有本次项目用到的依赖包了:
在这里插入图片描述

四、使用requirements.txt文件

别人的电脑上在Pycharm中可以依赖requirements.txt文件,一键逐个安装项目所有的依赖包。使用以下命令:

pip install -r requirements.txt

如果安装时报错:ERROR: Could not install packages due to an OSError: [WinError 5]:xxxx, Consider using the --user option or check the permissions
在这里插入图片描述
则根据错误提示,直接在命令中加入–user即可解决问题:

 pip install --user -r requirements.txt

五、结论

在本文中,我们介绍了 requirements.txt 文件的作用、格式和如何使用它来管理你的依赖项。使用 requirements.txt 文件,可以确保你的项目在不同的开发环境中运行一致,并且可以简化项目的部署和维护。希望这篇文章对你有所帮助,并且可以更好地管理你的 Python 项目。

=================================================================================================
以上就是本次的全部内容,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~

欢迎关注下方我的公众号:程序员杨叔,各类文章、框架Demo源码都会在上面发布,持续分享各类测试开发知识干货,你的支持就是作者更新最大的动力。

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

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

相关文章

12.matlab数据分析——多项式的建立 (matlab程序)

1.简述 多项式及其建立 在运算中我们经常接触到的就是所谓的多项式,比如很常见的一个多项式: 这里我们就说这是一个x的多项式,最高次是2次,常数项是3,二次项的系数是1,一次项的系数是2,相信这些…

流程管理是什么?“流程管理”到底管什么?

流程管理(process management),是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法。 任正非曾在一次访谈时说到: “权力要放进流程中,流程才有权力&#xff0c…

【Django学习】(十四)自定义action_router

之前我们的视图类可以继承GenericViewSet或者ModelViewSet,我们不用再自定义通用的action方法,但是有时候我们需要自定义action,我们该如何设计呢? 自定义action 1、手写视图逻辑 1.1、先在视图集里自定义action方法&#xff0…

LeetCode 790. 多米诺和托米诺平铺 - 二维空间的动态规划

多米诺和托米诺平铺 中等 304 相关企业 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。 给定整数 n ,返回可以平铺 2 x n 的面板的方法的数量。返回对 109 7 取模 的值。 平铺指的是每个…

icp许可证 办理流程(icp资质申请条件)

icp许可证 办理流程(icp资质申请条件)是什么? ICP经营许可证是可以线上无忧办理的,包下证,流程也很简单,只需要你提供企业营业执照、法人身份证这些基础材料就可以。加急10-20工作日拿证,普通20-60工作日拿证。 在了解…

使用Vue的插件clipboard使用复制功能

1.安装clipboard插件 npm install clipboard 2.使用 clipboard <template><div style"margin-right: auto;margin-left: auto; 800px"><el-table :data"list"><el-table-column label"搜索引擎" prop"name"&g…

Python迭代器与生成器

文章目录 迭代器创建迭代器StopIteration 生成器 迭代器 访问集合元素的一种方式&#xff0c;可以记住遍历的位置的对象 从集合的第一个元素开始&#xff0c;直到所有的元素被访问完结束&#xff0c;迭代器只能往前不会后退 iter()&#xff0c;创建迭代器对象 iter(object, …

docker中配置mysql主从分离

目录 前言 1、下载mysql安装包 2、mysql 读写分离 3、docker安装三台mysql服务 4、修改主从配置文件 5、重启mysql 6、配置主库 7、配置从库创建同步账户 7.1、进入MySQL01和MySQL02和mysql03服务器新增MySQL用户user 密码root 用于同步账号和密码&#xff1b; 7.2、验…

说好的见框就插呢?

说好的见框就插呢&#xff1f; 背景一句话讲原理速挖XSS 背景 每一个学安全的&#xff0c;都听说过一句话&#xff0c;挖XSS就是见框就插&#xff0c;不得不说这个方法很有用&#xff0c;但是经常遇到插不进去的情况。今天浅聊一下XSS漏洞 一句话讲原理 XSS原理和注入很像&…

SpringCloud Alibaba——Ribbon的属性配置和类配置优先级

目录 一、Ribbon的属性配置和类配置哪个优先级高二、Ribbon的属性配置和类配置优先级源码解读 一、Ribbon的属性配置和类配置哪个优先级高 类配置优先级高 二、Ribbon的属性配置和类配置优先级源码解读 通过RibbonClientConfiguration类中的ribbonRule方法可知&#xff0c;优…

实现将redis中的所有数据备份到数据库表中

实现将redis中的所有数据备份到数据库表中 /*** 将redis中的数据同步到mysql中*/Overridepublic void saveMysqlForRedis(){Jedis jedis new Jedis("127.0.0.1", 6379);//System.out.println(jedis.ping());Set keys jedis.keys("*");//列出所有的keyI…

深度解读为什么说软件测试人人都能学

目录 1.软件测试的发展历程 2.软件测试行业优势 3.优就业软件测试学科优势 1.软件测试的发展历程 软件测试从上个世纪50年代发展至今&#xff0c;共经历了五个阶段&#xff1a;调试测试、证明测试、破坏性测试、评估测试、预防测试等&#xff0c;如下图&#xff1a; 现在已…

什么是NUMA,我们为什么要了解NUMA

在IA多核平台上进行开发时&#xff0c;我们经常会提到NUMA这个词 &#xff0c;那么NUMA到底指的是什么&#xff1f;我们怎么可以感受到它的存在&#xff1f;以及NUMA的存在对于我们编程会有什么影响&#xff1f;今天我们一起来看一下。 1、NUMA的由来 NUMA(Non-Uniform Memory…

MySQL(十):MySQL语法-进阶

MySQL语法-进阶 数据类型Text 类型Number 类型Date 类型 ASALTER TABLEconcat、group_concatSQL注入阻止SQL注入方案一方案二方案三 HAVING 子句临时表正则表达式获取服务器元数据事务导出数据导出数据导出表作为原始数导出SQL格式的数据 导入数据解决无法导入问题使用 LOAD DA…

kali linux 安装python 3xx 以及多版本切换的方式

简介 在渗透测试的时候&#xff0c;我们通常会用到不同的工具&#xff0c;这些工具可能对python的版本要求不一样&#xff0c;这个时候我们可能就需要在kali上面安装不同版本的python&#xff0c;以及灵活的切换python的版本。 下载python3并安装 以python38来举例&#xff…

Visual Studio 中的新特性:可视化宏扩展

今天&#xff0c;我们很高兴地宣布在 Visual Studio 17.7 预览版中推出可视化宏扩展功能。这个新功能通过可视化的方式对宏代码进行逐步扩展。 若要开始使用此功能&#xff0c;请确保你的 Visual Studio 版本更新到最新版本的 Visual Studio 预览版。 下面&#xff0c;我们来看…

图解Vit 3:Vision Transformer——ViT模型全流程拆解

文章目录 Layer NormalizationClassification TokenPosition embeedding 先把上一篇中的遗留问题解释清楚&#xff1a;上图中&#xff0c;代码中的all_head_dim就是有多少head。把他们拼接起来。 Encoder在Multi-Head Self-Attention之后&#xff0c;维度一直是BND&#xff0c;…

python flask 通过页面输入python代码,执行结果返回页面

1&#xff0c;不太好用 项目结构 app.py from flask import Flask, render_template, request import io import sysapp Flask(__name__)app.route(/) def index():return render_template(index.html)app.route(/execute, methods[POST]) def execute():code request.form[…

B071-项目实战-用户模块--手机注册 管理员登录

目录 完成注册功能后端开发完成UserControllerUserServiceImplLogininfoMapper 前端页面完成绑定数据绑定事件准备登录页 管理员登录1需求分析登录设计页面设计表设计流程设计所需技术 员工新增级联操作登录信息EmployeeServiceImplShopServiceImpl 管理员登录2前端页面后端接口…

Learning to cartoonize using white-box cartoon representations

论文笔记--漫画生成--White-box Cartoon Representations - 知乎论文 Learning to Cartoonize Using White-box Cartoon Representations 源码https://github.com/SystemErrorWang/White-box-Cartoonization效果算法概述这篇论文是将图像风格转成漫画风格&#xff0c;作者认为可…