2012-05-16 15 views
9

जो मैं करना चाहता हूं वह विपरीत है जो अधिकांश लोग करना चाहते हैं: मेरे पास पाइथन में लिखी गई लाइब्रेरी है, और मैं इसे सी (और संभवतः अन्य भाषाओं) में उपलब्ध करना चाहता हूं। ।एक पाइथन लाइब्रेरी को सी

मुझे पता है कि यह करने के लिए ठेठ जवाब सी के लिए अजगर पुस्तकालय उपयोग कर रहा है, वह यह है कि:

#include <Python.h> 

int 
main(int argc, char *argv[]) 
{ 
    Py_Initialize(); 
    PyRun_SimpleString("from time import time,ctime\n" 
        "print 'Today is',ctime(time())\n"); 
    Py_Finalize(); 
    return 0; 
} 

(स्रोत: http://docs.python.org/extending/embedding.html#very-high-level-embedding)

बहरहाल, यह मेरे लिए इष्टतम से भी कम समय लगता है:

  • यह बदसूरत
  • है यह सी
  • ०१२३५१६४१०६१ के लिए सिर्फ है

मैं चाहता हूं कि, मेरी लाइब्रेरी को सीओ सहित मेरी लाइब्रेरी को बाध्य करने का एक तरीका है, मुझे स्वचालित रैपर पीढ़ी की परवाह नहीं है: मेरी लाइब्रेरी काफी सरल है, इसलिए मैं गोंद कोड लिख सकता हूं।

फिलहाल, एकमात्र समाधान जो मैंने ऊपर आया था, वह मेरे लाइब्रेरी को सी से बांधने के लिए ऊपर दिए गए कोड के समान कोड का उपयोग कर रहा है। फिर सी पुस्तकालय को अन्य भाषाओं में बांधने के लिए SWIG का उपयोग करें।

क्या कोई बेहतर है?

उत्तर

4

वेल सी प्रोग्रामिंग के Lingua franca है। तो मैं कहूंगा कि आपका दृष्टिकोण सही है। सी के लिए बाध्यकारी बनाएं और अन्य भाषाओं के एसडब्ल्यूआईजी और एफएफआई जैसे सी से संबंधित टूल्स बनाने के लिए सी

केवल एक अन्य विचार दिमाग में आता है। आज हम सभी तरह के एपीआई और इंटरफेस के लिए एक नए Lingua franca के रूप में उभरते हुए HTTP को देखते हैं। तो कोई भी कुछ रीस्ट इंटरफ़ेस की पेशकश पायथन में लिखी गई छोटी webservice बनाने के बारे में सोच सकता है। लेकिन स्पष्ट रूप से यह केवल कुछ सेटिंग्स में समझ में आता है।

बेशक

, एक बार आप सभी नामित पाइपों या सॉकेट और Apache Thrift, Google Protocol Buffers या 0MQ तरह उपकरणकिटें की तरह इंटर प्रक्रिया संचार की संभावनाओं देखते हैं एक अलग प्रक्रिया में अपने अजगर lib चलाने का निर्णय।

+0

अच्छी तरह से, मुझे डेमॉन के रूप में चलने वाली लाइब्रेरी के रूप में कुछ भी कल्पना नहीं है (अब कम से कम नहीं)। तो मुझे लगता है कि मैं मैन्युअल रूप से एक सी लाइब्रेरी लिखूंगा जो पाइथन से जुड़ता है; तो मैं अन्य भाषाओं में एसडब्ल्यूआईजी का उपयोग कर बाइंडिंग कर दूंगा। – boyska

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