py.test导入错误“ - '''找不到'。”

时间:2013-12-21 21:24:39

标签: python flask pytest

在尝试将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()

如果我手动设置配置变量而不是导入它们,那么一切似乎都有效。有人遇到过这样的事吗?我在文档中找不到任何有用的东西。

5 个答案:

答案 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')已解决。