webentwicklung-frage-antwort-db.com.de

Flask und uWSGI - App 0 kann nicht geladen werden (mountpoint = '') (aufrufbar nicht gefunden oder Importfehler)

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, Flask mit uWSGI zu starten. So fange ich an:

>  # cd ..
>     [email protected]:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app -  -processes 2

Hier ist meine Verzeichnisstruktur:

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

Inhalt von /path/to/folder/run.py

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

Inhalt von /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)
61
Tampa

uWSGI lädt Ihre App nicht als __main__, daher wird app nie gefunden (da dies nur geladen wird, wenn die App unter dem Namen __main__ ausgeführt wird). Daher müssen Sie es außerhalb des Blocks if __== "__main__": Importieren.

Wirklich einfache Änderung:

from app import app

if __== "__main__":
    app.run()

Jetzt können Sie die App direkt mit python run.py Oder über uWSGI so ausführen, wie Sie es haben.

38
Jeff Tratner

Ich hatte Probleme mit der akzeptierten Lösung, weil sich meine flask app in einer Variablen namens app befand. Sie können das lösen, indem Sie genau dies in Ihr wsgi einfügen:

from module_with_your_flask_app import app as application

Das Problem bestand also einfach darin, dass uwsgi eine Variable mit dem Namen application erwartet.

187
Milimetric

Der uWSGI-Fehler unable to load app 0 (mountpoint='') (callable not found or import error) ist bei mir aufgetreten, wenn ich die letzten beiden Zeilen des folgenden minimalen Arbeitsbeispiels für Flask application weggelassen habe

from flask import Flask
app = Flask(__name__)

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

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

Mir ist bewusst, dass dies bereits implizit in den Kommentaren zu einer anderen Antwort gesagt wurde, aber ich habe noch eine Weile gebraucht, um das herauszufinden, und ich hoffe, anderen Zeit zu sparen.

Im Fall eines reinen Python Dash-Anwendung kann ich das folgende Codefragment mit minimaler Gültigkeit anbieten:

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 __== "__main__":
    app.run_server(debug=True)

Wieder das application = app.server ist der wesentliche Teil hier.

0
B--rian