2014-10-01 80 views
1

時,按照在this SO answer說明我已經創建了一個Python包與子包的子文件夾,每一個__init__.py文件(這些都是完全空)。導入錯誤:沒有模塊名爲'導入我自己的子包

top_module 
    __init__.py 
    module_a.py 
     sub_module 
      __init__.py 
      module_c.py 

我可以導入頂層模塊,而是試圖在ImportError導入一個子模塊的結果:

>>> import top_module 
>>> import top_module.sub_module 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named sub_module 

在IPython中,我可以自動完成top_model.向我展示module_a.py但不sub_module

按照說明在this SO answer但我只是得到:

>>> top_module.__file__ 
'top_module.pyc' 

這還不是特別有用的。有趣的是,__package__給我:

>>> print top_module.__package__ 
None 

我可以這樣做:

>>> import top_module 
>>> import sub_module.module_c 

那麼,爲什麼不import top_module.sub_module.module_c

+0

當您運行這些命令時,您處於哪個目錄? – 2014-10-07 13:32:56

+0

好問題。我要麼是a)在命令行,在top_module目錄中,或者b)在Spyder中,將top_module目錄添加到該IDE的「PYTHONPATH管理器」工具中。 – LondonRob 2014-10-07 13:58:07

回答

2

我已經計算出我的問題是什麼(這是一個非常愚蠢的錯誤,我很害怕。)

我有我的PYTHONPATH設置爲

/path/to/top_module 

和在做

import module_a 

這當然有效。但是,試圖做

import top_module.submodule 

沒有工作,因爲PYTHONPATH並不「知道」 top_module,這是已經top_module

1

嘗試from sub_module.module_c import *

+0

這有效。到底他媽發生了什麼?我不應該能夠'導入top_module.sub_module'嗎? – LondonRob 2014-10-01 15:19:42

+0

@LondonRob我會認爲你可以。 Python的導入系統對我來說似乎一直很笨拙。 – Undo 2014-10-01 15:23:26

+0

感謝@Undo。我已經調整了我的問題以反映這些新信息。 – LondonRob 2014-10-01 15:27:51

相關問題