【发布时间】:2021-01-08 00:09:50
【问题描述】:
我这几天一直在尝试解决这个问题。我正在使用tutorial 中描述的应用程序设置运行烧瓶。下面是安装在虚拟环境中的包。
pip3 freeze
click==7.1.2 Flask==1.1.2 itsdangerous==1.1.0 Jinja2==2.11.2 MarkupSafe==1.1.1 pkg-resources==0.0.0 python-dotenv==0.15.0 Werkzeug==1.0.1
我在 .env 文件中有以下内容:
FLASK_APP=myapp
这样我就可以做到flask run。我的目录结构如下:
这都包含在一个名为“proj”的目录中
初始化.py
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_object('conf.DevConfig')
app.config.from_mapping(DATABASE=os.path.join(app.instance_path, 'tester.sqlite'))
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
在 proj 中,我运行 flask run 并获得以下信息:
werkzeug.utils.ImportStringError: import_string() failed for 'conf.DevConfig'. Possible reasons are:
- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;
Debugged import:
- 'conf' not found.
Original exception:
ModuleNotFoundError: No module named 'conf'
注意在proj/instance/中有一个conf.py
conf.py 包含
class Config(object):
DATABASE = 'tester.sqlite'
class DevConfig(Config):
DEBUG = True
class ProdConfig(Config):
DEBUG = False
奇怪的是,如果我将 conf.py 放在 proj/ 中,那么应用程序就可以正常加载了。我可以发誓我读到 Flask 会默认搜索 proj/instance 文件。为什么当我将它从实例移回一级时它会找到它。就此而言,可以将 .env 文件存储在实例中,并且烧瓶会自动找到它们吗?对我来说,instance_relative_config=True 似乎没有做它应该做的事情。调用flask run如果运行在proj/ vs proj/myapp有什么效果
【问题讨论】:
标签: python flask config application-structure