烧瓶和 uWSGI-无法加载应用程序0(挂载点 =”)(调用未找到或导入错误)

当我尝试使用 uWSGI 启动 Flask 时,我得到了下面的错误。 我是这样开始的:

>  # cd ..
>     root@localhost:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app -  -processes 2

下面是我的目录结构:

-/path/to/folder/run.py
-|app
-|__init__.py
-|views.py
-|templates
-|static

/path/to/folder/run.py的内容

if __name__ == '__main__':
from app import app
#app.run(debug = True)
app.run()

/path/to/folder/app/__init__.py的内容

import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
#from flaskext.babel import Babel
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
#app.config.from_pyfile('babel.cfg')


db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.setup_app(app)
login_manager.login_view = 'login'
login_manager.login_message = u"Please log in to access this page."


from app import views


*** Operational MODE: preforking ***
unable to find "application" callable in file /path/to/folder/run.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (pid: 26972, cores: 1)
spawned uWSGI worker 2 (pid: 26973, cores: 1)
63818 次浏览

uWSGI doesn't load your app as __main__, so it never will find the app (since that only gets loaded when the app is run as name __main__). Thus, you need to import it outside of the if __name__ == "__main__": block.

Really simple change:

from app import app as application  # for example, should be app


if __name__ == "__main__":
application.run()

现在,您可以直接使用python run.py运行应用程序,也可以通过UWSGI运行应用程序。

NOTE: if you set --callable myapp, you'd need to change it from as application to myapp (by default uwsgi expects application

I had problems with the accepted solution because my flask app was in a variable called app. You can solve that with putting just this in your wsgi:

from module_with_your_flask_app import app as application

So the problem was simply that uwsgi expects a variable called application.

The uWSGI error unable to load app 0 (mountpoint='') (callable not found or import error) occured for me if I left out the last two lines of the following minimal working example for Flask application

from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello():
return "Hello world!"


if __name__ == "__main__":
app.run()
else:
application = app

I am aware that this already implicitly said within the comments to another answer, but it still took me a while to figure that out, so I hope to save others' time.

In the case of a pure Python Dash application, I can offer the following minimal viable code snippet:

import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div( html.H1(children="Hello World") )


application = app.server


if __name__ == "__main__":
app.run_server(debug=True)

Again, the application = app.server is the essential part here.