2011-01-27 14 views
9

मेरे पास निर्देशिका में कई पायथन मॉड्यूल हैं।मैं एक मॉड्यूल कैसे आयात करूं जिसका नाम मेरे पैकेज में मॉड्यूल के साथ संघर्ष करता है?

उसी निर्देशिका में, मेरे पास एक पैकेज tests है।

मैं tests में मॉड्यूल का नाम देना चाहता हूं, जिसमें मॉड्यूल के समान परीक्षण हैं, हालांकि निश्चित रूप से यह महत्वपूर्ण नहीं है।

तो, tests.foo में मैं import foo लिखता हूं। यह बहुत अच्छा काम नहीं कर रहा है - यह tests.foo आयात करता है, शीर्ष-स्तर foo नहीं।

क्या मैं वही कर सकता हूं जो मुझे चाहिए, या क्या मुझे परीक्षण मॉड्यूल test_foo पर कॉल करना होगा?

क्षमा करें अगर यह स्पष्ट है या एक डुप्ली है, तो मेरी खोज-फू विफल हो गई है।

इस तरह पूरा पैकेज पथ

उत्तर

7

test_foo.py एक की तरह लगता है इस मामले में उचित समाधान।

आप परीक्षण मॉड्यूल का नाम बदलने नहीं करते हैं तो अजगर पैकेज में tests निर्देशिका (tests/__init__.py फ़ाइल जोड़ने) बनाने के लिए और absolute imports का उपयोग करें:

from __future__ import absolute_import 
import foo     # import global foo.py, the first foo.py in sys.path 
import tests.foo as test_foo # import tests/foo.py 
3

उपयोग:

--Package 
    |-- __init__.py 
    |-- foo.py 
    | 
    |-- tests 
    | | -- __init__.py 
     | -- foo.py 

tests/foo.py में क्या

from Package import foo 

और मुझे लगता है कि प्रलेखन के इस हिस्से से आपको रुचिकर कर सकते हैं: http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

+0

धन्यवाद, लेकिन "ValueError: उच्चस्तरीय पैकेज से परे का प्रयास किया गया सापेक्ष आयात"। यह पायथन 2.6 है, अगर इससे कोई फर्क पड़ता है। आप शायद सही हैं कि मुझे सब कुछ शीर्ष स्तर के पैकेज में पहले स्थान पर रखना चाहिए था। मुझे अनिश्चितता है कि अगर वह परिवर्तन अब दर्द रहित होगा। –

+0

@ स्टेव जेसोप: माफ करना मेरा मतलब था 'foo' मॉड्यूल आयात करने के लिए पूर्ण पैकेज पथ का उपयोग करें, मैं इसे संपादित करता हूं, मुझे आशा है कि अब यह स्पष्ट है – mouad

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