如何构建符合 PEP 517 的 C 扩展,即使用 pyproject.toml 而不是 setup.py?

问题描述

我想为 CPython 构建一个 C 扩展。传统上,我可以使用 setup.py 文件来完成。但是,出于 PEP 517 中提到的原因,我更喜欢使用 pyproject.toml 的声明性方法。我知道 setuptools 是唯一可以在所有相关平台上构建 C 扩展的构建后端。事实上,除了过时的 distutils 之外,我根本不知道有任何后端能够构建 C 扩展。

在此背景下,常见的 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 加上一个 setup.cfg

setuptools 文档建议使用这样的 pyproject.toml

[build-system]
requires = [
    "setuptools >=52.0",'wheel >= 0.36']
build-backend = "setuptools.build_meta"

此外,实际的元数据应该进入 setup.cfg。但是,我没有找到任何关于如何将 ext_modules kwarg,特别是 Extension() 调用转换为 setup.cfg 语法的解释。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)