2011-08-23 7 views
23

संक्षिप्त प्रश्न
क्या कोई पाइंस्टॉलर निष्पादन योग्य बनाते समय आर्किटेक्चर (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 में काम करेगा। सफलता! यह विन्यास अच्छी तरह से काम करता है; हालांकि मैं दृढ़ता से विश्वास करता हूं कि यह सबसे अच्छा समाधान नहीं है क्योंकि यह पूरी तरह से पुराने ओएसएल पर चलने वाले पुराने डीएलएल पर निर्भर करता है।

+2

मुझे पता है कि आपके पास एक समाधान समाधान है, लेकिन क्या आपने Win7 मशीन पर 32-बिट पायथन स्थापित करने और build.py चलाने के लिए इसका उपयोग करने का प्रयास किया था? आपको सभी 32-बिट निर्भरताओं को भी इंस्टॉल करना होगा, लेकिन इसे सही 32-बिट DLL को पकड़ना चाहिए। (दूसरी तरफ, यदि आप XP का समर्थन करने की आवश्यकता है तो यह काम नहीं कर सकता है।) – Velociraptors

+0

@ वेलोसिराप्टर: एकमात्र डीएलएल जो इसे पकड़ने लग रहा था कि मैं नहीं चाहता था कि यह यूएसबी डोंगल के लिए डीएलएल था। यह डिवाइस का सॉफ्टवेयर केवल 32 बिट है, इसलिए मैं एक अंग पर जा रहा हूं और अनुमान लगा रहा हूं कि ड्राइवर 32 बिट भी था। तो इस मामले में मुझे लगता है कि यह एक 7 बनाम एक्सपी ड्राइवर असंगतता मुद्दा था। –

उत्तर

7

यदि आप कोई एप्लिकेशन बना रहे हैं और यह 32-बिट विंडोज़ पर ठीक चलता है, तो 64-बिट संस्करण बनाने की कोई आवश्यकता नहीं है। बस 32-बिट संस्करण बनाएं और इसे दोनों आर्किटेक्चर पर चलाएं। WOW64 क्या है।

यदि आपको केवल लाइब्रेरी या सुविधा का उपयोग करने की आवश्यकता है जो केवल 64-बिट है, तो बस 64-बिट संस्करण बनाएं। 32-बिट संस्करण बनाने में कोई बात नहीं है यदि सुविधा केवल 64-बिट है।

दोनों 64-बिट और 32-बिट संस्करण बनाने का एकमात्र कारण 64-बिट विंडो के बढ़ते पता स्थान का लाभ उठाना है। अर्थात। यदि आप 1 या 2 जीबी से अधिक स्मृति आवंटित करना चाहते हैं। एक उदाहरण एक छवि संपादन अनुप्रयोग, या डेटा मैनिपुलेशन अनुप्रयोग हो सकता है। फिर आप मंच के बाधाओं के भीतर 32-बिट प्लेटफ़ॉर्म पर चल सकते हैं लेकिन 64-बिट प्लेटफ़ॉर्म पर बड़ी छवियों या डेटा की बड़ी मात्रा संपादित कर सकते हैं।

आईओओ, आपके मामले के लिए @ वेलोसिराप्टर के सुझाव का पालन करें और यदि आप 32-बिट एक्सई बना रहे हैं तो 32-बिट पायथन में निर्माण करें।

+2

प्रतिक्रिया में इतनी देर देरी के लिए खेद है। मैं इस तथ्य से आपसे सहमत हूं कि यदि 64 बिट की आवश्यकता नहीं है, तो इसका उपयोग न करें। हालांकि अगर मैं विंडोज 7 64 बिट और 64 बिट पायथन चला रहा हूं, तो मैं 32-बिट संस्करण कैसे बना सकता हूं? यह असली सवाल है। –

+0

@AdamLewis, 32-बिट पायथन भी इंस्टॉल करें, और अपनी बिल्ड-स्क्रिप्ट दोनों निष्पादन योग्य उत्पन्न करें। – Ben

10

पायइंस्टॉलर आपके द्वारा बनाए जाने वाले पायथन के आधार पर एक बाइनरी उत्पन्न करता है। तो यदि आप पाइथन 2.7 64 बिट का उपयोग करते हैं, जहां तक ​​मुझे पता है, 32 बिट निष्पादन योग्य बनाने के लिए। ऐसा इसलिए है क्योंकि Pyinstaller सभी मॉड्यूल और उनकी निर्भरताओं (dlls, pyds आदि ..) को संग्रहीत करता है जो कि पाइथन इंस्टॉल के कारण 64 बिट हैं।

जैसा कि पहले से ही कहा गया है कि यह 32-बिट बाइनरी बनाने के लिए क्रॉस संगतता समस्याओं के कारण बेहतर है। शायद आप अपना प्रश्न अधिक निर्दिष्ट कर सकते हैं।

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