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



我找到的关于这个主题的任何文档都提到了;仅";构建deb包的要求是具有正确的setup.py(和requirements.txt(。例如,在dh-virtualenv教程、stdeb文档和Debian的python库样式指南中。

但如今,像poetry这样的新(惊人(工具允许在没有任何setup.py的情况下开发(并上传到PyPI(python项目(该文件和包括requirements.txt在内的其他几个文件都被pyproject.toml取代(。我相信flit也允许这样做。

我已经开发了一个由诗歌管理的python项目,并希望将其打包用于Ubuntu/Debian。我想,作为一种变通方法,我仍然可以编写一个setup.py文件,该文件的值来自pyproject.toml,而requirements.txt文件(使用poetry.lock中的值手工编写(。

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

setuptools及其所需的setup.py文件在最长一段时间内一直是python中事实上的打包标准。您提到的新软件包管理器是通过引入PEP 517PEP 518而启用的(或阅读本文了解有关该主题的高级描述(,它提供了一种标准化的方式来指定构建后端,而不需要setup.py(以及随之而来的鸡蛋问题,即您已经需要setuptools来正确解析它,但可能还需要指定您想要用于构建的setuptools的哪个版本(。

不管怎样,这一切仍然很新鲜,linux打包社区还没有完全跟上。我在debian bug追踪器上找到了这个讨论,rpm方面在这里巧妙地总结了它。

简单的答案是等待一段时间,直到工具链赶上新标准,并不时地搜索debian packaging pep517 support


作为poetry的变通方法,特别是构建包,您可以使用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"

最新更新