gpt4 book ai didi

python - 如何在不使用 setup.py 文件的情况下构建源代码分发?

转载 作者:行者123 更新时间:2023-11-28 16:55:31 24 4
gpt4 key购买 nike

包结构如下

.
├── my_package
│ └── __init__.py
├── setup.cfg
└── setup.py

setup.py 的内容

from setuptools import setup
setup()

setup.cfg 的内容

[metadata]
name = my_package
version = 0.1

[options]
packages = find:

我可以像这样为 my_package 构建 wheel 或源代码分发

pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz

但根据maintainer of setuptools ,声明式构建配置是理想的,使用命令式构建将是一种代码味道。所以我们将 setup.py 替换为 pyproject.toml :

.
├── my_package
│ └── __init__.py
├── setup.cfg
└── pyproject.toml

pyproject.toml 的内容

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

而且您仍然可以像以前一样构建一个轮子,它可以工作。但是 sdist 不起作用:

python: can't open file 'setup.py': [Errno 2] No such file or directory

那么您应该如何使用 setuptools 实际构建 .tar.gz 文件?创建 sdist 的面向用户的工具是什么?我不想更改构建后端。看起来其他打包工具都编写了自己的构建入口点,但我认为在元数据中定义声明式构建系统的全部意义在于,您不必亲自动手构建系统,了解每个构建系统是如何工作的需要调用不同的打包工具,或者必须进入解释器并手动调用 Python API。但是构建系统要求的 PEP 现在已经超过 2 年了。我在这里遗漏了什么明显的东西吗?

如何在不使用 setup.py 文件的情况下构建源代码分发?

最佳答案

这是一个有点争议的话题,目前的答案是,没有一种工具是每个人都同意的构建源代码分发的“正确方法”,也没有那个工具是什么。你可以看到 a long thread about it on the Python Packaging discourse

我不愿以耐用格式提供太多包装建议,因为沙子总是在移动,但截至 2019 年 11 月,setup.py sdist 被弃用,但是它确实具有 PE​​P 517 和 PEP 518 旨在修复的所有缺点 - 即您必须自己创建构建环境(并了解所有构建依赖项),并且它 与 setuptools/distutils 及其等效项一起使用。

这不是“官方”建议,但当前(2020 年 12 月)setup.py sdistsetup.py bdist_wheel 的最佳替代品是使用 pypa-build 。安装一次

pip install build

并用作

python -m build --sdist --wheel

这会同时构建源代码分发和 wheel。这就是我构建 PEP 517 兼容包的方式。

这需要你的项目有一个pyproject.toml,并且pyproject.toml必须有build-system.requiresbuild-system.build-backend 键,但它适用于任何具有 PE​​P 517 兼容后端(包括 flit)的项目。

其他工具

为什么不使用 flitpoetryhatch?这些工具都可供那些想要使用它们的人使用,但它们并不是这个问题的答案。这个问题是关于使用声明性 setup.cfg 格式的 setuptools 构建的项目。 flitpoetry 都不是通用 PEP 517 构建前端,因此它们用作使用各自后端的项目的构建命令。

我对 hatch 还不够熟悉,无法说明它是否可以使用 setuptools 以外的后端来管理项目,但是(同样,截至 2019 年 11 月),它不是 PEP 517 前端,如果您没有 setup.py,它将无法工作(它将引发错误“无法打开文件设置。 py”,它将忽略你的 pyproject.toml 文件)。

关于python - 如何在不使用 setup.py 文件的情况下构建源代码分发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58753970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com