2012-09-10 17 views
6

Piszę moduł python w C. Moduł musi być skompilowany dla wersji Pythona 2.4, 2.5, 2.6 i 2.7.Jak mogę sprawdzić wersję interfejsu API Pythona podczas kompilacji?

Teraz natknąłem się na problem, który w pythonie 2.5 oni zdefiniowali Py_ssize_t dla rozmiaru list, ale w 2.4 używali tylko int.

Moje pytanie brzmi: Czy istnieje prosty sposób sprawdzenia, czy korzystam z interfejsu API wersji 2.4 lub 2.5 podczas kompilacji, więc mogę napisać małe makro?

np:

#if PY_MINOR < 5 
typedef int Py_ssize_t; 
#endif 

Odpowiedz

6

Tak, patchlevel.h w Pythonie obejmują reż definiuje czego szukasz:

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

Wystarczy zrobić coś podobnego do tego.

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

myślę, czego potrzebujesz to PY_VERSION_HEX

jest jedna linia w kodzie c generowane przez Cython

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 
Powiązane problemy