我想为 CPython 构建一个 C 扩展。我可以用传统的setup.py
文件来做。但是,由于 PEP 517 中提到的原因,我更喜欢使用pyproject.toml
. 我知道这setuptools
是唯一可以在所有相关平台上构建 C 扩展的构建后端。事实上,我不知道有任何后端能够与过时的distutils
.
在这种背景下,一个常见的setup.py
看起来像这样:
from setuptools import setup, Extension
kwargs = dict(
name='mypackage',
# more metadata
ext_modules=[
Extension('mypackage.mymodule', ['lib/mymodule.c',
'lib/mypackage.c',
'lib/myalloc.c'],
include_dirs=['lib'],
py_limited_api=True)])
setup(**kwargs)
现在,挑战是将上述内容放入一个pyproject.toml
plus asetup.cfg
中。
setuptools
文档建议这样pyproject.toml
:
[build-system]
requires = [
"setuptools >=52.0",
'wheel >= 0.36']
build-backend = "setuptools.build_meta"
看
- https://setuptools.readthedocs.io/en/latest/build_meta.html和
- https://setuptools.readthedocs.io/en/latest/userguide/declarative_config.html#declarative-config
此外,实际的元数据应该进入setup.cfg
. 但是,我还没有找到任何关于如何将ext_modules
kwarg(尤其是Extension()
调用)翻译成setup.cfg
语法的解释。