2013-02-02 12 views
27

मैं extended.py नाम के एक मॉड्यूल जो निम्न पंक्ति शामिल है:एक निर्देशिका में हालांकि __init__.py साथ संकुल 'का प्रयास किया गया रिश्तेदार गैर पैकेज में आयात'

from .basic import BasicModule 

और फ़ाइल basic.py रूप में एक ही निर्देशिका में रहता है __init__.py करता है। हालांकि, जब मैं कोशिश इसे चलाने के लिए के रूप में:

ValueError: Attempted relative import in non-package 

इसके अलावा पंक्ति जोड़कर:

from __future__ import absolute_import 

समस्या हल नहीं होती

python extended.py 

मैं त्रुटि मिलती है। शायद मैं स्पष्ट देखने के लिए बहुत थक गया हूं - लेकिन मुझे यहां समस्या दिखाई नहीं दे रही है।

+1

संभावित डुप्लिकेट [\ _ \ _ init \ _ \ _। Py] के साथ गैर-पैकेज में सापेक्ष आयात का प्रयास किया गया है (http://stackoverflow.com/questions/11536764/attempted-relative-import-in-non- पैकेज-इन-इन-इन-पीआईटी) – BrenBarn

+0

'python -m parent_directory.extended' के बारे में कैसे? – SparkAndShine

+0

[संभवतः पाइथन में सापेक्ष आयात कैसे करें?] (Http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python) –

उत्तर

47

सापेक्ष आयात केवल पैकेज के लिए काम करते हैं, लेकिन जब आप extended.py में आयात करते हैं तो आप इसके बजाय शीर्ष-स्तरीय मॉड्यूल चला रहे हैं।

वर्तमान निर्देशिका में __init__.py फ़ाइल हो सकती है लेकिन यह अभी तक पैकेज के exended.py भाग नहीं बना सकती है।

किसी पैकेज के लिए विचार करने के लिए, आपको निर्देशिका नाम आयात करने की आवश्यकता है। निम्नलिखित काम करेगा:

main.py 

packagename\ 
    __init__.py 
    basic.py 
    extended.py 

तो main.py पुट में:

import packagename.extended 

और केवल तो एक पैकेज की extended हिस्सा है और रिश्तेदार आयात काम करते हैं।

रिश्तेदार आयात में अब से, packagename अभिभावक होने के लिए कुछ है।

+3

लेकिन मैं कैसे ' उस मामले में unittests'? क्या मुझे आयात के इन मामलों के लिए एक अजगर तर्क (-एम) निर्दिष्ट करना है? – Alex

+0

किसी पैकेज में परिभाषित नहीं होने के लिए, सापेक्ष आयात का उपयोग न करें, इसके बजाय पूर्ण आयात का उपयोग करें। एक unittest स्क्रिप्ट पैकेज का हिस्सा नहीं है, यह एक बाहरी लिपि है। –

+0

मैंने हमेशा सोचा कि किसी को एक ही मॉड्यूल के अंदर unittests रखना चाहिए? क्या पाइथन के साथ इकाई पर एक अच्छा प्रथा या पीईपी है? – Alex

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