这几天我一直在尝试解决这个问题。我正在使用教程中描述的应用程序设置运行烧瓶。以下是安装在虚拟环境中的软件包。
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
在项目中,我运行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 中运行,调用有什么影响