在尝试将py.test功能添加到Flask API时,我在源目录中调用py.test时遇到以下错误消息
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
在我实例化我的Flask应用程序并尝试从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()
如果我手动设置配置变量而不是导入它们,那么一切似乎都有效。有人遇到过这样的事吗?我在文档中找不到任何有用的东西。
答案 0 :(得分:15)
我认为这些是最可能的
E - package or module path not included in sys.path;
E - duplicated package or module name taking precedence in sys.path;
所以我尝试的第一件事就是将配置文件重命名为config_default.py
。
然后你可以尝试使用真实对象而不是字符串,例如。自己导入配置:
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)。
答案 1 :(得分:11)
虽然这是Flask的一个老帖子和非常重要的问题,但这些日子我碰巧有这个问题。如果任何人也有同样的问题,你应该检查config.py文件的路径。起初,我在app dir中创建了config.py。然后我搬到应用程序之外,它的工作原理。像这样:
-app---
|
|----__init__.py
|----config.py
更改为:
-app---
|
|----__init__.py
-config.py
答案 2 :(得分:4)
Twil为app.config.from_object提供了优点和替代方案。但是,我在遇到以下Flask Tutorial时遇到问题时偶然发现了这个问题,我想按照指南使用from_object。
我纠正问题的方法是我最初将config.py文件放在我的应用程序中。包。它应该位于我的应用程序之外的同一个文件夹中,我有我的run.py脚本。
我希望这个答案能节省一些时间。
答案 3 :(得分:1)
只需尝试绝对导入
app.config.from_object(app.config)
它对我有用
答案 4 :(得分:0)
将app.config.from_object(config)
更改为app.config.from_pyfile('config.py')
已解决。