2017-01-17 88 views
0

我有這樣的樹:Python導入不起作用

package/ 
    subpackage1/ 
     __init__.py 
     impl/ 
      __init__.py 
      moduleA.py 
      moduleA_test.py 
    subpackage2/ 
     __init__.py 
     impl/ 
      __init__.py 
      moduleB.py 

moduleA.py我有這樣的代碼:

from subpackage2.impl.moduleB import func_abc 

模塊moduleA_test.py只是進口moduleA並測試其功能。 當在終端中時,如果我在文件夾package中並運行python,然後from subpackage1.impl import moduleA,它可以正常工作。

但是,如果我運行python submodule1/impl/moduleA_test.py(仍位於package文件夾中),代碼會在上面寫入的導入行中引發錯誤。我得到ImportError: No module named subpackage2.impl.moduleB

我也試過用python -m submodule1.impl.moduleA_test.py但沒有運氣。

+0

從哪個目錄運行代碼?如果它在'package'中,那麼我認爲你不應該有任何問題。 –

+0

默認情況下Python會在* current directory *中查找 - 您必須追加到'sys.path'或使用'PYTHONPATH'環境變量。 https://docs.python.org/2/tutorial/modules.html 6.1.2 – cdarke

+0

是的,它在'package'中。我已經更新了這個問題 – thecoparyew

回答

0

當您編寫from subpackage2.impl.moduleB import func_abc時,它將搜索與您的代碼相同的目錄中的subpackage2文件夾,即package.subpackage1.impl。

因此,當您編寫import語句時,它會搜索package.subpackage1.impl.subpackage2.impl.moduleB,它不存在,因此會提供錯誤。