मेरे पास एक पायथन प्रोग्राम है जो मैं py2exe का उपयोग कर Windows .exe पर संकलित करता हूं। Inno Setup का उपयोग करके, मैं एक विंडोज इंस्टालर बनाता हूं।विंडोज़ पर पायथन के लिए आयात() पथ आयात करने के लिए स्क्रिप्ट के काम करने वाले फ़ोल्डर को जोड़ने का सबसे अच्छा तरीका?
मेरे प्रोग्राम की प्रकृति ऐसी है कि यह प्लगइन का उपयोग करती है जिसे बाद में __import__()
कथन का उपयोग करके आयात किया जाता है। ये प्लगइन्स एक 'प्लगइन्स' फ़ोल्डर में स्थित हैं, जो स्वयं ही एक उपफोल्डर के रूप में स्थित है जहां मेरे प्रोग्राम की .exe फ़ाइल रहता है।
अब, कार्यक्रम प्लगइन्स को खोजने के लिए, यह पहले बयान somwhere निम्नलिखित मेरी फाइल के शीर्ष पर था:
sys.path+= ['.']
बहरहाल, यह अच्छी तरह से काम नहीं कर रहा था, जब उपयोगकर्ता विंडोज के माध्यम से कार्यक्रम शुरू कर दिया 'मेनू शुरू करें, क्योंकि स्पष्ट रूप से कार्य फ़ोल्डर प्रारंभ मेनू पर सेट किया गया था (इसके बजाय .exe कहां स्थित है)। तो '.'
जो मैं चाहता था उसे हल नहीं किया।
मैं, निम्न के बयान बदलकर तय ताकि __import__()
बयान भी फ़ोल्डर है जहाँ .exe स्थित है में लग रहा है (क्योंकि argv[0]
निष्पादन का पूरा पथ है):
sys.path+= [os.path.dirname(sys.argv[0])]
हालांकि, मुझे यकीन नहीं है कि मैंने सही समाधान चुना है या नहीं। विशेष रूप से, क्योंकि मेरा प्रोग्राम क्रॉस-प्लेटफॉर्म (विंडोज़, ओएसएक्स, लिनक्स) और sys.argv documentation का मतलब है argv [0] के बारे में कहता है कि 'यह ऑपरेटिंग सिस्टम निर्भर है कि यह एक पूर्ण पथनाम है या नहीं।'
क्या मुझे इसे अलग-अलग हल करना चाहिए, या मेरा दृष्टिकोण ठीक है?
हम्म, मुझे विश्वास नहीं है क्योंकि '__file__' मेरे विंडोज़ के लिए रिटर्न देता है।exe प्रोग्राम: 'सी: \ प्रोग्राम फ़ाइलें (x86) \ myprogram \ myprogram.exe \ core.pyc'। इसके लिए मुझे लौटाए गए पथ ('core.pyc' और' myprogram.exe') के दो स्तरों को पट्टी करने की आवश्यकता होगी जो ओएसएक्स, लिनक्स, या यहां तक कि टर्मिनल से चलने पर भी हो सकता है। – Rabarberski
फिर सबसे अच्छा समाधान है कॉन्फ़िगरेशन फ़ाइल का उल्लेख @SpencerRathbun – Nilesh