gpt4 book ai didi

python - 如何从 setup.py 中读取来自 pyproject.toml 的项目依赖项,以避免在两个文件中重复信息?

转载 作者:行者123 更新时间:2023-12-03 16:21:02 26 4
gpt4 key购买 nike

我们正在升级以使用 BeeWare's Briefcase 0.3.1用于包装,使用 pyproject.toml而不是 setup.py指定如何打包,包括要在包中包含哪些依赖项。

这是 pyproject.toml 的最小示例公文包:

[tool.briefcase.app.exampleapp]
formal_name = "exampleapp"
description = "something"
requires = ['PyQt5', 'qtconsole']
sources = ['exampleapp']

我们想从 setup.py 访问需求列表,所以我们不必在两个文件中复制它,并使它们保持同步。我们还没有准备好离开 setuptools ,这仅用于包装。另一种方法当然是让 setup.py自动生成 pyproject.toml文件,但这似乎有点落后于 PEP 518 的意图.

最佳答案

据我所知,公文包实际上与 PEP 517 不兼容(至少默认情况下不兼容)。它使用 pyproject.toml文件,但没有填满 [build-system]部分,因此应该可以在该文件中设置实际的 PEP 517 构建后端而不会引起冲突。
pyproject.toml

[build-system]
build-backend = 'setuptools.build_meta'
requires = [
'setuptools',
'toml',
]

[tool.briefcase.app.exampleapp]
formal_name = 'exampleapp'
description = 'something'
requires = ['PyQt5', 'qtconsole']
sources = ['exampleapp']
setup.py
#!/usr/bin/env python3

import pathlib

import pkg_resources
import setuptools
import toml

def _parse_briefcase_toml(pyproject_path, app_name):
pyproject_text = pyproject_path.read_text()
pyproject_data = toml.loads(pyproject_text)
briefcase_data = pyproject_data['tool']['briefcase']
app_data = briefcase_data['app'][app_name]
setup_data = {
'name': pkg_resources.safe_name(app_data['formal_name']),
'version': briefcase_data['version'],
'install_requires': app_data['requires'],
# ...
}
return setup_data

def _setup():
app_name = 'exampleapp'
pyproject_path = pathlib.Path('pyproject.toml')
setup_data = _parse_briefcase_toml(pyproject_path, app_name)
setuptools.setup(**setup_data)

if __name__ == '__main__':
_setup()

然后 pip 和其他 PEP 517 兼容的前端应该能够通过委派给 setuptools 来构建和安装项目,同时注意正确设置包含 setuptools 和 toml 的构建环境。

我想也可以让公文包处理 pyproject.toml 的解析。文件(可能带有 briefcase.config.parse_config(...) ),但没有记录,所以我不知道这些 API 有多稳定。

关于python - 如何从 setup.py 中读取来自 pyproject.toml 的项目依赖项,以避免在两个文件中重复信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62362693/

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