2012-09-10 10 views
6

Sto scrivendo un modulo python in C. Il modulo deve essere compilato per Python versione 2.4, 2.5, 2.6 e 2.7.Come posso verificare la versione dell'API python al momento della compilazione?

Ora mi corse per il problema che in Python 2.5 hanno definito Py_ssize_t per le dimensioni delle liste, ma in 2.4 hanno appena usato int.

Quindi la mia domanda è: C'è un modo semplice per verificare se sto usando l'API della versione 2.4 o 2.5 in fase di compilazione in modo da poter scrivere una piccola macro?

es:

#if PY_MINOR < 5 
typedef int Py_ssize_t; 
#endif 

risposta

6

Sì, patchlevel.h in Python includono dir definisce cosa che stai cercando:

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

Basta fare qualcosa di simile a questo.

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

Penso che quello che vi serve è PY_VERSION_HEX

c'è una riga nel codice C generato da 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 
Problemi correlati