我使用烧瓶的virtualenv,和我的演示瓶的应用程序的结构如下:的hello.py
为什么Flask的app.config.from_object()的行为与gunicorn不同?
from flask import Flask
def create_app():
app = Flask(__name__, instance_relative_config=True)
app.config.from_object("config.settings")
@app.route('/')
def index():
return app.config["HELLO"]
return app
if __name__ == "__main__":
app = create_app()
app.run()
settings.py
app/
hello.py
config/
settings.py
venv/
virtualenv files
内容只包含2个值
DEBUG = True
HELLO = "Hello there from /config !"
我可以使用gunicorn -b 0.0.0.0:9000 --access-logfile - "app.hello:create_app()"
与gunicorn成功运行,它的工作原理没有任何错误。
但是,从根目录运行python app/hello.py
导致错误ImportError: No module named 'config'
。看起来烧瓶在以这种方式执行时无法找到config目录。
我可以移动app
内的config
目录,但这样做会导致使用gunicorn出现错误。难道两种方式都不可能“只是工作”吗?更重要的是,为什么发生了什么?
是否将'__init __。py'文件添加到config中,以便它是一个包,有帮助吗? – syntonym
我曾尝试在'config /'中添加一个空的'__init __。py',但它没有帮助。发生同样的错误。 – peonicles
您可以尝试手动导入config.settings,然后使用from_object(config.settings)。也许gunicorn确实操纵了PYTHONPATH。您可以尝试将您的文件夹添加到pythonpath,以便可以导入config.settings。 (手动导入不应该改变任何东西,但你可能会看到你无法导入设置模块。) – syntonym