Python 3.10 का उपयोग करके Kivy ऐप में PyInstaller स्टार्टअप क्रैश को ठीक करना

PyInstaller

PyInstaller के साथ निर्मित Kivy ऐप्स में स्टार्टअप क्रैश को समझना

PyInstaller का उपयोग करके Kivy ऐप बनाना Python अनुप्रयोगों को स्टैंडअलोन निष्पादन योग्य में पैकेजिंग करने का एक सामान्य तरीका है। हालाँकि, एक सफल निर्माण प्रक्रिया के बावजूद, पैकेज्ड ऐप लॉन्च करते समय डेवलपर्स को कभी-कभी अप्रत्याशित क्रैश का सामना करना पड़ता है। यह समस्या विशेष रूप से निराशाजनक हो सकती है जब कोई विस्तृत त्रुटि संदेश प्रदान नहीं किया जाता है।

इस मामले में, ऐप PyCharm जैसे विकास परिवेश में पूरी तरह से चलता है, लेकिन PyInstaller का उपयोग करके पैक किए जाने पर विफल हो जाता है। Kivy 2.3.0, Python 3.10, और numpy, scipy, और Pandas जैसी लाइब्रेरीज़ के साथ, समस्या के समाधान के लिए क्रैश के स्रोत की पहचान करना महत्वपूर्ण हो जाता है।

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

यह आलेख क्रैश के संभावित कारणों का पता लगाता है, आपकी SPEC फ़ाइल को बेहतर बनाने, छिपे हुए आयातों को प्रबंधित करने और यह सुनिश्चित करने पर ध्यान केंद्रित करता है कि निर्माण प्रक्रिया के दौरान आवश्यक Kivy निर्भरताएँ सही ढंग से संभाली जाती हैं।

आज्ञा उपयोग का उदाहरण
Analysis() यह कमांड PyInstaller विश्लेषण प्रक्रिया को आरंभ करता है, यह निर्दिष्ट करता है कि किस पायथन स्क्रिप्ट को बंडल करना है और निर्भरता को कहां देखना है। यह कॉन्फ़िगर करने के लिए आवश्यक है कि ऐप को कैसे पैक किया जाता है, जिसमें छिपे हुए आयात और बायनेरिज़ और JSON फ़ाइलों जैसे बाहरी डेटा शामिल हैं।
hiddenimports एनालिसिस() के अंदर एक पैरामीटर का उपयोग मैन्युअल रूप से पायथन पैकेज (उदाहरण के लिए, सुन्न, पांडा, आदि) को निर्दिष्ट करने के लिए किया जाता है, जिसे PyInstaller स्वचालित रूप से पता नहीं लगा सकता है, जिससे लापता लाइब्रेरी से संबंधित रनटाइम त्रुटियों को रोका जा सकता है।
Tree() इस कमांड का उपयोग COLLECT चरण में यह सुनिश्चित करने के लिए किया जाता है कि संपूर्ण निर्देशिकाएं, जैसे sdl2.dep_bins और glew.dep_bins, अंतिम बिल्ड में शामिल हैं। यह सुनिश्चित करता है कि ऐप में ग्राफिक्स और ध्वनि के लिए आवश्यक किवी निर्भरताएं शामिल हैं।
COLLECT() सभी संकलित फ़ाइलों, बायनेरिज़ और निर्भरताओं को एक आउटपुट निर्देशिका में एकत्रित करता है। यह सुनिश्चित करता है कि वितरण के लिए सभी संसाधनों, पुस्तकालयों और फ़ाइलों को सही ढंग से एक साथ बंडल किया गया है।
datas बंडल किए गए एप्लिकेशन में विशिष्ट फ़ाइलें (जैसे जेनरेट किया गया डेटा.json) शामिल करने के लिए उपयोग किया जाता है। Kivy ऐप्स में JsonStore द्वारा बनाई गई JSON फ़ाइलों जैसे बाहरी संसाधनों के साथ काम करते समय यह महत्वपूर्ण है।
JsonStore() JSON प्रारूप में डेटा संग्रहीत और प्रबंधित करने के लिए उपयोग किया जाने वाला एक विशिष्ट Kivy कमांड। पैकेजिंग के बाद गायब फ़ाइलों की समस्याओं से बचने के लिए किसी भी जेनरेट की गई फ़ाइल को PyInstaller डेटा कॉन्फ़िगरेशन में स्पष्ट रूप से शामिल करना आवश्यक है।
upx=True यह विकल्प पैकेजिंग प्रक्रिया के दौरान बायनेरिज़ के लिए UPX संपीड़न को सक्षम बनाता है। हालाँकि यह उत्पन्न निष्पादन योग्य के आकार को कम कर देता है, यह कभी-कभी संगतता समस्याओं का कारण बन सकता है, इसलिए इसे सावधानी से सक्षम किया गया है।
strip=False बायनेरिज़ से डिबग प्रतीकों को अलग करना अक्षम करता है। यह स्टार्टअप समस्याओं का निदान करने और रनटाइम के दौरान त्रुटियों को ट्रैक करने के लिए उपयोगी है, खासकर जब ऐप न्यूनतम त्रुटि आउटपुट के साथ क्रैश हो रहा हो।
bootloader_ignore_signals एक ध्वज जो सुनिश्चित करता है कि PyInstaller का बूटलोडर SIGTERM जैसे ऑपरेटिंग सिस्टम सिग्नलों को अनदेखा कर देगा। यह स्टार्टअप के दौरान ऐप को समय से पहले समाप्त होने से रोक सकता है, जो अप्रत्याशित क्रैश का एक कारण हो सकता है।

PyInstaller के साथ Kivy ऐप स्टार्टअप त्रुटियों का समस्या निवारण

ऊपर प्रदान की गई स्क्रिप्ट एक बहुत ही विशिष्ट समस्या को हल करने पर केंद्रित हैं: PyInstaller का उपयोग करके बनाया गया एक Kivy ऐप "अप्रत्याशित त्रुटि" के साथ स्टार्टअप पर क्रैश हो रहा है। पहली स्क्रिप्ट गुम होने की संभावित समस्या का समाधान करती है . PyInstaller का उपयोग करते समय यह एक सामान्य समस्या है, क्योंकि यह स्वचालित रूप से सभी निर्भरताओं का पता नहीं लगाता है, विशेषकर लाइब्रेरी जैसे , , या scipy. इन छिपे हुए आयातों को मैन्युअल रूप से निर्दिष्ट करके SPEC फ़ाइल के अनुभाग में, हम यह सुनिश्चित करते हैं कि PyInstaller सभी आवश्यक मॉड्यूल को बंडल करता है, जिससे ऐप को गायब घटकों के कारण क्रैश होने से रोका जा सके।

स्क्रिप्ट में दूसरा महत्वपूर्ण चरण का समावेश है में चरण। यह कमांड सुनिश्चित करता है कि किवी से संबंधित ऐप की निर्भरताएं, जैसे एसडीएल2 और जीएलईडब्ल्यू लाइब्रेरी, बिल्ड में सही ढंग से शामिल हैं। ये ऐप के ग्राफ़िकल इंटरफ़ेस को प्रस्तुत करने के लिए आवश्यक हैं। यदि ये फ़ाइलें शामिल नहीं हैं, तो Kivy ऐप ठीक से चलने में विफल हो जाएगा, भले ही निर्माण प्रक्रिया त्रुटियों के बिना पूरी हो जाए। यह सुनिश्चित करना कि ये बायनेरिज़ शामिल हैं, अनुपलब्ध ग्राफ़िक्स या ध्वनि घटकों से संबंधित रनटाइम समस्याओं से बचने में मदद करता है।

स्क्रिप्ट बाहरी फ़ाइलों को शामिल करने को भी संबोधित करती है, जैसे कि JSON फ़ाइल द्वारा बनाई गई किवी में. हालाँकि यह JSON फ़ाइल रनटाइम पर उत्पन्न होती है, यह सुनिश्चित करना महत्वपूर्ण है कि पैकेजिंग प्रक्रिया के दौरान इसे ठीक से संभाला जाए। में तर्क फ़ंक्शन हमें इस फ़ाइल को बंडल किए गए ऐप में स्पष्ट रूप से शामिल करने की अनुमति देता है। ऐसा करने से, हम उस त्रुटि से बचते हैं जहां आरंभीकरण के दौरान बाहरी डेटा फ़ाइलों के गायब होने के कारण ऐप क्रैश हो जाता है।

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

Kivy ऐप्स के लिए PyInstaller बिल्ड में गुम निर्भरता को संभालना

PyInstaller में छिपे हुए आयात को हल करने पर ध्यान देने के साथ पायथन बैकएंड समाधान

# Step 1: Modify the SPEC file to include hidden imports manually
# Import necessary dependencies from Kivy, sdl2, and glew
from kivy_deps import sdl2, glew
# Add numpy, pandas, scipy to hidden imports manually
a = Analysis([r'path_to_your_app.py'],
             pathex=['.'],
             binaries=[],
             datas=[],
             hiddenimports=['numpy', 'pandas', 'scipy'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             noarchive=False)
# Add Tree() for all Kivy dependencies to the collect step
coll = COLLECT(exe, Tree('C:\\path_to_project'),
               a.binaries, a.zipfiles, a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False, upx=True, name='Prototype')

Kivy PyInstaller बिल्ड में JSONStore और डेटा फ़ाइलें प्रबंधित करना

पायथन बैकएंड समाधान JSONStore को संभालना और PyInstaller के साथ डेटा फ़ाइल समावेशन

# Step 2: Ensure that the generated JSON file from kivy.storage.jsonstore is included
from kivy.storage.jsonstore import JsonStore
# If JSONStore is used, manually add the JSON file to the build
store = JsonStore('data.json')
# Create the SPEC file to explicitly include the JSON data
datas=[('data.json', '.')],
a = Analysis([r'path_to_your_app.py'],
             pathex=['.'],
             binaries=[],
             datas=[('data.json', '.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             noarchive=False)
coll = COLLECT(exe, Tree('C:\\path_to_project'),
               a.binaries, a.zipfiles, a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False, upx=True, name='Prototype')

स्टार्टअप त्रुटियों को रोकने के लिए Kivy ऐप्स के लिए PyInstaller को अनुकूलित करना

PyInstaller और Kivy के साथ काम करते समय, विचार करने का एक प्रमुख पहलू बाहरी निर्भरता और पुस्तकालयों का प्रबंधन है। PyInstaller का डिफ़ॉल्ट व्यवहार कभी-कभी कुछ पुस्तकालयों या फ़ाइलों को नजरअंदाज कर देता है, खासकर जब आभासी वातावरण या वैज्ञानिक पुस्तकालय जैसे अधिक जटिल सेटअप के साथ काम करते हैं और . यह सुनिश्चित करना कि सभी छिपे हुए आयात निर्दिष्ट हैं पैरामीटर महत्वपूर्ण है. इसके अतिरिक्त, PyInstaller स्वचालित रूप से ग्राफ़िकल और मल्टीमीडिया निर्भरताएँ शामिल नहीं कर सकता है sdl2 या , ये दोनों Kivy ऐप्स के लिए आवश्यक हैं।

एक अन्य पहलू जिसे डेवलपर्स अक्सर नजरअंदाज कर देते हैं वह आभासी वातावरण से संबंधित है। वर्चुअल वातावरण में PyInstaller का उपयोग करके Kivy ऐप बनाते समय, यह सुनिश्चित करना महत्वपूर्ण है कि सभी निर्भरताएँ सही ढंग से बंडल की गई हैं। इसमें समायोजन शामिल है सही निर्देशिकाओं को इंगित करने के लिए सेटिंग जहां लाइब्रेरी स्थापित हैं। ऐसा करने में विफलता के परिणामस्वरूप पैकेज्ड ऐप विकास परिवेश में ठीक से चल सकता है लेकिन उत्पादन में स्टार्टअप पर क्रैश हो सकता है। बिल्ड कॉन्फ़िगरेशन की पूरी तरह से जांच करके और यह सुनिश्चित करके कि सभी पथ और निर्भरताएँ सही हैं, इस समस्या से अक्सर बचा जा सकता है।

अंत में, अप्रत्याशित स्टार्टअप त्रुटियों को रोकने के लिए छवियों, फ़ॉन्ट और डेटा फ़ाइलों जैसे संसाधनों का उचित प्रबंधन महत्वपूर्ण है। Kivy ऐप्स में, बाहरी संसाधनों की अक्सर आवश्यकता होती है, और यदि इन्हें PyInstaller में स्पष्ट रूप से शामिल नहीं किया गया है अनुभाग में, गुम फ़ाइलों तक पहुँचने का प्रयास करते समय ऐप आरंभीकरण के दौरान क्रैश हो सकता है। यह सत्यापित करना आवश्यक है कि रनटाइम पर ऐप के लिए आवश्यक सभी फ़ाइलें अंतिम बिल्ड में ठीक से शामिल हैं।

  1. PyInstaller के साथ निर्माण के बाद मेरा Kivy ऐप क्रैश क्यों हो जाता है?
  2. सबसे आम कारण निर्भरता का अभाव है। जैसे सभी आवश्यक पुस्तकालय सुनिश्चित करें , , और , PyInstaller SPEC फ़ाइल में छिपे हुए आयात के रूप में शामिल हैं।
  3. मैं अपने निर्माण में sdl2 और glew निर्भरताएँ कैसे शामिल करूँ?
  4. उपयोग में कार्य करें एसडीएल2 और ग्लेव बायनेरिज़ को शामिल करने का चरण। ये किवी के ग्राफ़िकल संचालन के लिए आवश्यक हैं।
  5. क्या PyInstaller आभासी वातावरण को सही ढंग से संभाल सकता है?
  6. हां, लेकिन आपको सही सेट करना होगा SPEC फ़ाइल में उस वातावरण को इंगित करने के लिए जहाँ निर्भरताएँ स्थापित हैं, अन्यथा ऐप उनका पता लगाने में विफल हो सकता है।
  7. यदि मेरा ऐप PyCharm में काम करता है लेकिन पैक किए जाने पर क्रैश हो जाता है तो मुझे क्या करना चाहिए?
  8. सुनिश्चित करें कि सभी रनटाइम निर्भरताएँ शामिल हैं, और सत्यापित करें कि SPEC फ़ाइल के अनुभाग में आपके ऐप द्वारा उपयोग की जाने वाली सभी आवश्यक फ़ाइलें, जैसे फ़ॉन्ट, छवियां या JSON डेटा शामिल हैं।
  9. मैं ट्रेसबैक के बिना "अप्रत्याशित त्रुटि" संदेश का निवारण कैसे कर सकता हूं?
  10. सेट करें पैरामीटर को में कदम। यह त्रुटियों को टर्मिनल पर आउटपुट करेगा, जिससे आप दुर्घटना के कारण का पता लगा सकेंगे।

PyInstaller क्रैश के लिए संपूर्ण समाधान

इस गाइड में, हमने जांच की कि विकास परिवेश में पूरी तरह से चलने के बावजूद, PyInstaller का उपयोग करके बनाए जाने पर Kivy ऐप्स क्रैश क्यों हो सकते हैं। गुम पुस्तकालयों, अनुचित तरीके से बंडल किए गए डेटा, या निर्भरता गलत कॉन्फ़िगरेशन जैसे मुद्दों को संबोधित करने से इन दुर्घटनाओं को रोकने में मदद मिलती है।

SPEC फ़ाइल को सावधानीपूर्वक समायोजित करके, छिपे हुए आयातों को प्रबंधित करके, और यह सुनिश्चित करके कि सभी संसाधन और निर्भरताएँ शामिल हैं, आप Kivy ऐप को सफलतापूर्वक पैकेज कर सकते हैं। इन विवरणों का उचित प्रबंधन यह सुनिश्चित करेगा कि आपका ऐप PyInstaller के साथ बनने के बाद निर्बाध रूप से काम करे।

  1. छिपे हुए आयात और निर्भरता प्रबंधन सहित सामान्य PyInstaller पैकेजिंग मुद्दों के समाधान बताते हैं। PyInstaller आधिकारिक दस्तावेज़ीकरण
  2. एप्लिकेशन बनाते समय SDL2 और GLEW जैसी किवी-विशिष्ट निर्भरताओं को संभालने के बारे में जानकारी प्रदान करता है। किवी दस्तावेज़ीकरण: आपके आवेदन की पैकेजिंग
  3. आभासी वातावरण में समस्या निवारण मुद्दों पर चर्चा, विशेष रूप से numpy और पांडा जैसे जटिल पायथन पुस्तकालयों के साथ। स्टैक ओवरफ़्लो: PyInstaller और Kivy त्रुटियाँ