在setup.py中,如何测试是否定义了PyCapsule_New?

时间:2014-03-30 14:25:31

标签: python distutils

setup.py具有测试函数是否已定义的功能:

compiler = distutils.ccompiler.new_compiler ()
if compiler.has_function ('foo_new', libraries=("foo",)):
    define_macros.append (('HAVE_FOO_NEW', '1'))

但是我似乎无法将它用于Python扩展函数(特别是PyCapsule_New)。以下内容未定义任何内容:

if compiler.has_function ('PyCapsule_New'):
    define_macros.append (('HAVE_PYCAPSULE_NEW', '1'))

我似乎需要在libraries论证中添加一些东西,但是什么呢? Python库的名称发生了变化,distutils.sysconfig中不可用,除非作为gcc参数(例如。BLDLIBRARY定义为-L. -lpython2.7)。

似乎这样一个显而易见/常见的事情想要这样做,代码将适用于多个版本的Python,但我没有setup.py脚本以这种方式使用has_function

1 个答案:

答案 0 :(得分:0)

您可以进行一些编译时测试,而不是对Python功能进行配置检查。理想情况下,您可以检查Python版本(PY_MAJOR_VERSIONPY_MINOR_VERSION),但您也可以依赖于标头内定义的宏。

对于您的特定功能,请注意,一旦包含标题Py_CAPSULE_Hpycapsule.h),就会定义Python.h宏。