2012-10-07 9 views
7

मेरे पास एक खराब डिजाइन और बड़ा (> 300 public functions, >200 numeric constants हैडर फ़ाइल में #define के साथ परिभाषित किया गया है) कि मुझे पायथन में लपेटना है। मेरे पास dll और h फ़ाइल है। लाइब्रेरी को सालाना अपडेट किया जाता है, अब तक पीछे के संगत तरीके से (यानी केवल फ़ंक्शंस जोड़े गए थे, एक निरंतर उनके संख्यात्मक मान इत्यादि रखते थे)। लेकिन मुझे कोई गारंटी नहीं है क्योंकि मैं पुस्तकालय को नियंत्रित नहीं करता हूं।सी लाइब्रेरी के एक पायथन रैपिंग की रखरखाव

  1. अजगर के लिए हर निरंतर और समारोह, 1 पायथन में एपीआई पुनर्परिभाषित और पुस्तकालय के लिए कॉल करने के लिए 1
  2. का मिलान:

    ctypes का उपयोग करना, मैं दो अजगर में इस लपेटकर के तरीके को देखने के ।

पहले एक (लगभग) हेडर फाइल से स्वत: तरीके से किया जा सकता है और इसलिए बनाए रखने और उन्नत करने के लिए आसान है, दूसरा अजगर कोड का एक बहुत आवश्यकता है, लेकिन इसका इस्तेमाल करने के आसान हो जाएगा।

मैं इस प्रकार की समस्या और कुछ उदाहरणों के साथ आपके अनुभव के आधार पर कुछ राय की सराहना करता हूं।

+0

क्षमा करें, लेकिन जितना अच्छा है, यह वास्तव में एक स्पष्ट सवाल नहीं है। –

+3

SWIG पर एक नज़र डालें। –

+0

[एसआईपी] (http://pypi.python.org/pypi/SIP/4.14) एक दिलचस्प समाधान हो सकता है। –

उत्तर

4

मैंने हाल ही में एसडीएल के लिए सीटीपीएस रैपिंग बनाने के लिए ctypesgen का उपयोग किया, और पूरक पुस्तकालय (एसडीएल_मेज, एसडीएल_एटीएफ, एसडीएल_मिक्सर)।

मेरे लिए, यह काफी अच्छी तरह से काम किया। यह पायथन 2.x उत्पन्न करता है, लेकिन मैं "2to3" उपयोगिता का उपयोग कर वांछित 3.x कोड प्राप्त करने में सक्षम था।

मुझे लगता है कि एक अधिक "पायथनिक" एपीआई के लिए नींव के रूप में सीटीपीएस रैपिंग का उपयोग करना एक अच्छा विचार है, और यह मूल रूप से मैंने अपने pslab मॉड्यूल के साथ (बहुत ही सरल स्तर पर) किया है।

तो, यदि आप कुछ ऐसा करने की सोच रहे हैं, तो यह एक तरीका होगा।

0

एक प्रकार के बैकएंड के साथ एक पायथन लाइब्रेरी को बनाए रखना एक अप्रबंधनीय दृष्टिकोण नहीं है। स्पष्ट रूप से प्रारंभिक निवेश स्वचालित उपकरणों का उपयोग करने से बड़ा है, लेकिन आपके द्वारा छोड़ा गया एपीआई बहुत बेहतर होना चाहिए।

यदि आप उस मार्ग को लेते हैं, तो पाइथन एपीआई को पूरी तरह से सी लाइब्रेरी से अलग करना है। एक पायथन फ्रंट एंड एपीआई के साथ कई सीटीपीएस बैकएंड का समर्थन करना बहुत बुरा नहीं है - केवल रनटाइम पर क्वेरी करें और गतिशील रूप से सही ctypes wrapper मॉड्यूल लोड करें। मैंने विंडोज़ और लिनक्स के लिए विभिन्न डीएलएल फाइलों और .so फ़ाइलों को लपेटने के लिए ऐसा किया है, लेकिन यह पुस्तकालय के संस्करणों के लिए भी काम करेगा।

संबंधित मुद्दे