Python &引用;flask.cli.NoAppException“;运行烧瓶应用程序时

Python &引用;flask.cli.NoAppException“;运行烧瓶应用程序时,python,python-3.x,flask,Python,Python 3.x,Flask,我是python开发的新手,对flask一无所知,我被分配了一个使用flask开发的项目。经过几周的工作,我现在能够解决所有的依赖关系,项目现在已经成功编译。但当我使用flask run运行项目,然后在浏览器中输入url时,它抛出“flask.cli.NoAppException”。我怎样才能运行我的项目?我已经这样尝试过了 设置烧瓶_APP=init.py 设置烧瓶_ENV=开发 烧瓶运行 服务烧瓶应用程序“init.py”(延迟加载) 环境:发展 调试模式:打开 使用stat重新启动 调试

我是python开发的新手,对flask一无所知,我被分配了一个使用flask开发的项目。经过几周的工作,我现在能够解决所有的依赖关系,项目现在已经成功编译。但当我使用flask run运行项目,然后在浏览器中输入url时,它抛出“flask.cli.NoAppException”。我怎样才能运行我的项目?我已经这样尝试过了

  • 设置烧瓶_APP=init.py
  • 设置烧瓶_ENV=开发
  • 烧瓶运行

    • 服务烧瓶应用程序“init.py”(延迟加载)
    • 环境:发展
    • 调试模式:打开
    • 使用stat重新启动
    • 调试器处于活动状态
    • 调试器PIN:202-733-235
    • 正在运行(按CTRL+C退出)
  • 这是回溯

    "FLASK_APP=myappnam:name to specify one.
    Traceback (most recent call last)
    
        File "C:\Program Files\Python38\Lib\site-packages\flask\_compat.py", line 39, in reraise
    
        raise value
    
        File "C:\Program Files\Python38\Lib\site-packages\flask\cli.py", line 97, in find_best_app
    
        raise NoAppException(
    
        flask.cli.NoAppException: Failed to find Flask application or factory in module "myappnam". Use "FLASK_APP=myappnam:name to specify one.
    
    The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.
    
    To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.
    
    You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:
    
        dump() shows all variables in the frame
        dump(obj) dumps all that's known about the object
    
    这是我的--init--.py文件

    这是我的项目结构
    我正在使用pycharm and widows 10。

    在您的
    创建应用程序
    功能中,您可能不希望在应用程序后期初始化时使用全局关键字

    在您提供的示例中,从未调用
    create\u app
    函数,因此从未创建app实例。使用
    create_app
    功能更为常见,如下所示:

    def create_app():
    app=烧瓶。烧瓶(\uuuuu名称\uuuuuuu)
    #做一些设置
    返回应用程序
    app=create_app()
    

    应用程序实例也应称为
    app
    ,而不是
    flask\u app
    。当然,您可以随意调用它,但默认情况下flask会查找
    app
    。要在
    create\u APP
    函数中指定您自己的更改
    FLASK\u APP=\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
    FLASK\u APP=\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

    在您提供的示例中,从未调用
    create\u app
    函数,因此从未创建app实例。使用
    create_app
    功能更为常见,如下所示:

    def create_app():
    app=烧瓶。烧瓶(\uuuuu名称\uuuuuuu)
    #做一些设置
    返回应用程序
    app=create_app()
    
    应用程序实例也应称为
    app
    ,而不是
    flask\u app
    。当然,您可以随意调用它,但默认情况下flask会查找
    app
    。要指定您自己的更改,请将

    import os
    import logging
    import gevent
    import datetime
    import rollbar
    
    from gevent.queue import Queue
    from gevent.event import AsyncResult
    import zmq.green as zmq
    
    from werkzeug.contrib.fixers import ProxyFix
    
    # Greens the postgress connector
    try:
        import psycogreen.gevent
        psycogreen.gevent.patch_psycopg()
    except ImportError:
        pass
    
    from rauth.service import OAuth2Service
    
    from flask import Flask, Request
    from flask_sqlalchemy import SQLAlchemy
    from flask_bcrypt import Bcrypt
    from flask_login import LoginManager, current_user
    from flask_assets import Environment
    from flask_uploads import UploadSet, configure_uploads, IMAGES
    
    from app.util import setup_logging
    from app.exceptions import TimeoutError, BackendError
    import app.exceptions
    
    
    flask_app = None
    
    # Have to use an actor pattern because we cannot allow more than one request to
    # be pending at a time.
    class Backend(gevent.Greenlet):
        def __init__(self):
            super(Backend, self).__init__()
    
            self.inbox = Queue()
            self.zmq_context = zmq.Context()
            self.zmq_socket = None
            self.init_socket()
    
        def init_socket(self):
            zmq_socket = self.zmq_socket
            if zmq_socket is not None:
                zmq_socket.close(0)
    
            zmq_socket = self.zmq_context.socket(zmq.REQ)
            zmq_socket.connect(flask_app.config["SERVER_ZMQ_URI"])
            self.zmq_socket = zmq_socket
    
        def process(self, request):
            zmq_socket = self.zmq_socket
    
            poller = zmq.Poller()
            poller.register(zmq_socket, zmq.POLLIN)
    
            zmq_socket.send_json({
                "command": request["command"],
                "arguments": request["arguments"]
            })
            sockets = dict(poller.poll(10 * 1000))
    
            if zmq_socket not in sockets:
                self.init_socket()
                result = request["result"]
                result.set_exception(TimeoutError("The request to the backend timed out."))
                return
    
            received = zmq_socket.recv_json()
    
            result = request["result"]
            if received["success"]:
                result.set(received["result"])
            else:
                result.set_exception(BackendError(received["result"]))
    
        def _run(self):
            while True:
                self.process(self.inbox.get())            
    
        def send(self, command, **kwargs):
            result = AsyncResult()
            self.inbox.put({
                "command": command,
                "arguments": kwargs,
                "result": result
            })
            return result.get()
    
    
    class RollbarRequest(Request):
        @property
        def rollbar_person(self):
            if current_user.is_anonymous:
                return {
                    "id": 0, 
                    "username": "anonymous"
                }
            return {
                "id": current_user.id,
                "username": current_user.name,
                "email": current_user.email_address
            }
    
    
    def create_app(*args, **kwargs):
        global flask_app
        global l
    
        app_mode = os.environ.get("APP_MODE")
    
        assert app_mode is not None, "APP_MODE environment variable must be set"
    
        flask_app = Flask(__name__)
        flask_app.request_class = RollbarRequest
        flask_app.config.from_object("config.mode_{}".format(app_mode))
        flask_app.config["APP_MODE"] = app_mode
    
        setup_logging(flask_app.config["LOGGING_LEVEL"])
    
        l = logging.getLogger(__name__)
        l.info("starting in mode {}".format(app_mode))
    
        if not flask_app.config["DEBUG"]:
            rollbar.init(
                flask_app.config["ROLLBAR_API_KEY"],
                app_mode,
                allow_logging_basic_config=False
            )
    
        flask_app.jinja_env.globals.update(
            current_year=lambda: datetime.datetime.now().year
        )
    
        # Have to do this so that redirects work in proxy mode behind NGINX.
        if not flask_app.debug:
            flask_app.wsgi_app = ProxyFix(flask_app.wsgi_app)
    
        flask_app.db = SQLAlchemy(flask_app)
    
        flask_app.bcrypt = Bcrypt(flask_app)
        flask_app.assets = Environment(flask_app)
    
        flask_app.images = UploadSet("images", IMAGES)
        configure_uploads(flask_app, flask_app.images)
    
        flask_app.photos = UploadSet("photos", IMAGES)
        configure_uploads(flask_app, flask_app.photos)
    
        login_manager = LoginManager()
        login_manager.login_view = "signin"
        login_manager.login_message_category = "alert"  # Need newer release of Flask-Login for this to work.
        login_manager.init_app(flask_app)
    
        flask_app.facebook = OAuth2Service(
            name="facebook",
            base_url="https://graph.facebook.com/v2.8/",
            client_id=flask_app.config["FACEBOOK_CLIENT_ID"],
            client_secret=flask_app.config["FACEBOOK_CLIENT_SECRET"]
        )
    
        from app import views
        from app import models
        from app import commands
    
        flask_app.backend = Backend()
        flask_app.backend.start()
    
        app.exceptions.register(flask_app)
    
        return flask_app