Wednesday, 15 August 2012

python - imp.load_source another file than .py , but a .py also exist in that directory -


मेरे पास यह सेटअप है:

फ़ाइल: a.ext1 a.py

A.ext1 किसी कारण के लिए a.py को लोड करता है, लेकिन एक इंजन के रूप में मुझे फ़ाइल a.ext1 लोड करने की आवश्यकता है।

मैं इसे py3 में ठीक काम कर सकता हूं, लेकिन मैं इसे पी 2 में काम नहीं कर सकता।

यहां मेरा अजगर 2 प्रयास है: ** यह मुख्य प्रवाह है, निश्चित रूप से इसके चारों ओर अधिक कोड।

  फ़ाइल = os.path.abspath (os.path.expanduser ('a.ext1') निर्देशिका = os.path.dirname (फ़ाइल) sys.path.append (निर्देशिका) fullname = 'My.name.space.a' sys.modules ['my.name.space'] = imp.new_module ('my.name.space') x = imp.load_source (पूर्णनाम, फ़ाइल)   

अब, यदि मैं करता हूं; x, यह मुझे बताएगा:

  मॉड्यूल 'my.name.space' से '& gt; पथ & gt; /a.ext1'  

लेकिन अगर मैं dir (x) करता हूँ, तो यह मुझे a.py से सामान देता है। मैं इसे मुझे a.ext1 फ़ाइल से सामान देना चाहता हूं।

कैसे कर सकते हैं मैं इसे py2 पर काम कर रहा हूं?

यहां पीए 3 पर यह काम करता है:

  file = os.path.abspath (os.path.expanduser ('a.ext1 ')) निर्देशिका = os.path.dirname (फ़ाइल) sys.path.append (निर्देशिका) fullname =' my.name.space.a 'लोडर = importlib.machinery.SourceFileLoader (fullname = fullname, path = file) x = Loader.load_module ()  

अब एक्स बिल्कुल वही है जो मैं चाहता हूँ, a.ext1 फ़ाइल, और नहीं .पी

कोई भी विचार है कि मैं कैसे Py2 के लिए यह काम करना है?

(बीटीडब्लू मैंने पढ़ा है सब मैं इस विषय पर स्टैक ओवरफ्लो पर मिल सकता है, लेकिन यह ऐसा कभी नहीं था जहां एक .पी भी अस्तित्व में था)

रिक्त मॉड्यूल और ऐपिंग पथ बनाने के साथ मोंबो जंबो के बारे में पता नहीं, लेकिन 2.7 पर मेरे लिए यह बिल्कुल ठीक काम करता है। निश्चित रूप से एक सरल स्टैंडअलोन उदाहरण के साथ कोई समस्या नहीं होनी चाहिए।

मैं कह सकता हूं कि आपका a.py my.name.space.a में लोड किया जा रहा है के रूप में भी, कार्यक्रम में कहीं और, उस स्थिति में यह सामग्री संघर्ष जो भी आप एक ही मॉड्यूल नाम के अंतर्गत लोड करते हैं केवल एक ही समय में एक दिए गए नाम के एक एकल वैश्विक मॉड्यूल उदाहरण हो सकते हैं, जैसे:

a.py:

  py_stuff = 1  

a.ext1

  ext1_stuff = 1  

test-ok.py:

<पूर्व> आयात छोटा सा भूत = Imp.load_source ('a', 'a.ext1') प्रिंट (x) # & lt; मॉड्यूल 'ए' से 'a.ext1' & gt; प्रिंट (डायर (x)) # ['__builtins__', ..., 'ext1_stuff']

test-not-ok.py:

  आयात आयात आयात कुल्हाड़ी = imp.load_source ('a', 'a.ext1') प्रिंट (x) # & lt; मॉड्यूल 'ए' से 'a.ext1' & gt; प्रिंट (डायर (एक्स)) # ['__बिल्टिन्स__', ..., 'ext1_stuff', 'py_stuff']  

No comments:

Post a Comment