首页 > 编程问答 >使用pyproject.toml时还需要requirements.txt吗?

使用pyproject.toml时还需要requirements.txt吗?

时间:2024-08-06 15:49:57浏览次数:13  
标签:python python-packaging requirements.txt pyproject.toml

自 2022 年中以来,现在可以摆脱 setup.py setup.cfg ,转而使用 pyproject.toml 可编辑安装适用于最新版本的 setuptools 和 pip,甚至官方 打包教程 setup.py 切换到 pyproject.toml

但是,有关 requirements.txt 的文档似乎也已被删除,我想知道现在将 固定的要求 放在哪里?

作为复习:过去的常见做法是将依赖项(没有版本固定)放在 setup.py 中,以避免在该包获取时出现问题与需要相同依赖项但版本要求冲突的其他软件包一起安装。对于打包库,a setup.py 通常就足够了。

对于部署(即非库),您通常还提供 a requirements.txt 以及版本固定的依赖项。因此,您不会意外地获得该包经过测试的最新和最好的依赖项的确切版本。

所以我的问题是,有什么变化吗?当与 requirements.txt 一起使用时,您是否仍然将固定需求放在 pyproject.toml 中?或者有多余的部分吗 对于 pyproject.toml ?某处有相关文档吗?


是对的, pyproject.toml 现在是打包 Python 项目的推荐方式,并且在很多情况下可以取代 setup.py setup.cfg 。但是, requirements.txt 的作用略有不同,而且在使用 pyproject.toml 时,它并非完全过时。下面是具体说明:

pyproject.toml

  • 用于打包和依赖管理。 它使用 [project] 表存储元数据(如包名称、版本、作者)和 [build-system] 表来指定 setuptools 或 poetry 之类的构建工具。
  • 依赖项位于 [project.dependencies] [project.optional-dependencies] 中。 可以在此处指定项目的运行时依赖项,包括版本限制。

requirements.txt

  • 用于固定依赖项的特定用例。 虽然不建议将其作为主要的依赖项管理方法,但它在以下情况下仍然有用:
    • 部署脚本和自动化: 当需要一个简单的方法来固定特定环境(如生产服务器)的依赖项版本时, requirements.txt 可以提供比 pyproject.toml 更直接的途径。
    • 与不支持 pyproject.toml 的工具的向后兼容性。

那么,应该如何选择呢?

  • 对于新的 Python 项目,最好完全采用 pyproject.toml 并利用其依赖管理功能。 [project.dependencies] 中指定依赖项,并使用版本说明符来固定版本。
  • 如果需要 requirements.txt 提供的简单性,可以从 pyproject.toml 生成它。 可以使用 pip freeze > requirements.txt 创建一个固定版本的依赖项文件,或者使用 pip-compile 等工具从更易于管理的规范生成一个固定文件。

文档:

总之,虽然 pyproject.toml 为依赖管理提供了更强大的方法,而 requirements.txt 在特定情况下仍然有它的用途。最佳选择取决于的具体需求和工作流程。

标签:python,python-packaging,requirements.txt,pyproject.toml
From: 74508024

相关文章

  • python SQLite 访问组件
    importosimportsqlite3fromsqlite3importErrorfromqueueimportQueue,EmptyfromtypingimportList,Tuple,AnyclassSQLiteDB:default_db_path=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))default_db_file=default_db_path......
  • Python 卡在第 1 页
    让它读取下一页结果的最佳方法是什么?目前正在拉取数据,但只有第1页importrequestsimportjsonpage=1url="https://api-prod.grip.events/1/container/4368/search?search=&sort=name&order=asc&type_id=4907,4906,5265,4964,4904,1026,4908&page=%d"headers={......
  • 无法反序列化解码 JWT python 时的关键数据
    我正在使用pyjwt库来解码JWT令牌。我在解码时遇到此错误。代码在文档中给出。importjwtencoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''secret=b''''-----BEGINPUBLICKEY-----MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9......
  • Python科研武器库 - 字符串操作 - 字符串开头结尾判断 startswith() endswith()
    使用场景:按照开头的前缀、结尾的后缀来判断、筛选目标字符串。使用函数:str.startswith(search_string,start,end)str.endswith(search_string,start,end)search_string:要匹配的目标字符串。start:要从中匹配search_string的str的起始索引。end:要考虑匹配的str的结......
  • 我正在 python 中使用 aspose.pdf 将 pdf 转换为 excel 。但问题是它只能将 pdf 的前
    `从tkinter导入*将aspose.pdf导入为ap从tkinter导入文件对话框importpandasaspdinput_pdf=filedialog.askopenfilename(filetypes=(("PDF文件",".pdf"),("所有文件",".")))output_file=filedialog.asksaveasfil......
  • 如何在selenium python中访问电子邮件中的所有文件夹
    我使用imaplib库,但有时无法访问某些帐户,我使用poplib但它只支持访问主邮箱,但不支持访问其他文件夹,如垃圾邮件我想使用imaplib,但不会出现有时甚至无法访问的错误尽管我有一个帐户,但我仍然可以访问它,或者是否有另一个库可以快速支持该帐户?你想要使用Selenium和Python......
  • python安装torch-cluster、torch-scatter、torch-sparse和torch-geometric | torch_ge
    1.检查CUDA版本【方法1】用nvidia-smi已装cuda,用nvidia-smi或nvcc-V查看【方法2】用torch已装torch,用torch代码打印importtorchprint(torch.__version__)#查看pytorch安装的版本号print(torch.cuda.is_available())#查看cuda是否可......
  • Python:学生成绩管理系统(大学编程期末实验)
    引言在这个信息时代,教育管理的自动化已成为提高效率的关键。本文将介绍如何使用Python开发一个学生成绩管理系统,旨在简化成绩记录、查询和分析的过程。创作灵感来源本项目灵感来源于我在教育机构的工作经历,以及对提高教育管理效率的持续追求。通过复盘过往项目,我意识到一个......
  • 手把手教你使用Python网络爬虫下载一本小说(附源码)
    大家好,我是Python进阶者。前言前几天【磐奚鸟】大佬在群里分享了一个抓取小说的代码,感觉还是蛮不错的,这里分享给大家学习。一、小说下载如果你想下载该网站上的任意一本小说的话,直接点击链接进去,如下图所示。只要将URL中的这个数字拿到就可以了,比方说这里是951,那么这个数字......
  • 借助 Transformer 实现美股价格的预测(Python干货)
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:      Transformer是一种在自然语言处理等领域广泛应用的深度学习架构,与传统的循环神经网络(RNN)相比,Transformer可以并行处理输入序列的各个位置,大大提高了计算效率。而且通过多层的深度堆叠,能够学习......