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

Bas*_*hur 49 python requirements.txt python-packaging pyproject.toml

自 2022 年中期以来,现在可以取消setup.pysetup.cfg转而使用pyproject.toml. 可编辑安装适用于最新版本的 setuptools 和 pip,甚至官方打包教程setup.py也从pyproject.toml.

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

回顾一下:过去的常见做法是放置依赖项(没有版本固定),以setup.py避免当此包与需要相同依赖项但版本要求冲突的其他包一起安装时出现问题。对于打包库来说, asetup.py通常就足够了。

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

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

Bas*_*hur 19

从这里引用我自己

我当前的假设是:[...]您将(大部分未固定的)依赖项放入 pyproject.toml 而不是 setup.py,因此您的库可以作为其他内容的依赖项安装,而不会因为解决版本限制的问题而造成太多麻烦。

最重要的是,对于“可部署应用程序”(由于缺乏更好的术语),您仍然希望维护一个具有精确版本固定的单独的requirements.txt。

这已得到 Python 包装权威 (PyPA) 成员的确认,并且 PyPA 建议的说明应在某个时候进行相应更新。

  • 您的答案是“是”还是“否”? (4认同)

sin*_*roc 10

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

没有改变。固定依赖项不属于项目的打包元数据,这意味着固定依赖项不属于文件部分dependencies的列表。截至今天,我所知道的固定依赖项还没有标准化部分。尽管该文档已经过时,但其精神仍然适用:“抽象依赖项”属于包元数据(例如,在 部分),并且“具体依赖项”可以在需要时在文件中列出(或在任何其他提供服务的文件中)与 PoetryPipenv类似的目的仅举其中两个,具体取决于项目的开发工作流程和工具)。[project]pyproject.tomlpyproject.toml[project]pyproject.tomlrequirements.txtpoetry.lockPipfile.lock

简而言之,抽象依赖关系是关于应该安装什么,具体依赖关系是关于如何安装(从哪个索引、具体是哪个版本、哪个版本、哪个发行版等等)。

抽象依赖项对于安装您的项目(库)的任何人都有效。但具体的依赖关系很可能因用户而异,或者从一台计算机到另一台计算机而异,甚至可能随着时间的推移而改变。例如,某些用户可能无法访问与其他用户相同的包索引(PyPI在某些地区不可用,某些公司使用私有内部镜像存储库)。某些依赖项需要非常具体的构建,这些构建取决于计算机上可用的硬件(例如 PyTorch)。


Ora*_*ter 7

这是pip文档pyproject.toml

...此文件包含 pip 用来构建包的构建系统要求和信息。

所以这不是正确的地方。查看侧边栏,我们可以看到有一个条目Requirements File Format是“旧”requirements.txt文件