百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Python 中的 requirements.txt 与 setup.py

liuian 2024-12-06 17:22 48 浏览

Python 中 requirements.txt、setup.py 和 setup.cfg 的用途

新手而言管理 Python 项目中的依赖项是非常具有挑战性的,这个问题是由历史原因引起的并且一直被吐槽。

在今天的文章中,我们将讨论如何正确管理 Python 项目的依赖关系。 更具体地说,将讨论 requirements.txt 文件的用途以及如何使用 setuptools 来分发自定义的Python 包并让其他用户进一步使用和开发它。除此以外还将讨论设置文件(即 setup.cfg 和 setup.py)的用途以及如何将它们与需求文件一起使用,这样可以使包开发和重新分发的过程变得更容易。

Python项目的依赖关系是什么

让我们从包依赖开始;介绍它们到底是什么以及如何正确管理它们,因为这样可以使以使 Python 项目变得更容易维护。

简单来说,依赖项是我们Python项目所依赖的外部其他的Python 包,例如在AI方向,用到最多的包就是Numpy和Pandas。在 Python 中,这些依赖通常可以在 Python 包索引 (PyPI) 或其他管理工具中找到(例如 Nexus),后面我们都以PyPI为例介绍,因为它是最常用而且大家都在用的包管理工具。

现在我们自己的 Python 项目中可能需要引用某个特定版本的第三方包有依赖。这种情况可能会导致依赖冲突的出现,因为我们所有的依赖中(至少)有两个依赖项可能依赖同一个包,但每个依赖项都需要该外部包的特定版本(比如一个需要1.0,而一个需要2.0)。这种特殊的情况我们需要告诉 pip 需要如何处理依赖关系以及我们需要哪些特定版本。

一般情况下,我们需要requirements.txt 来指定项目的依赖包和版本,所以我们先看看requirements.txt的格式

requirements.txt 文件

requirements.txt 是一个文件,列出了 Python 项目的所有依赖项。 如前所述,它还可能包含依赖项的依赖项。 列除了依赖包名称外,还可以指定特定的版本(使用 ==)、>=或<=,甚至两者都指定。

示例 requirements.txt 文件

matplotlib>=2.2
numpy>=1.15.0, <1.21.0
pandas
pytest==4.0.1

然后就可以使用以下命令通过 pip 安装这些依赖项(通常在虚拟环境中):

pip install -r requirements.txt

在上面的示例中,我们指定了一些依赖项。例如,对于没有关联版本的的 pandas 包,pip 将正常安装最新版本,除非其他依赖项之一与它有任何冲突(如果有冲突,pip 将安装满足其余依赖项指定条件的最新 pandas 版本)。对于 pytest,包管理器将安装特定版本(即 4.0.1),而对于 matplotlib,将安装至少大于或等于 2.2 的最新版本(这还是取决于是否有其他依赖项具体要求,如果没有则会安装符合条件的最新版) 。对于 numpy 包,pip 将尝试安装 1.15.0(包含)和 1.21.0(不包含)之间的最新版本。

在安装所有依赖项后,可以通过运行 pip freeze 来查看虚拟环境中安装的每个依赖项的确切版本。此命令将列出所有包及其特定版本(即 ==)。

requirements.txt 非常有用,但他只针对于我们项目的开发和发布(例如线上部署等)。如果你想将你代码发布到 PyPI 供其他人使用,那么需要的不仅仅是这个文件。

Python 中的setuptools

setuptools 是构建在 distutils 之上的包,它可以帮助开发人员快速发布 Python 包。 除此以外它还提供了使依赖管理更容易的功能。

当想要发布一个包时,通常需要填写一些元数据,例如包名、版本、依赖项、入口点等。 setuptools 就提供了简化这些操作的功能。

项目的元数据等信息需要 在setup.py 文件中定义,例如下面的demo:

from setuptools import setup
setup( 
name='demo',
author='deephub', 
version='0.1', 
install_requires=[ 
'pandas', 
'numpy',
'matplotlib',
],
# ... more options/metadata
)

我们所填写的信息都是纯声明性的,所以一个更好的方法是在名为 setup.cfg 的文件中定义这些元数据和信息,然后只需在 setup.py 文件中调用 setup ()即可。 setup.cfg 文件如下所示:

[metadata]
name = demo
author = deephub
version = 0.1
[options]
install_requires =
pandas
numpy
matplotlib

这样在我们的 setup.py 文件中只需要保留最少的代码:

from setuptools import setup
if __name__ == "__main__":
setup()

上面install_requires 参数与requirements.txt 类似,可以使用运算符 <、>、<=、> =、== 或!=,后跟版本标识符。当项目安装时会根据该配置来下载和安装依赖。

我们需要 requirements.txt 和 setup.py/setup.cfg 文件吗?

这就需要分情况对待了。首先 requirements.txt 与 setup.py 之间的通常用于实现不同的需求:

  • 如果主要用于项目开发目的,并且不打算发布到pypi上,则 requirements.txt 就足够了(即使该包是在多台机器上开发的)
  • 如果包仅在单机开发,但是需要把他作为pip的包发布到pypi上,那么 setup.py/setup.cfg 就足够了。
  • 如果包是在多台机器上开发的并且还需要把他发布到pypi上,这就需要 requirements.txt (多个机器需要相同的开发环境)和 setup.py/setup.cfg 文件(发布到pypi上)。

另外就是如果同时使用两者,setup.py( setup.cfg)文件应包含抽象依赖项列表,而 requirements.txt 文件必须包含具有每个包版本的特定引脚的具体依赖项(使用 = = 指定特定版本)。

以下是Python文档中官方的定义:

install_requires(即 setup.py)定义了单个项目的依赖关系,而requirements.txt 通常用于定义完整 Python 环境。

尽管 install_requires 要求很少,但requirements.txt 通常包含详尽的固定版本列表,以实现完整环境的可重复安装。


总结

本文中讨论了在开发 Python 项目和应用程序时适当的依赖管理的重要性。并且介绍了 requirements.txt 文件的用途以及如何将它与 setuptools 的配置文件(即 setup.py 和 setup.cfg)一起使用,这样可以保证其他开发人员可以安装、运行、开发甚至测试源代码Python 包的代码。

setuptools 并不能完全替代 requirements.txt 文件。并且在大多数情况下,可能需要这两个文件同时存在,这样才能够正确管理包依赖和进行包的发布。

作者:Giorgos Myrianthous

相关推荐

微软公司介绍(微软公司介绍文案)

微软美国跨国科技公司微软(Microsoft)是一家美国跨国科技企业,1975年4月4日创立。2023财年营收2119.15亿美元,[200]公司总部设立在华盛顿州雷德蒙德(Redmond,邻近西雅图...

怎样设置电脑桌面密码(设置电脑桌面密码步骤)

首先,需要确定你是想设置电脑屏幕保护密码还是系统登录密码。如果是屏幕保护密码,可以在电脑设置中进行修改。打开控制面板,找到“个性化”或“外观和个性化”选项,再找到“屏幕保护器”选项,点击“设置”,在弹...

繁体字输入法下载(繁体字输入法下载安装)

你下载百度手机输入法,默认的就是双拼,可以自己选择26键拼音输入01打开苹果手机,找到苹果商城,02打开下载中心,搜索“搜狗输入法”,03下载搜狗输入法,04等下载完成后桌面上会显示搜狗输入法,05然...

国产操作系统概念股(国产操作系统概念股票)

  那么怎么构建该系统呢?一般情况下都是从以下几个方面:   第一、选股方法。虽然靠着均线能选股,靠着指标也能选股,但是系统性的选股方法则是要结合宏观经济整体运行位置和环境,行业发展现状和前...

电脑主机开机没反应(电脑主机开机没反应电源灯亮)

操作方法01第一种情况是电脑完全没有反应,那么就可能是电源没有连接上,检查插线板和机箱插头,重新插好就好了。?02还有是电脑机箱已经开启,但是显示屏还是黑的,那么这种情况就有可能是显示屏的电源没有连接...

cad激活码2010(cad激活码和序列号)

1.首先激活码出现问题,需要进行激活确认。首先需要的中进入电脑C盘。2.可以先点击组织设置隐藏文件夹显示。3.勾选显示隐藏文件夹。4.找到C:\ProgramData文件夹,打开找到CAD文件夹。5....

联想windows7笔记本怎么连接网络

检查笔记本的无线网卡驱动1.右键我的电脑,点击“属性”,选择左侧“设备管理器”2.点击“网络适配器”,如果方框内没有驱动,请下载驱动精灵万能网卡版安装网卡驱动 二、若发现驱动前面是感叹号的&...

iphone自动关机设置方法(iphone如何设自动关机)
  • iphone自动关机设置方法(iphone如何设自动关机)
  • iphone自动关机设置方法(iphone如何设自动关机)
  • iphone自动关机设置方法(iphone如何设自动关机)
  • iphone自动关机设置方法(iphone如何设自动关机)
淘宝电脑版网页入口(淘宝网电脑版网页官方)

网站地址:https://www.taobao.com/网站链接:进入网站服务器IP:116.253.191.241网站描述:淘宝网首页,淘宝网-亚洲最大、最安全的网上交易平台,提供各类服饰、美容...

大学生用哪个牌子的笔记本电脑好

荣耀MagicBook14英寸轻薄窄边框笔记本电脑(AMD锐龙58G512GFHDIPS正版Office)冰河银这款的性价比较高。也可以根据自己的预算选同系列其他型号。...

苹果怎么查询手机激活时间(苹果手机如何查询手机激活时间)
  • 苹果怎么查询手机激活时间(苹果手机如何查询手机激活时间)
  • 苹果怎么查询手机激活时间(苹果手机如何查询手机激活时间)
  • 苹果怎么查询手机激活时间(苹果手机如何查询手机激活时间)
  • 苹果怎么查询手机激活时间(苹果手机如何查询手机激活时间)
免费手机模拟器(免费手机模拟器下载)

目前能成功在电脑上模拟苹果系统的iOS模拟器,对比市面上常见的安卓模拟器少太多了,主要原因还是iOS系统比较封闭,难于开发。虽然前面说开发很困难,但是国内还是有一些厉害的IT小组成功推出了iOS模拟器...

免费主题商店app下载(免费主题商店app下载苹果)
  • 免费主题商店app下载(免费主题商店app下载苹果)
  • 免费主题商店app下载(免费主题商店app下载苹果)
  • 免费主题商店app下载(免费主题商店app下载苹果)
  • 免费主题商店app下载(免费主题商店app下载苹果)
新手怎么制作word表格(工作表格制作)

步骤如下:1、本次演示使用的软件为word文字处理软件,软件版本为Microsoftoffice家庭和学生版2016。2、首先打开Excel电子表格,根据问题描述,我们在word中插入两页表格。3、...

电脑开机启动进不了系统怎么办
电脑开机启动进不了系统怎么办

一、修复错误如果频繁无法正常进入系统,则开机后马上按F8,看能否进入安全模式或最后一次配置正确模式,如能则进入后会自动修复注册表,并回忆前几次出现不正常现象时进行了什么操作,并根据怀疑是某个应用软件导致问题产生,将其卸载,然后正常退出,...

2026-01-02 13:05 liuian