Flask无法在父目录中找到配置模块

时间:2016-08-25 08:49:07

标签: python web-applications flask

我基于我在github here找到的网络应用程序的结构。

我的项目结构如下:

~/Learning/flask-celery $ tree
.
├── config
│   ├── __init__.py
│   └── settings.py
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── web
    ├── app.py
    ├── __init__.py
    ├── static
    └── templates
        └── index.html

我希望web/app.py中的Flask应用加载config模块中的设置,正如我在上面链接的githug项目中看到的那样。

以下是我在web/app.py中实例化Flask应用的方法:

from flask import Flask, request, render_template, session, flash, redirect, url_for, jsonify

[...]

app = Flask(__name__, instance_relative_config=True)

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

[...]

我得到的问题是:

root@0e221733b3d1:/usr/src/app# python3 web/app.py 
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/werkzeug/utils.py", line 427, in import_string
    module = __import__(module_name, None, None, [obj_name])
ImportError: No module named 'config'
[...]

显然,Flask无法在父目录中找到config模块,这对我来说很有意义,但我不明白我所依赖的链接项目是怎样的。使用相同的树结构和Flask配置代码成功加载模块。

在这些情况下,如何让Flask加载config模块?

1 个答案:

答案 0 :(得分:2)

如果不将config目录添加到您的路径,您的Python包将无法看到它。

您的代码只能通过它的外观访问web中的内容。

您可以将config目录添加到包中,如下所示:

import os
import sys
import inspect

currentdir = os.path.dirname(
    os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)

然后你应该能够导入配置。