2017-08-01 168 views
8

當前嘗試在Python3中工作並使用絕對導入將一個模塊導入另一個模塊,但出現錯誤ModuleNotFoundError: No module named '__main__.moduleB'; '__main__' is not a package。考慮這個項目結構:ModuleNotFoundError:沒有名爲'__main __。xxxx'的模塊; '__main__'不是包

proj 
    __init__.py3 (empty) 
    moduleA.py3 
    moduleB.py3 

moduleA.py3

from .moduleB import ModuleB 
ModuleB.hello() 

moduleB.py3

class ModuleB: 
    def hello(): 
     print("hello world") 

然後運行python3 moduleA.py3給出了錯誤。這裏需要改變什麼?

謝謝!

+0

領先的'。'只有當它所在的文件位於包中時,才按照您希望的方式工作。 – anonymoose

+2

@anonymoose是「proj」不是一個包嗎?因爲它有一個__init __。py3? – mpseligson

+1

你不能使用領先的'。'在導入時,當您直接使用Python運行文件時,可以按照您希望的方式工作。您必須導入文件。如果你在'proj'之外放置了另一個具有'import moduleA'的文件,我相信你會看到你期待的輸出。 – anonymoose

回答

2

.moduleB是一個相對導入。相對僅在父模塊導入或首先加載時纔有效。這意味着您需要在當前運行時環境的某處導入proj。當你使用命令python3 moduleA.py3時,它沒有機會導入父模塊。您可以:

  • from proj.moduleB import moduleB
  • 您可以創建另一個腳本,讓我們說run.py,調用from proj import moduleA

祝你旅途的Python真棒土地。

相關問題