2013-07-18 6 views
5

पदानुक्रम:पायथन: दादा-दादी निर्देशिका में आयात फ़ाइल

scripts/ 
    web/ 
     script1.py 
    tests/ 
     script2.py 
common/ 
    utils.py 

मैं कैसे script1 और script2 में utils आयात होता है, और अब भी उन लिपियों अलग से चलाने में सक्षम हो (अर्थात, python script1.py)। मैं __init__.py फ़ाइलों को कहां रखूंगा, और क्या यह इस बारे में जाने का सही तरीका है? धन्यवाद!

उत्तर

6
package/ 
    __init__.py 
    scripts/ 
     web/ 
      __init__.py 
      script1.py 
     tests/ 
      __init__.py 
      script2.py 
    common/ 
     __init__.py 
     utils.py 

मैंने आपके पैकेज में खाली __init__.py फ़ाइलों का एक गुच्छा जोड़ा है।

from package.common import utils 

या समतुल्य:

import package.common.utils as utils 

नकारात्मक पक्ष यह है कि यहाँ package किसी भी तरह PYTHONPATH पर होना चाहिए है अब आप 2 विकल्प है, तो आप एक पूर्ण आयात का उपयोग कर सकते हैं। यह सिर्फ यह बताने के लिए जहां चीजें से आ रहे हैं बहुत कठिन हो जाता है ...

from ....common import utils 

मैं आम तौर पर इस दृष्टिकोण को हतोत्साहित होगा (यह है कि 4 अवधि या 6?): दूसरा विकल्प relative imports उपयोग करने के लिए है।

+0

जब मैं सापेक्ष आयात का उपयोग करके script1.py चलाने का प्रयास करता हूं, तो मुझे त्रुटि मिलती है: 'ValueError: गैर-पैकेज में सापेक्ष आयात का प्रयास किया गया –

+0

ऐसा इसलिए है क्योंकि जब आप इसे स्टैंड-अलोन प्रोग्राम के रूप में चलाते हैं, तो पाइथन नहीं करता है पता है कि यह एक पैकेज में है (यह '__init __। py' फ़ाइलों के निशान का पालन करके वहां नहीं आया था)। यह एक और कारण है कि मैं अधिक स्पष्ट संस्करण क्यों पसंद करता हूं। – mgilson

+0

हम्म इसलिए मैंने अभी पूर्ण आयात का उपयोग करने की कोशिश की, और अब यह मॉड्यूल नहीं ढूंढ सकता है। मुझे 'पायथनपथ' के साथ क्या करना है? धन्यवाद! –

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