2017-02-16 181 views
1

所以我試圖從導入其子包的包中導入一個模塊。下面是示例代碼:Python3如何導入導入子目錄文件的子目錄文件?

main_directory 
    - main.py 
    subdirectory 
     - __init__.py 
     - test.py 
     subsubdirectory 
      - __init__.py 
      - test2.py 

main.py: 
    from subdirectory import test 
    test.foo1() 

test.py: 
    from subsubdirectory import test2 
    def foo1(): 
     print("foo1") 
     test2.foo2() 

test2.py: 
    def foo2(): 
     print("foo2") 
在這種情況下

,如果我改變

from subsubdirectory import test2 

from .subsubdirectory import test2 

它的作品,因爲我想這是直接的路徑? 但是當我移動到我的子目錄和運行python3 test.py將拋出錯誤:

ModuleNotFoundError: No module named '__main__.subsubdirectory'; '__main__' is not a package 

你能解釋發生了什麼?

+1

請參閱[在非包中嘗試相對導入'儘管在一個目錄中包含__init__.py的包](http://stackoverflow.com/questions/14664313/attempte d-相對導入功能於非封裝雖然-包與 - INIT-PY-中) –

回答

0

如果要使用相對導入,則必須以包的方式運行腳本。

由於在main_directory沒有__init__.py,包是subdirectory

cd ./main_directory/ 
python -m subdirectory.test 
python -m subdirectory.subsubdirectory.test2 

萬一,你想要的main_directory是包名,你必須添加__init__.pymain_directory,那麼,你跑腳本:

cd ./main_directory/../ 
python -m main_directory.subdirectory.test 
python -m main_directory.subdirectory.subsubdirectory.test2