2014-07-08 7 views
8

मैं अपने पायथन आयात कैसे व्यवस्थित करूं ताकि मेरे पास ऐसी निर्देशिका हो।पाइथन समानांतर निर्देशिका से मॉड्यूल आयात कर रहा है

project 
|  \ 
|  __init__.py 
|  
src 
| \ 
| __init__.py 
| classes.py 
| 
test 
    \ 
    __init__.py 
    tests.py 

और फिर अंदर classes.py आयात करने के लिए

मैं कोड tests.py

from .. src.classes import(
    scheduler 
    db 
) 

में इस तरह की तलाश में मिल गया है में सक्षम हूँ हो और /project/test/tests.py

SystemError: Parent module '' not loaded, cannot perform relative import 

किसी को भी पता है कि क्या करना है?

उत्तर

12

अजगर स्क्रिप्ट आप PYTHONPATH को लांच वाले फ़ोल्डर कहते हैं, इसलिए यदि आप

python test/tests.py 

चलाने केवल फ़ोल्डर test पथ (नहीं आधार निर्देशिका है कि आप में आदेश को क्रियान्वित करने कर रहे हैं में जोड़ा जाता है)।

इसके बजाय इतना की तरह अपने परीक्षण चलाने:

python -m test.tests 

यह अजगर रास्ते पर आधार dir जोड़ देगा, और उसके बाद कक्षाएं एक गैर रिश्तेदार आयात के माध्यम से सुलभ हो जाएगा:

from src.classes import etc 

हैं आप वास्तव में सापेक्ष आयात शैली का उपयोग करना चाहते हैं, तो आपके 3 डीआईआर को पैकेज निर्देशिका में जोड़ा जाना चाहिए

package 
* __init__.py 
* project 
* src 
* test 

और तुम

python -m package.test.tests 

साथ पैकेज dir ऊपर से निष्पादित यह भी देखें:

+0

धन्यवाद। यह काम किया। – Zack

+0

यदि आपको मिलता है, "test.tests नामक कोई मॉड्यूल नहीं है", तो सुनिश्चित करें कि आपके पास 'test_' निर्देशिका में' __init __। Py' है। –

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