2012-01-30 11 views
9

क्या "imp" के साथ एक पूर्ण/सापेक्ष पथ का उपयोग कर एक ही निर्देशिका में निर्भरताओं के साथ मॉड्यूल आयात करने का कोई तरीका है?आईपी के साथ समान पूर्ण/सापेक्ष पथ में निर्भरताओं के साथ मॉड्यूल कैसे आयात करें?

. 
├── importFrom 
│   ├── dependant.py 
│   └── dependence.py 
└── test.py 

फ़ाइल test.py आयात का उपयोग कर dependant.py:

यहाँ निर्देशिका संरचना इस प्रकार है

modname=imp.load_source("testImp","importFrom/dependant.py") 

जो बारी में आयात के साथ direcly dependence.py:

import dependence 

कॉलिंग test.py

Traceback (most recent call last): 
    File "test.py", line 3, in <module> 
    modname=imp.load_source("testImp","importFrom/dependant.py") 
    File "importFrom/dependant.py", line 1, in <module> 
    import dependence 
ImportError: No module named dependence 

लोड_सोर्स लोडर मॉड्यूल को लोडर में पथ जोड़ने के लिए उपयुक्त हो सकता है ताकि यह स्वचालित रूप से इसकी सापेक्ष निर्भरता पा सके। अभी के लिए एकमात्र विकल्प मैंने पाया सिस्टम पथ को जोड़ने है, test.py

संपादित में डाल: मैं पथ के साथ रिश्तेदार आयात करने के लिए एक बेहतर तरीका मिल गया है, प्राप्त करने के लिए फ़ाइल जोड़ा (वर्तमान कार्यशील निर्देशिका से स्वतंत्रता) फोन करने वाले का निरपेक्ष पथ

sys.path.append(os.path.join(os.path.dirname(__file__), 'importFrom')) 
import dependant 

उत्तर

0

आईएमओ load_source के साथ व्यवहार्य नहीं है जो आवश्यक चीजें नहीं करता है ताकि आपकी 'dependant.py' फ़ाइल में आयात इसकी मूल निर्देशिका पर विचार करें।

आप चाहिए या तो क्या सुझाव दिया गया है कर (निर्देशिका और मॉड्यूल में पूर्ण आयात में __init__.py), या निचले स्तर find_module/load_module कार्य करता है जो चीजों को इस तरह की (find_module 'पथ' को देखने के तर्क) की अनुमति देता का उपयोग

+0

का उपयोग कर tup = imp.find_module ("निर्भर", ["/ opt/importFrom /", "अन्य"]) imp.load_module ("आश्रित", tup [0], tup [1], tup [2]) वही त्रुटि देता है "कोई मॉड्यूल निर्भरता नाम नहीं है"। – a1an

+0

मुझे यह भी लगता है कि यह Python 2.7 के रूप में load_source के साथ व्यवहार्य नहीं है, इसलिए सही उत्तर "व्यवहार्य नहीं है", वर्कअराउंड दृष्टिकोण का उपयोग करना है – a1an

0

आप importFrom निर्देशिका में __init__.py की आवश्यकता है।

In [5]: ls importFrom/ 
dependance.py dependant.pyc dependence.pyc __init__.pyc 
dependant.py dependence.py __init__.py 

In [6]: from importFrom import dependant 

In [7]: dependant.dependence 
Out[7]: <module 'importFrom.dependence' from 'importFrom/dependence.py'> 

इसके बजाय test में dependant आयात करने की, मैं अजगर दुभाषिया का इस्तेमाल किया है उत्पादन दिखाने के लिए। dependant.py में, dependance आयात किया गया है।

+1

यह मानक आयात के लिए पथ में जोड़ने से बचने की अनुमति देता है, यह अभी भी imp.load_source के साथ काम नहीं करता है, इसके अलावा मुझे लगता है कि यदि मॉड्यूल आयात किया जाए तो यह भी काम नहीं करेगा, एक पूरी तरह से अलग निर्देशिका में – a1an

+0

फ़ाइल बनाने के लिए किया गया था आयात से __init__.py निर्देशिका से? – Kracekumar

+0

मैंने __init__.py बनाया और test.py में आयात आयात From.dependant को काम किया जो काम करता है। फिर भी यह काम करता है क्योंकि importFrom निर्देशिका test.py रखने वाली निर्देशिका का प्रत्यक्ष बच्चा है, इसे एक पूर्ण पथ मानक आयात में निर्दिष्ट नहीं किया जा सकता है। – a1an

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

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