2012-09-10 12 views
6

Estoy escribiendo un módulo de python en C. El módulo necesita compilarse para las versiones de Python 2.4, 2.5, 2.6 y 2.7.¿Cómo puedo verificar la versión de la API de Python en tiempo de compilación?

Ahora corrí al problema de que en Python 2.5 definían Py_ssize_t para el tamaño de las listas, pero en 2.4 acababan de usar int.

Así que mi pregunta es: ¿Hay una manera fácil de comprobar si estoy usando la API de la versión 2.4 o 2.5 en tiempo de compilación para que pueda escribir una pequeña macro?

por ejemplo:

#if PY_MINOR < 5 
typedef int Py_ssize_t; 
#endif 

Respuesta

6

Sí, patchlevel.h en el Python incluyen dir define lo que está buscando:

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

Sólo hacer algo similar a esto.

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

Creo que lo que necesita es PY_VERSION_HEX

hay una línea de código C generado por 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 
Cuestiones relacionadas