2009-02-04 25 views
7

मेरे पास पाइथन के लिए सी एक्सटेंशन मॉड्यूल है और मैं इसे रूबीस्ट्स को उपलब्ध करना चाहता हूं।संयुक्त पायथन और रूबी एक्सटेंशन मॉड्यूल

स्रोत में कई सी मॉड्यूल हैं, जिनमें से केवल एक पायथन-निर्भर है। बाकी केवल एक दूसरे और मानक पुस्तकालय पर निर्भर करते हैं। मैं इसे सामान्य तरीके से python setup.py build के साथ बना सकता हूं।

मैं newgem का उपयोग कर रूबी समर्थन जोड़ने के साथ प्रयोग कर रहा हूं और मैं rake gem के साथ एक्सटेंशन का एक संस्करण बना सकता हूं। हालांकि, संयुक्त स्रोत में एक बदसूरत निर्देशिका लेआउट है (जेम-स्टाइल और सेटअपअप-स्टाइल स्ट्रक्चर मिश्रण) और बिल्ड प्रक्रिया एक क्लज है।

मैं केवल उसी स्रोत में सभी स्रोतों को नहीं रख सकता क्योंकि mkmf स्वचालित रूप से पाइथन-निर्भर मॉड्यूल को चुनता है और इसे बनाने का प्रयास करता है, और उपयोगकर्ताओं को ऐसे मॉड्यूल को संकलित करने के लिए पायथन स्थापित करने की आवश्यकता नहीं है जो नहीं इस्तेमाल किया गया। मेरा वर्तमान हैक extconf.rb के लिए है जो पाइथन-स्वतंत्र स्रोत-फ़ाइलों को रूबी-निर्भर एक्सटेंशन मॉड्यूल के समान निर्देशिका में कॉपी करने के लिए है।

क्या कोड दोनों भाषाओं में उपलब्ध कराने के लिए एक सुरक्षित तरीका है? क्या मुझे सिर्फ एक अलग जेम में पाइथन-स्वतंत्र कोड डुप्लिकेट करना चाहिए? क्या मुझे स्वतंत्र कोड को ऑटोोटूल के साथ निर्मित एक अलग lib के रूप में जारी करना चाहिए? क्या mkmf का कोई संस्करण है जो अवांछित मॉड्यूल को छोड़ सकता है? अजगर & माणिक

  • पायथन बाइंडिंग पर स्वतंत्र
  • रूबी बाइंडिंग
  • शायद इसलिए है कि

    • पुस्तकालय ही है,: इसे हल करने

    उत्तर

    5

    एक तरह से तीन अलग-अलग परियोजनाओं को बनाने के लिए है सबसे साफ समाधान, यद्यपि रिलीज करते समय इसे थोड़ा और काम करने की आवश्यकता होती है, लेकिन इसका लाभ यह है कि आप रूबी बाइंडिंग के बिना एक नया संस्करण जारी कर सकते हैं एक नई लाइब्रेरी/पायथन बाइंडिंग संस्करण भेजने के लिए।

    0

    जोहान ने जो कहा, उस पर पूरक, मैंने पाइथन में कुछ सी/सी ++ समर्थन पुस्तकालयों का उपयोग किया है। आप अपना कोड सी/सी ++ में लिखते हैं, फिर प्रत्येक भाषा के लिए मध्यस्थ टेम्पलेट बनाएं जिसे आप समर्थन देना चाहते हैं। इसके बजाय पाइथन के लिए दर्द रहित, लेकिन रुबी के लिए कुछ विचार किए जाने चाहिए ... अर्थात् मुझे नहीं लगता कि पठित समर्थन रूबी या इसके विपरीत से खुश होना है।

    http://www.swig.org/ यह कुछ हद तक सीखने की वक्र है, इसलिए वहां एक उदाहरण प्रोजेक्ट ढूंढना सबसे अच्छा हो सकता है जो दर्शाता है कि आपकी लक्षित भाषाओं के लिए रैपर का उपयोग कैसे करें।

    यह निश्चित रूप से एक उपयोगी टूल है क्योंकि यह आपके कोड को बहुत साफ करता है जबकि कई भाषाओं में मजबूत बाइंडिंग प्रदान करता है (PHP, पायथन, रूबी, और मुझे विश्वास है सी #)

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