如何在编译时从C扩展模块检查python API的版本?
我正在用C编写一个python模块。 该模块需要针对python版本2.4、2.5、2.6和2.7进行编译 现在我遇到了一个问题,在Python2.5中,他们为列表的大小定义了如何在编译时从C扩展模块检查python API的版本?,python,c,Python,C,我正在用C编写一个python模块。 该模块需要针对python版本2.4、2.5、2.6和2.7进行编译 现在我遇到了一个问题,在Python2.5中,他们为列表的大小定义了Py\u ssize\t,但在2.4中,他们只使用int 所以我的问题是: 有没有一种简单的方法可以检查我是否在编译时使用了2.4版或2.5版的API,这样我就可以编写一个小宏了 e、 g: #如果PY_小调
Py\u ssize\t
,但在2.4中,他们只使用int
所以我的问题是:
有没有一种简单的方法可以检查我是否在编译时使用了2.4版或2.5版的API,这样我就可以编写一个小宏了
e、 g:
#如果PY_小调<5
typedef int Py_ssizet;
#恩迪夫
做一些类似的事情
Import sys
if sys.version_info < (2, 4): //do something, typedef what you need
else // so on
导入系统
如果sys.version_info<(2,4)://做点什么,键入您需要的定义
其他//
我想你需要的是
PY\u版本\u HEX
cython生成的c代码中有一行
PY\u版本\u十六进制<0x02040000
#ifndef Py_PYTHON_H
#error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02040000
#error Cython requires Python 2.4+.
#else
\ifndef Py\u PYTHON\u H
#编译C扩展所需的Python头出错,请安装Python的开发版本。
#elif PY_版本_十六进制<0x02040000
#错误Cython需要Python 2.4+。
#否则
是的,在Python中,include dir定义了您要查找的内容:
#define PY_MAJOR_VERSION 2
#define PY_MINOR_VERSION 5
#define PY_MICRO_VERSION 2
另请参见,其中包含一个使用ifdef同时在Python2和Python3上工作的示例。
#define PY_MAJOR_VERSION 2
#define PY_MINOR_VERSION 5
#define PY_MICRO_VERSION 2