如何为没有setup.py的python项目创建deb包

zez*_*llo 15 python packaging deb setup.py python-poetry

我发现的有关此主题的任何文档都提到构建 deb 包的“唯一”要求是拥有正确的setup.py(和requirements.txt)。例如,在dh-virtualenv 教程stdeb 文档Debian 的 python 库风格指南中。

但现在新的(令人惊奇的)工具,如诗,允许开发(并上传到 PyPI)Python 项目,而无需任何setup.py(此文件和其他几个文件,包括requirements.txt全部被替换pyproject.toml)。我相信flit也允许这样做。

我开发了一个由诗歌管理的 python 项目,并想将其打包到 Ubuntu/Debian 中。我想,作为一种解决方法,我仍然可以编写一个从和 一个文件setup.py中获取其值的文件(使用来自 的值手动编写)。pyproject.tomlrequirements.txtpoetry.lock

但是,有没有办法在没有任何文件的情况下做到这一点setup.py

Arn*_*rne 10

setuptools及其setup.py所需的文件,长期以来一直是 Python 中事实上的打包标准。您提到的新包管理器是通过引入 和 (或阅读此内容以获取有关该主题的高级描述)来启用的PEP 517PEP 518提供了一种指定构建后端的标准化方法,而无需(setup.py以及随后的母鸡蛋您已经需要正确解析它的问题setuptools,但可能还需要指定您想要构建的 setuptools 版本)。

不管怎样,这一切都还很新鲜,Linux 打包社区还没有完全跟上。我在 debian bug tracker 上找到了这个讨论,并且侧面在这里rpm简洁地总结了它。

简短的答案是等待一段时间,直到工具链赶上新标准,并debian packaging pep517 support时不时地谷歌一下。


作为 -build 包的具体解决方法poetry,您可以使用dephell生成setup.pypoetry来生成requirements.txt以便您继续使用旧版工具:

dephell deps convert --from=poetry --to=setuppy
poetry export -f requirements.txt -o requirements.txt
Run Code Online (Sandbox Code Playgroud)

并且,在构建过程中,告诉您pyproject.tom您计划用于setuptools构建而不是poetry

[build-system]
requires = ["setuptools >= 40.6.0", "wheel"]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)