मैं pyinstaller का उपयोग करके एक पायथन एप्लिकेशन को पैकेज करने का प्रयास कर रहा हूं। मैं ऑरैकल डेटाबेस से कनेक्ट करने के लिए cx_oracle और ऑरैकल इंस्टेंट क्लाइंट का उपयोग कर रहा हूं। मैं विंडोज 10 पर काम कर रहा हूं। पैकेज करने से पहले मेरा एप्लिकेशन ठीक काम करता है। लेकिन पैकेजिंग के बाद, निम्न त्रुटि तब होती है जब मैं निष्पादन योग्य फ़ाइल चलाने का प्रयास करता हूं:

cx_Oracle.DatabaseError: DPI-1072: Oracle क्लाइंट लाइब्रेरी संस्करण असमर्थित है

यह त्रुटि लाइन cx_Oracle.init_oracle_client(lib_dir=r"instantclient_19_9") में होती है। ODPI लॉग के अनुसार, Oracle इंस्टेंट क्लाइंट सफलतापूर्वक लोड हो जाता है, लेकिन सत्यापन करते समय त्रुटि उत्पन्न होती है। समस्या सिस्टम पर किसी भिन्न Oracle इंस्टेंट क्लाइंट संस्करण के कारण नहीं है। मैंने सिस्टम पर अन्य संस्करणों के लिए जाँच की है, लेकिन कोई भी नहीं है। साथ ही, जब मैं ओरेकल इंस्टेंट क्लाइंट को हटाता हूं जिसे मैं लोड करने का प्रयास कर रहा हूं, तो एक अलग त्रुटि होती है, जो कहती है कि ओरेकल इंस्टेंट क्लाइंट नहीं मिला। जब मैं डेटाबेस कनेक्शन का मज़ाक उड़ाते या छोड़ते समय एप्लिकेशन को पैकेज करता हूं, तो पैकेजिंग ठीक काम करती है।

मैंने दो अलग-अलग प्रणालियों पर सब कुछ करने की कोशिश की है, जिस पर मैं समान मुद्दों का अनुभव करता हूं। कोई अन्य व्यक्ति भी मेरे मुद्दों को पुन: पेश कर सकता है। साथ ही, मैं इस त्रुटि को निम्नलिखित खिलौना उदाहरण के साथ दोहरा सकता हूं:

कोई Oracle डेटाबेस मौजूद नहीं होना चाहिए। Oracle इंस्टेंट क्लाइंट को उस फ़ोल्डर में स्थापित करने की आवश्यकता है जहां निम्न फ़ाइल स्थित है।

import cx_Oracle

if __name__ == "__main__":
    cx_Oracle.init_oracle_client(lib_dir=r"instantclient_19_9")

मैंने कैसे पैक किया:

  • किसी फोल्डर में जाएं, जिसमें आप एप्लिकेशन को पैकेज करना चाहते हैं। मैं इसे मिनिस्टलर कहूंगा।
  • सुनिश्चित करें कि यह खाली है।
  • अजगर-एम PyInstaller --नाम आवेदन C:\path\to\application.py
  • अजगर-एम PyInstaller application.spec
  • exe ministaller\dist\applicationfolder में स्थित है। त्रुटि संदेश देखने के लिए इसे cmd के माध्यम से कॉल करें।
0
Luca 19 फरवरी 2021, 18:43

2 जवाब

सबसे बढ़िया उत्तर

मैंने इस प्रश्न को PyInstaller GitHub पर पोस्ट किया है, और वहां दिए गए उत्तर ने मेरे लिए समस्या हल कर दी है: https://github.com/pyinstaller/pyinstaller/issues/5572

0
Luca 23 फरवरी 2021, 16:50

ट्रिपल चेक सही Oracle क्लाइंट लोड किया जा रहा है। पायथन शुरू करने से पहले पर्यावरण चर DPI_DEBUG_LEVEL को 64 पर सेट करें। (cx_Oracle इनिशियलाइज़ेशन डॉक्यूमेंटेशन देखें)। यह दिखाएगा कि कैसे cx_Oracle तत्काल क्लाइंट पुस्तकालयों की तलाश कर रहा है, और आपको यह सुनिश्चित करने देगा कि उपयोग किए जा रहे कंप्यूटर पर कहीं कोई अन्य (पुराना) oci.dll नहीं है।

जांचें कि आप एक समर्थित ओएस संस्करण पर हैं (यानी विंडोज 7 नहीं)।

जांचें कि आपके पास सभी तत्काल ग्राहक पुस्तकालय हैं (जाहिर है कि आपको जेडीबीसी फाइलों की आवश्यकता नहीं है): https://docs.oracle.com/en/database/oracle/oracle-database/19/lnoci/instant-client .html#GUID-6895DB45-97AA-4738-9959-BD677D610186

सुनिश्चित करें कि कंप्यूटर में सही वीएस पुनर्वितरण योग्य स्थापित है।

0
Christopher Jones 22 फरवरी 2021, 05:32