2012-09-10 18 views
6

私はC言語でPythonモジュールを書いています。 このモジュールは、Python 2.4、2.5、2.6、2.7用にコンパイルする必要があります。コンパイル時にPython APIのバージョンを確認するにはどうすればよいですか?

今私は、Python 2.5でリストのサイズについてPy_ssize_tを定義していましたが、2.4ではちょうどintを使用していたという問題に対処しました。

私の質問は: コンパイル時にバージョン2.4または2.5のAPIを使用しているかどうかを確認する簡単な方法はありますか?少しマクロを書くことができますか?

例えば:

#if PY_MINOR < 5 
typedef int Py_ssize_t; 
#endif 

答えて

6

はい、patchlevel.hが含まcythonによって生成されたCコードの1行があるPY_VERSION_HEX

で必要なものだと思いますあなたは探しています:

#define PY_MAJOR_VERSION 2 
#define PY_MINOR_VERSION 5 
#define PY_MICRO_VERSION 2 
-1

ただ、これに似た何かをします。

Import sys 
if sys.version_info < (2, 4): //do something, typedef what you need 
else // so on 
5

は、私はあなたがdirは何を定義するPythonで

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 
関連する問題