मैं विंडोज़ पर विकास कर रहा हूं, और मैंने इस तरह की चीज़ों के बारे में किसी को भी बात किए बिना हर जगह खोजा है।सी ++ पायथन एम्बेडिंग के साथ: यदि पाइथन स्थापित नहीं है तो क्रैश
मैंने अपने डेस्कटॉप पर एक सी ++ ऐप बनाया है जो एमएसवीसी का उपयोग कर पाइथन 3.1 एम्बेडेड है। मैंने python31.lib को लिंक किया और निष्पादन योग्य के साथ ऐप के रन फ़ोल्डर में python31.dll शामिल किया। यह बहुत अच्छा काम करता है। मेरा एक्सटेंशन और एम्बेडिंग कोड निश्चित रूप से काम करता है और कोई क्रैश नहीं होता है।
मैंने अपने दोस्त को रन फ़ोल्डर भेजा है जिसमें पाइथन स्थापित नहीं है, और ऐप स्क्रिप्टिंग सेटअप चरण के दौरान उसके लिए क्रैश हो जाता है।
कुछ घंटों पहले, मैंने अपने लैपटॉप पर ऐप की कोशिश की जिसमें पाइथन 2.6 स्थापित है। मुझे अपने दोस्त के समान दुर्घटना व्यवहार मिला, और डिबगिंग के माध्यम से पाया कि यह Py_Initialize() कॉल विफल रहता है।
मैंने ऐप कोड को बदले बिना अपने लैपटॉप पर पायथन 3.1 स्थापित किया। मैंने इसे चलाया और यह पूरी तरह से चलाता है। मैंने पायथन 3.1 को अनइंस्टॉल किया और ऐप फिर से दुर्घटनाग्रस्त हो गया। मैंने अपने ऐप में कोड को स्थानीय python31.dll से डायनामिक रूप से लिंक करने के लिए रखा है, यह सुनिश्चित करने के लिए कि यह इसका उपयोग कर रहा था, लेकिन मुझे अभी भी क्रैश हो रहा है।
मुझे नहीं पता कि दुभाषिया को शुरू करने के लिए डीएलएल से अधिक की आवश्यकता है या क्या। मैं इस पर कोई संसाधन नहीं ढूंढ पाया है। पाइथन दस्तावेज और अन्य मार्गदर्शिकाएं कभी भी आपके सी/सी ++ अनुप्रयोगों को वितरित करने का तरीका नहीं लगती हैं जो उपयोगकर्ताओं को पाइथन को स्थानीय रूप से इंस्टॉल किए बिना पाइथन एम्बेडिंग का उपयोग करती हैं। मुझे पता है कि यह यूनिक्स की तुलना में विंडोज पर एक मुद्दा है, लेकिन मैंने कई विंडोज सी/सी ++ अनुप्रयोगों को देखा है जो स्थानीय रूप से पायथन को एम्बेड करते हैं और मुझे यकीन नहीं है कि वे इसे कैसे करते हैं।
मुझे डीएलएल के अलावा और क्या चाहिए? जब मैं पाइथन स्थापित करता हूं तो यह क्यों काम करता है और फिर जब मैं इसे अनइंस्टॉल करता हूं तो काम करना बंद कर देता है? ऐसा लगता है कि यह इतना छोटा होना चाहिए; शायद यही कारण है कि कोई भी वास्तव में इसके बारे में बात नहीं करता है। फिर भी, मैं वास्तव में यह नहीं बता सकता कि इस दुर्घटना के मुद्दे से कैसे निपटें।
अग्रिम में बहुत बहुत धन्यवाद।
क्या आपकी लोड लाइब्रेरी कॉल सफल होती है? आप डीएल कहां डाल रहे हैं? यह उतना ही आसान हो सकता है जितना एप्लिकेशन लाइब्रेरी नहीं ढूंढ पा रहा है। – patros
LoadLibrary सफल हुआ, जैसा कि GetProcAddress था। चूंकि मुझे एक ही अपवाद मिला है क्योंकि मैंने गतिशील लिंक के बिना किया है (एक पूर्ण पहुंच उल्लंघन के बजाय) मुझे विश्वास है कि Py_Initialize को बुलाया गया था। डीएलएल रन निर्देशिका में है। मेरी रन निर्देशिका में शामिल हैं:। \ Ss_server.exe,। \ Python31.dll,। \ Admin.sqlite,। \ Settings.py,। \ Err.txt – apostrophest