11

我正在用 C 编写一个 python 模块。该模块需要针对 python 版本 2.4、2.5、2.6 和 2.7 进行编译。

现在我遇到了一个问题,他们在 python 2.5 中定义Py_ssize_t了列表的大小,但在 2.4 中他们只使用了int.

所以我的问题是:有没有一种简单的方法可以检查我在编译时使用的是 2.4 版还是 2.5 版的 API,以便我可以编写一个小宏?

例如:

#if PY_MINOR < 5
typedef int Py_ssize_t;
#endif
4

3 回答 3

11

是的,patchlevel.h在 Python 中 include dir 定义了您要查找的内容:

#define PY_MAJOR_VERSION    2
#define PY_MINOR_VERSION    5
#define PY_MICRO_VERSION    2
于 2012-09-10T09:12:14.240 回答
9

我想你需要的是PY_VERSION_HEX

cython生成的c代码中有一行

PY_VERSION_HEX < 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
于 2012-09-10T09:11:16.493 回答
-4

只需做类似的事情。

Import sys
if sys.version_info < (2, 4): //do something, typedef what you need
else // so on
于 2012-09-10T09:11:15.493 回答