2012-09-10 29 views
6

Tôi đang viết một mô-đun python trong C. Mô-đun cần được biên dịch cho phiên bản python 2.4, 2.5, 2.6 và 2.7.Làm cách nào để kiểm tra phiên bản của python API tại thời gian biên dịch?

Bây giờ tôi đã gặp vấn đề trong python 2.5, chúng được định nghĩa Py_ssize_t đối với kích thước của danh sách, nhưng trong 2.4 chúng chỉ sử dụng int.

Vì vậy, câu hỏi của tôi là: Có cách nào dễ dàng để kiểm tra xem tôi có đang sử dụng API phiên bản 2.4 hoặc 2.5 lúc biên dịch để tôi có thể viết một macro nhỏ không?

ví dụ:

#if PY_MINOR < 5 
typedef int Py_ssize_t; 
#endif 

Trả lời

6

Vâng, patchlevel.h trong Python bao gồm dir định nghĩa những gì bạn đang tìm kiếm:

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

Chỉ cần làm một cái gì đó tương tự như sau.

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

Tôi nghĩ rằng những gì bạn cần là PY_VERSION_HEX

có một dòng trong mã c được tạo ra bởi 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 
Các vấn đề liên quan