Насколько я могу судить, brefcase на самом деле не совместим с 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.
Я предполагаю, что также можно было бы позволить brefcase обрабатывать файл pyproject.toml
(возможно, вместе с briefcase.config.parse_config(...)
), но это не задокументировано, поэтому я не знаю, насколько стабильны эти API.
person
sinoroc
schedule
14.06.2020
setup.py
файл вообще не требуется. Возможно, там больше шансов: beeware.org/community/getting-help - person sinoroc   schedule 14.06.2020setup.py
, иpyproject.toml
, я думаю, вы могли бы написать немного кода вsetup.py
, который анализирует файл Toml, но тогдаsetup.py
нужна внешняя зависимость от библиотеки Toml (поскольку нет Анализатор Toml в стандартной библиотеке Python). Кажется, что это может быть как-то осуществимо (возможно, с некоторым компромиссом). - person sinoroc   schedule 14.06.2020