c++ गैर-अजगर अनुप्रयोग में पाइथन स्क्रिप्टिंग जोड़ने का "सही" तरीका




1 Answers

मुझे पाइथन को एम्बेड करने में समस्या नहीं दिखाई देती है, उदाहरण के लिए, बूस्ट.पथन। आप जो भी मांगते हैं वह आपको मिलेगा:

  • यह एम्बेडेड होगा, और यह एक दुभाषिया होगा (ऑटो-पूर्णता को कार्यान्वित करने के लिए पर्याप्त पहुंच के साथ)
  • आप एक नया दुभाषिया प्रति-स्क्रिप्ट बना सकते हैं और पूरी तरह से पाइथन वातावरण को अलग कर सकते हैं
  • ... और जितना संभव हो उतना पारदर्शी है

मेरा मतलब है, आपको अभी भी एक एपीआई का पर्दाफाश करना और कार्यान्वित करना होगा, लेकिन 1) यह एक अच्छी बात है, 2) ब्लेंडर यह भी करता है और 3) मैं वास्तव में किसी अन्य तरीके से नहीं सोच सकता जो आपको इस काम से लाभ पहुंचाता है .. ।

पीएस: मुझे पाइथन / बूस्ट के साथ थोड़ा सा अनुभव है। पायथन लेकिन लुआ / लुआबिंद के साथ बड़े पैमाने पर काम किया है, जो कि थोड़े समान है

c++ python scripting plugins desktop-application

मैं वर्तमान में उपयोगकर्ताओं के लिए पाइथन में लिखे गए प्लगइन का उपयोग करके अपने डेस्कटॉप एप्लिकेशन (सी ++) की कार्यक्षमता बढ़ाने की क्षमता जोड़ने की प्रक्रिया में हूं।

बेवकूफ विधि काफी आसान है। पाइथन स्थैतिक लाइब्रेरी को एम्बेड करें और वेब के चारों ओर बिखरे हुए दर्जनों ट्यूटोरियल का पालन करें जिसमें वर्णन किया गया है कि कैसे पाइथन फाइलों को प्रारंभ करना और कॉल करना है, और आप बहुत अधिक कर चुके हैं।

तथापि...

जो मैं खोज रहा हूं वह Blender तरह अधिक है। ब्लेंडर पायथन स्क्रिप्ट के माध्यम से पूरी तरह से अनुकूलन योग्य है, और इसके लिए बाहरी पायथन निष्पादन योग्य की आवश्यकता होती है। (यानी पायथन वास्तव में ब्लेंडर निष्पादन योग्य में बिल्कुल एम्बेडेड नहीं है।) इसलिए, स्वाभाविक रूप से, आप ब्लेंडर स्क्रिप्ट लिखते समय अपनी साइट-पैकेज निर्देशिका में पहले से मौजूद किसी भी मॉड्यूल को शामिल कर सकते हैं। ऐसा नहीं है कि इसकी सलाह दी जाती है, क्योंकि इससे आपकी स्क्रिप्ट की पोर्टेबिलिटी सीमित हो जाएगी।

तो, मैं क्या जानना चाहता हूं कि अगर आपका केक रखने और इसे भी खाने का कोई तरीका है। मुझे एक प्लगइन सिस्टम चाहिए जो उपयोग करता है:

  • एक एम्बेडेड पायथन दुभाषिया।

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

  • फ़ायरवॉल प्लगइन्स।

    प्रत्येक प्लगइन के लिए virtualenv कुछ समकक्ष; उन्हें उन सभी मॉड्यूल को स्थापित करने की इजाजत दी जाती है जिन्हें वे चाहते हैं या चाहते हैं, लेकिन उन्हें अन्य प्लगइन में संभावित संघर्षों से अलग रखना। शायद zc.buildout यहां एक बेहतर उम्मीदवार है, लेकिन, फिर से, मैं सुझाव के लिए बहुत खुला हूं। मैं इसे पूरा करने के सर्वोत्तम तरीके के रूप में एक नुकसान में थोड़ा सा हूँ।

  • जितना संभव हो दर्द रहित ...

    उपयोगकर्ता के लिए मैं अतिरिक्त मील जाने के लिए तैयार हूं, बस इतना ही समय तक कि अधिकांश उपरोक्त प्लगइन लेखक के रूप में संभव है।

यदि आप में से कोई भी इस तरह की चीज़ों के साथ कोई अनुभव अनुभव करता है, तो आपकी मदद की बहुत सराहना की जाएगी। :)

संपादित करें: असल में, जो मैं चाहता हूं उसका छोटा संस्करण virtualenv की सादगी है, लेकिन बंडल पायथन दुभाषिया के बिना, और एक विशिष्ट "वर्चुअल वातावरण" को प्रोग्रामेटिक रूप से सक्रिय करने का एक तरीका, जैसे zc.buildout sys.path मैनिपुलेशन के साथ करता है ( sys.path[0:0] = [...] चाल)।

zc.buildout और zc.buildout दोनों में जो कुछ भी मैं चाहता हूं उसके भाग होते हैं, लेकिन न तो zc.buildout बनाता है I, या एक प्लगइन डेवलपर बस ज़िप कर सकता है और किसी अन्य कंप्यूटर को भेज सकता है।

बस .pth फ़ाइलों में हेरफेर करना, या सीधे एक स्क्रिप्ट में sys.path में हेरफेर sys.path , मेरे आवेदन से निष्पादित मुझे आधा रास्ता मिल जाता है। लेकिन यह पर्याप्त नहीं है जब संकलित मॉड्यूल आवश्यक हैं, जैसे कि पीआईएल।




Related