我基于我在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
模块?
答案 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)
然后你应该能够导入配置。