How to check the version of the python API at compile time from a C extension module?

Question:

I am writing a python module in C.
The module needs to be compiled for python version 2.4, 2.5, 2.6 and 2.7.

Now I ran in to the problem that in python 2.5 they defined Py_ssize_t for the size of lists, but in 2.4 they just used int.

So my question is:
Is there an easy way to check if I’m using the API of version 2.4 or 2.5 at compile time so I can write a little macro?

e.g:

#if PY_MINOR < 5
typedef int Py_ssize_t;
#endif
Asked By: Raphael Ahrens

||

Answers:

Just do something similar to this.

import sys
if sys.version_info < (2, 4): //do something, typedef what you need
else // so on
Answered By: Khoa Le

I think what you need is PY_VERSION_HEX

there is one line in c code generated by 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
Answered By: iMom0

Yes, patchlevel.h in the Python include dir defines what you are looking for:

#define PY_MAJOR_VERSION    2
#define PY_MINOR_VERSION    5
#define PY_MICRO_VERSION    2
Answered By: Janne Karila
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.