2013-12-21 57 views
4

雖然試圖py.test功能添加到燒瓶中,API在我的源目錄調用py.test當我遇到了以下錯誤消息py.test導入錯誤「 - 'config'not found。」

E    ImportStringError: import_string() failed for 'config'. Possible reasons are: 
E    
E    - missing __init__.py in a package; 
E    - package or module path not included in sys.path; 
E    - duplicated package or module name taking precedence in sys.path; 
E    - missing module, class, function or variable; 
E    
E    Debugged import: 
E    
E    - 'config' not found. 
E    
E    Original exception: 
E    
E    ImportError: No module named config 

這個問題似乎阻止我有我的實例應用瓶後嘗試從config.py(第5行)導入配置。

from flask import Flask 

# Setup app 
app = Flask(__name__) 
app.config.from_object('config') 

# Import views 
from views import * 

if __name__ == '__main__': 
    app.run() 

如果我手動設置配置變量而不是導入它們,一切似乎都會相應地發揮作用。有沒有人遇到過這樣的事情?我無法在文檔中找到任何有用的信息。

回答

11

我想這些的是最有可能的

E   - package or module path not included in sys.path; 
E   - duplicated package or module name taking precedence in sys.path; 

所以我想嘗試的第一件事就是到配置文件重命名爲類似config_default.py

然後你可以嘗試使用真實的對象而不是字符串eg。導入配置自己:

from flask import Flask 
import config 

# Setup app 
app = Flask(__name__) 
app.config.from_object(config) 

但很有可能你會面臨着同樣的錯誤:ImportError: No module named config

您也可以使用app.config.from_pyfile()並指定到您的配置文件的完整路徑:

app.config.from_pyfile('config.py') 

from_pyfile()用途不同的技術來創建對象(它使用[exc](https://github.com/mitsuhiko/flask/blob/master/flask/config.py#L129))。

我自己優先使用from_envvar()並指定在啓動器(supervisord nowadays)中使用哪個配置文件。

+1

非常感謝您! 'from_pyfile('...')'就像一個魅力。感謝相應的文檔。最終我將使用from_envar(...),但現在我仍在開發應用程序(沒有部署腳本和你有什麼)。再次謝謝你! – user1558914

+0

'from __future__ import absolute_import' in case you have myapp.flask.config' or similar。 – letmaik

+0

我更喜歡'from_pyfile',因爲它不會導致錯誤,當你進行交叉包導入,不像'from_object' – benjaminz

3

Twil使app.config.from_object的優點和替代方案。然而,我在遇到以下問題時偶然發現了這個問題Flask Tutorial,我想遵循指南並使用from_object。

我糾正我的問題的方式是我最初把config.py文件放在我的'app'包中。它應該位於我的run.py腳本所在的文件夾之外的應用程序之外。

我希望這個答案可以節省一些時間。

0

更改app.config.from_object(config)app.config.from_pyfile('config.py')解決。

5

雖然這是一箇舊帖子和燒瓶的非常重要的問題,我碰巧有這些天。如果有人也有同樣的問題,你應該檢查config.py文件的路徑。起初,我在應用程序目錄中創建了config.py。然後我移出應用程序,它的工作。就像這樣:

-app--- 
    | 
    |----__init__.py 
    |----config.py 

更改爲:

-app--- 
    | 
    |----__init__.py 
-config.py 
+0

工作就像一個魅力!謝謝 – trex

0

試試看絕對進口替代

app.config.from_object(app.config) 

它爲我