11

私はCでPythonモジュールを書いています。モジュールはPythonバージョン2.4、2.5、2.6、2.7用にコンパイルする必要があります。

Py_ssize_tここで、Python 2.5ではリストのサイズを定義しているのに、2.4では単にを使用しているという問題に遭遇しましたint

だから私の質問は:コンパイル時にバージョン2.4または2.5のAPIを使用しているかどうかを確認して、小さなマクロを作成できるようにする簡単な方法はありますか?

例えば:

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

3 に答える 3

11

はい、patchlevel.hPythonの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コードに1行あります

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 に答える