Flask 应用程序与 Flask 一起运行,但不与 Gunicorn 一起运行

问题描述 投票:0回答:1

我为我的一些项目创建了一个 Flask 应用程序。

~/flasksvr
目录下有一个主app.py,文件夹结构看起来有点像这样:

flasksvr/
> __init__.py (empty)
> app.py (main app)
> modules/ (subprojects)
> > __init__.py (empty)
> > subproj1.py
> > subproj2.py
> > subproj3.py

当我运行 app.py 时,它会导入所有带有 URL 前缀的子项目,如下所示:

from .modules.subproj1 import app as sp1app
from .modules.subproj2 import app as sp2app
from .modules.subproj3 import app as sp3app

app.register_blueprint(sp1app, url_prefix='/sp1')
app.register_blueprint(sp2app, url_prefix='/sp2')
app.register_blueprint(sp3app, url_prefix='/sp3')

无论如何,用

flask run -h 0.0.0.0 --debug
运行它效果很好,但是当我用
gunicorn app:app -b 0.0.0.0
运行它时,它给了我错误

from .modules.subproj1 import app as sp1app
ImportError: attempted relative import with no known parent package

我尝试将

from .modules.subproj1 import app as sp1app
部分更改为
from modules.subproj1 import app as sp1app
,并且成功了。但是我的子项目1中,我正在导入一个带有
from ..app import sock
的SocketIO应用程序(其中
sock
是app.py中的
sock = SocketIO(app, ping_interval=10)
)。然后 that 给了我错误
ImportError: Attempted relative import with no known parent package
。为什么会发生这种情况?为什么它可以与普通 Flask 一起使用,但不能与 Gunicorn 一起使用?在 Debian 11 上使用 Python 3.9。

python python-3.x flask python-import gunicorn
1个回答
0
投票

具有文件夹结构

 flasksvr/
> __init__.py
> app.py         <----- path is here
> modules/
> > __init__.py  
> > subproj1.py  <----- in this file subproj1.py is `from app import sock` because your root path now at app.py
> > subproj2.py
> > subproj3.py

当你在gunicorn中运行项目时,Gunicorn会将所有资源加载到worker中,根路径位于app.py

gunicorn app:app
。这与默认运行flask run不同,调用时会导入

如果你想同时运行flask run和gunicorn。您可以使用:

flasksvr/
> app.py        <------ from modules.subproj1 import app as sp1app
> modules/
> > subproj1.py <------ from app import sock
> > subproj2.py
> > subproj3.py
© www.soinside.com 2019 - 2024. All rights reserved.