संक्षिप्त प्रश्न
क्या कोई पाइंस्टॉलर निष्पादन योग्य बनाते समय आर्किटेक्चर (32 बिट बनाम 64 बिट) को नियंत्रित/गारंटी देने का कोई तरीका है?क्या मैं एक पाइंस्टॉलर निष्पादन योग्य बनाते समय आर्किटेक्चर (32 बिट बनाम 64 बिट) को नियंत्रित कर सकता हूं?
पृष्ठभूमि
मैं छोटी बातों है कि मैं एक कठिन समय अतीत की तलाश कर रहा हूँ के एक मेजबान के साथ 64 बिट समर्थन की कमी की वजह pyinstaller को py2exe से चले गए। तो उस नोट पर, मैं पर वापस जाने के लिए पसंद करूंगा। मैंने पाइथन 2.7 64 बिट का उपयोग करके दो अनुप्रयोग विकसित किए हैं और 32 बिट मशीनों पर चलते समय प्रदर्शन समस्याएं हैं I
पहला एक साधारण WxPython GUI (संस्करण 2.9) है और यूएसबी ड्राइवर के लिए विंडोज़ डीएलएल फ़ाइल से कनेक्ट होता है। यह 32 बिट के रूप में चलाने के लिए सुंदर "सुरक्षित" लगता है क्योंकि कोई मॉड्यूल नहीं है जो केवल 64 बिट है। हालांकि यूएसबी डिवाइस से बात करते समय 32 बिट विंडोज एक्सपी पर चलने पर यह एप्लिकेशन भयानक प्रदर्शन के मुद्दों में है।
दूसरा एप्लिकेशन बहुत बड़ा है और मैंने वास्तुकला के मुद्दों के डर के कारण अभी तक निर्माण और चलाने का प्रयास नहीं किया है। इस एप्लिकेशन में 64 बिट केवल मॉड्यूल (एक के लिए psycopg2) का उपयोग किया जाता है। 32 बिट निष्पादन योग्य के रूप में चलाने के लिए असंभव असंभव होने पर मैं इसे बनाने की कोशिश करने से दूर रहना चाहूंगा।
वर्तमान विचार
मुझे लगता है कि यह (यदि मॉड्यूल 32 बिट समर्थन किया है) संभव हो सकता है build.py चल अजगर के साथ 32bit मोड में मजबूर द्वारा। क्या इसका कोई मतलब है?
अद्यतन
मैं पहली बार कार्यक्रम मैं निर्माण कर रहा था पर कई सफलताओं था। यह पता चला कि प्रदर्शन मुद्दे पूरी तरह से दो मशीनों की गति पर आधारित था। मेरे देव मशीन में पर्याप्त यूएसबी डिवाइस को पर्याप्त रूप से मतदान करने के लिए पर्याप्त शक्ति थी और बहुत धीमी परीक्षण प्लेटफार्म (विंडोज एक्सपी) नहीं था।
मैंने यूएसबी पोर्ट को मतदान करने के तरीके को संशोधित करके इस मुद्दे को ठीक किया। अब यह तय किया गया था, मैं दोनों प्रणालियों पर exe चला सकता है। एक फ़ाइल के रूप में निष्पादन योग्य बनाने की कोशिश करते समय एक नई समस्या आई थी। Pyinstaller's Build.py चलाते समय, यह सभी आवश्यक DLL में खींचता है जिसे ऐप को चलाने की आवश्यकता होती है। यह पहली बार बहुत अच्छा काम करता था, लेकिन जब मैंने विंडोज 7 64 बिट पर बनाया गया एकल एक्सई चलाने की कोशिश की, तो यह विंडोज एक्सपी पर नहीं चलेगा क्योंकि यूएसबी डोंगल के डीएलएल को वैध डीएलएल के रूप में पहचाना नहीं गया था।
दोनों सिस्टमों पर चलाने के लिए एकल exe प्राप्त करने के लिए, मैंने पहले डीएसएल को .spec फ़ाइल से निकालने का प्रयास किया (जो एक पायथन स्क्रिप्ट प्रतीत होता है)। यह सुविधाजनक था क्योंकि मैं साधारण पायथन सूची संशोधक के साथ बिल्ड कमांड से पहले शामिल की सूची को संशोधित करने में सक्षम था। मेरी आशा थी कि यदि डीएलएल exe की temp निर्देशिका में नहीं मिला था तो यह इसे सिस्टम पाथ पर मिलेगा। हालांकि यह दृष्टिकोण काम हो सकता है, मैं इसे कई त्रुटियों को फेंकने के बिना चलाने के लिए नहीं मिल सका।
मेरा दूसरा प्रयास विंडोज एक्सपी मशीन (डीएलएल एम्बेडेड छोड़कर) पर एप्लिकेशन बनाना था ताकि उम्मीद है कि Win XP DLL विंडोज 7 में काम करेगा। सफलता! यह विन्यास अच्छी तरह से काम करता है; हालांकि मैं दृढ़ता से विश्वास करता हूं कि यह सबसे अच्छा समाधान नहीं है क्योंकि यह पूरी तरह से पुराने ओएसएल पर चलने वाले पुराने डीएलएल पर निर्भर करता है।
मुझे पता है कि आपके पास एक समाधान समाधान है, लेकिन क्या आपने Win7 मशीन पर 32-बिट पायथन स्थापित करने और build.py चलाने के लिए इसका उपयोग करने का प्रयास किया था? आपको सभी 32-बिट निर्भरताओं को भी इंस्टॉल करना होगा, लेकिन इसे सही 32-बिट DLL को पकड़ना चाहिए। (दूसरी तरफ, यदि आप XP का समर्थन करने की आवश्यकता है तो यह काम नहीं कर सकता है।) – Velociraptors
@ वेलोसिराप्टर: एकमात्र डीएलएल जो इसे पकड़ने लग रहा था कि मैं नहीं चाहता था कि यह यूएसबी डोंगल के लिए डीएलएल था। यह डिवाइस का सॉफ्टवेयर केवल 32 बिट है, इसलिए मैं एक अंग पर जा रहा हूं और अनुमान लगा रहा हूं कि ड्राइवर 32 बिट भी था। तो इस मामले में मुझे लगता है कि यह एक 7 बनाम एक्सपी ड्राइवर असंगतता मुद्दा था। –