2012-05-27 9 views
9

मेरे पास सी ++ और पायथन/साइथन फाइलों के समूह के साथ एक प्रोजेक्ट है। अब तक मैंने प्राथमिक रूप से सी ++ भाग विकसित किया है और इसे qmake के साथ एक स्थिर पुस्तकालय में संकलित किया है। बूस्ट :: पायथन के साथ कुछ कुछ तरीकों का खुलासा किया गया है, और एक .py फ़ाइल से निष्पादित किया गया है।सी ++/साइथन परियोजना को निष्पादन योग्य तरीके से कैसे संकलित करें?

अब मैं पूरी चीज को एक स्टैंडअलोन निष्पादन योग्य में संकलित करना चाहता था।

मेरा प्रश्न अब: ऐसा करने का सबसे अच्छा तरीका क्या है? मैंने साइथन पर स्विच करने, पाइथन फ़ाइलों को संकलित करने और लाइब्रेरी को जोड़ने की कोशिश की। लेकिन ऐसा लगता है कि निष्पादन योग्य, केवल साझा पुस्तकालयों को संकलित करने के लिए distutils/setup.py के साथ कोई सीधा तरीका नहीं है।

वहाँ एक रास्ता आसानी से दोनों सीपीपी संकलन और एक ही बार में एक निष्पादन में फ़ाइलों .pyx है?

ताकि मैं बहुत सारे बूस्ट :: पायथन रैपर सामान से छुटकारा पा सकूं और सी ++/पायथन का एक साफ मिश्रण प्राप्त कर सकूं, बिना साझा लाइब्रेरी आयात किए और पूरी चीज को पइंस्टॉलर से पैक कर सकूं?

+0

क्या आपके ऐप का मुख्य प्रवेश बिंदु पाइथन स्क्रिप्ट के माध्यम से है और सी ++ भाग लाइब्रेरी है? – jdi

+0

हां, प्रवेश बिंदु पायथन में है। मैं सी ++ में सभी महंगी परिचालन लिखता हूं (जो काफी हैं) और पाइथन (विरासत) में सी ++ कक्षाओं में अतिरिक्त कार्यक्षमता जोड़ें। पाइथन में मुख्य "प्रवाह", गुई, नेटवर्किंग सामान और इतने पर लिखा गया है। –

+0

[इस सवाल] का उत्तर (http://stackoverflow.com/q/2581784/87699) साइथन को सीधे निष्पादन योग्य करने के लिए पॉइंटर्स देता है। आपका मामला थोड़ा अलग है लेकिन यह अभी भी उपयोगी हो सकता है। –

उत्तर

1

आप इस पर गौर करना चाहिए:

  • pyinstaller (या py2exe) खिड़कियों के लिए/लिनक्स
  • OSX के लिए py2app

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

यदि आप किसी भी सामान्य शुद्ध पीई फाइलों का उपयोग नहीं करते हैं और केवल साइथन फाइलें हैं, तो एक दुभाषिया को उनमें से एक में एम्बेड करना भी संभव है एक --embed ध्वज के साथ एक प्रवेश बिंदु cython रहे हैं: http://wiki.cython.org/EmbeddingCython
ध्यान दें, यह पहले उल्लेख पैकेजिंग विकल्प के लिए एक समान "फ्रीज" दृष्टिकोण है, लेकिन अतिरिक्त लंबाई जाना नहीं है एक स्वयं का निर्माण करने के निहित env

+0

मुझे लगता है कि मेरा प्रश्न थोड़ा अस्पष्ट था: मैं एक समाधान पसंद करूंगा जहां पाइथन कोड संकलित किया गया हो (या भी हो सकता है)। –

+0

इस तरह से पैकेजिंग आपको अपने साइथन और सी ++ एक्सटेंशन को संकलित करने और उन्हें बंडल करने से नहीं रोकती है। पीई कोड लॉन्च करने के लिए आपको अभी भी एक अजगर दुभाषिया की आवश्यकता है। – jdi

+0

@ snøreven: हाँ शायद मुझे आपके प्रश्नों के बारे में कुछ याद आ रहा है। क्या आप अपने सीपीपी + पीईएक्स को एक मॉड्यूल में बनाने की कोशिश कर रहे हैं? क्योंकि आपने अपने सीपीपी + पीईएक्स से "निष्पादन योग्य" शब्द कहा है, जो मुझे भ्रमित कर रहा है। भले ही, आपको अपनी एंट्री पॉइंट पाई फ़ाइल के लिए एक दुभाषिया की आवश्यकता होगी, और स्टैंड-अलोन एक्जिक्यूटिव में पाइथन स्क्रिप्ट बनाने का एकमात्र तरीका इस पैकेजिंग दृष्टिकोण के माध्यम से है। – jdi

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