为python包制作可选C扩展的最简单方法是什么?

Jas*_*ker 14 python setuptools cython python-c-extension

我已经创建了一个C扩展,我想在我的Python包中启用(使用setuptools),只有传入命令行选项.最简单的方法是什么?

我似乎无法找到任何直截了当的方式来解决这个问题.

Eli*_*ins 14

实际上有一个名为"Features"的分发/设置工具功能可用于此目的.在此基础上进行了明确设计有setup.py做不同的事情--with-xxx--without-xxx命令行选项.

  • 这篇博文给出了一个很好的介绍,我目前找不到更好的文档(除了Distribute source - Feature类features关键字).
  • jinja项目的setup.py使用功能用于您的确切目的,它可能是一个很好的模板.
  • simplejson setup.py也做了类似的事情,除了它被编码为总是尝试构建它定义的C扩展功能,并在构建失败时优雅地回退到pure-python; 这也可能对您有用.


Mar*_*wis 4

ext_modules = []
if '--add-this' in sys.argv:
    ext_modules.append(Extension(...))
    sys.argv.remove('--add-this')
setup(...
      ext_modules = ext_modules
)
Run Code Online (Sandbox Code Playgroud)

这很麻烦,但可能是最简单的。更高级的方法是扩展 Distribution 类以支持标志,--with-modules然后在 Finalize_options 中自定义 ext_modules。