2011-02-13 44 views
1

我已經通讀了幾個類似的問題,特別是this one about imp.load_module這似乎接近我想要的,但我不明白爲什麼我仍然得到ImportErrors 。這是我的文件夾層次結構:當從子文件夾自動導入模塊,他們的進口失敗

program\ 
    __init__.py 
    main.py 
    thirdparty\ 
    __init__.py 
    css\ 
     __init__.py 
     css.py 
     utils\ 
     __init__.py 
     http.py 

main.py我有以下代碼。這旨在搜索thirdparty\目錄並加載找到的每個模塊。每個模塊都在它自己的獨立目錄中。

import os 
import imp 

for root, dirs, files in os.walk("thirdparty"): 
    for source in (s for s in files if s.endswith(".py")): 
     name = os.path.splitext(os.path.basename(source))[0] 
     m = imp.load_module(name, *imp.find_module(name, [root])) 

的問題是,css.py恰巧使用它自己的子文件夾,它加載的東西掉的,utils。它有一條線說:

from utils import http 

而這就是它失敗的地方。運行main.py時出現此錯誤。

​​

我很難過。 css.py自帶在自己的文件夾中,當我分別運行css.py時,它會輸入utils就好了。這是什麼造成的?

from .utils import http 

或通過添加文件夾導入到Python的路徑:

sys.path.append(os.path.join(root, source)) 

當您導入模塊thirdparty,地方

+0

我遇到了這個完全相同的問題。你有沒有找到答案?在Python 3中imp模塊已被棄用,以支持importlib,但我還沒有嘗試過。 – 2012-06-21 14:59:39

回答

0

也許你可以通過改變進口來解決這個Python查找模塊仍然是主要目錄。最初的導入是有效的,因爲你給出了正確的路徑imp.find_module,但是之後Python不知道在哪裏尋找模塊。