我使用燒瓶的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