代码之家  ›  专栏  ›  技术社区  ›  Jason Baker

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

  •  13
  • Jason Baker  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 9 年前
        1
  •  3
  •   Martin v. Löwis    14 年前
    ext_modules = []
    if '--add-this' in sys.argv:
        ext_modules.append(Extension(...))
        sys.argv.remove('--add-this')
    setup(...
          ext_modules = ext_modules
    )
    

    这是黑客,但可能是最容易的。更先进的方法是扩展分发类以支持标志,比如 --with-modules 然后在finalize选项中自定义ext模块。

        2
  •  14
  •   0 _ Edward Ned Harvey    9 年前

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

    • 这个 blog post 给出了一个很好的介绍,目前我找不到任何更好的文档(除了分发源文件之外)- the Feature class features keyword )
    • 金贾项目 setup.py 将特性用于您的确切目的,它可能是一个很好的模板。
    • 普莱斯杰森 setup.py 也做了类似的事情,除了它的代码总是试图构建它定义的C扩展特性,并且在构建失败时优雅地退回到纯Python;这对于您的目的也可能有用。