15

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

我似乎找不到任何直接的方法来解决这个问题。

4

2 回答 2

15

实际上有一个名为“功能”的分发/设置工具功能可用于此目的。它被明确设计为让 setup.py 根据命令行选项--with-xxx做不同的事情。--without-xxx

  • 这篇文给出了很好的介绍,目前我找不到任何更好的文档(除了分布式源 -特征类特性关键字)。
  • jinja 项目的setup.py将 Features 用于您的确切目的,它可能是一个很好的工作模板。
  • simplejson setup.py也做了类似的事情,除了它被编码为总是尝试构建它定义的 C 扩展功能,并在构建失败时优雅地退回到纯 python;这也可能对您的目的有用。
于 2011-04-20T19:28:57.020 回答
4
ext_modules = []
if '--add-this' in sys.argv:
    ext_modules.append(Extension(...))
    sys.argv.remove('--add-this')
setup(...
      ext_modules = ext_modules
)

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

于 2010-10-30T01:21:24.710 回答