2017-09-13 87 views
0

我用的燒瓶中,具有以下結構蟒蛇導入庫沒有模塊名爲

<root> 
manage_server.py 
cas <directory> 
--- __init__.py 
--- routes.py 
--- models.py 
--- templates <directory> 
--- static <directory> 
--- formmodules <directory> 
------ __init__.py 
------ BaseFormModule.py 
------ Interview.py 

在routes.py,我試圖創建面試模塊在採訪類的一個實例,像這樣

my_module = "Interview" 
module = importlib.import_module('formmodules."+my_module) 

我這裏得到一個錯誤,說

ImportError: No module named formmodules.Interview 

有關初始化文件的一些信息:

/cas/formmodules/__init__.py is empty 
/cas/__init__.py is where I initialize my flask app. 

讓我知道是否有助於瞭解任何這些文件的內容。

+0

「formmodules」是否是cas的子目錄? – jwodder

+0

是的,formodules是cas的子目錄 –

回答

2

這是古典相對與絕對進口問題之一。

formmodules只存在相對於cas,但import_module做絕對導入(與from __future__ import absolute_imports一樣)。由於formmodules無法通過sys.path找到,導入失敗。

解決此問題的一種方法是使用relative import

如果用相對術語指定名稱,那麼必須將package參數指定給作爲解析包名稱的錨點的包。

你可能想嘗試:

module = importlib.import_module('.formmodules.' + my_module, package=__package__) 

注意.

另一種選擇是與sys.path混淆,這裏確實沒有必要。

+1

我幾乎錯過了領先期。很棒! –

相關問題