2012-09-10 7 views
6

मैं सी में एक पायथन मॉड्यूल लिख रहा हूं मॉड्यूल को पायथन संस्करण 2.4, 2.5, 2.6 और 2.7 के लिए संकलित करने की आवश्यकता है।मैं संकलन समय पर पायथन एपीआई के संस्करण की जांच कैसे कर सकता हूं?

अब मैं समस्या में भाग गया कि पाइथन 2.5 में उन्होंने सूचियों के आकार के लिए Py_ssize_t परिभाषित किया, लेकिन 2.4 में उन्होंने int का उपयोग किया।

तो मेरा प्रश्न है: क्या यह जांचने का कोई आसान तरीका है कि मैं संकलन समय पर संस्करण 2.4 या 2.5 के एपीआई का उपयोग कर रहा हूं, इसलिए मैं थोड़ा मैक्रो लिख सकता हूं?

उदाहरण के लिए:

#if PY_MINOR < 5 
typedef int Py_ssize_t; 
#endif 

उत्तर

6

हाँ, patchlevel.h अजगर में शामिल ग कोड में एक लाइन dir को परिभाषित करता है क्या है आप देख रहे हैं:

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

बस इस के लिए कुछ इसी तरह से करते हैं।

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

मुझे लगता है कि आपको क्या चाहिए PY_VERSION_HEX

वहाँ 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 
संबंधित मुद्दे