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

How to create a deb package for a python project without setup.py

我找到的关于此主题的任何文档都提到构建 deb 包的“唯一”要求是具有正确的 setup.py(和 requirements.txt)。例如在 dh-virtualenv tutorial, stdeb documentation and the Debian's library style guide for python.

但是如今 poetry allow to develop (and upload to PyPI) python projects without any setup.py (this file and several others including requirements.txt are all replaced by pyproject.toml). I believe flit 等新的(令人惊叹的)工具也允许这样做。

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

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

setuptools,以及它所需要的setup.py文件,在python中作为de-facto打包标准的时间最长。您提到的新包管理器是通过引入 PEP 517 and PEP 518 (or read this 来启用的,以获得关于该主题的 high-level 描述),它提供了一种无需 setup.py 即可指定构建后端的标准化方法(以及随之而来的 hen-egg 问题,您已经需要 setuptools 才能正确解析它)。

总之,一切都还很新鲜,linux 打包社区还没有跟上。我发现最近没有关于 debian 软件包的讨论,但是 rpm 方面对它进行了巧妙的总结 over here.

所以,简短的回答就是等一会儿,google debian packaging pep517 support 时不时地。

到那时,您可以使用 dephell 生成 setup.py,并使用 poetry 为您生成 requirements.txt 作为继续使用现有工具的解决方法:

dephell deps convert --from=poetry --to=setuppy
poetry export -f requirements.txt -o requirements.txt

并且,在构建期间,告诉您的 pyproject.tom 您计划使用 setuptools 而不是 poetry:

[build-system]
requires = ["setuptools >= 40.6.0", "wheel"]
build-backend = "setuptools.build_meta"