Python 运行烧瓶时出现警告消息

Python 运行烧瓶时出现警告消息,python,flask,Python,Flask,当我从命令行运行Flask代码时,出现警告: Serving Flask app "hello_flask" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. 这是什么意思?如中所述: 虽然Flask的内置服务器轻量级且易于使用,但它不适

当我从命令行运行Flask代码时,出现警告:

Serving Flask app "hello_flask" (lazy loading)
* Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
这是什么意思?

如中所述:

虽然Flask的内置服务器轻量级且易于使用,但它不适合生产,因为它不能很好地扩展,并且默认情况下一次只提供一个请求


考虑到web应用程序需要处理来自多个用户的多个并发请求,Flask警告您,开发服务器不会这样做(默认情况下)。它建议使用()作为web/应用程序服务器,并在服务请求时调用Flask。

我已经使用Flask很长时间了,今天突然出现了这个警告。我找到了这个

如上所述,从flask版本1.0开始,flask应用程序运行的环境默认设置为生产环境。如果您在旧版本的flask中运行应用程序,则不会看到此警告

版本1.0中的新功能

变更日志

Flask应用程序运行的环境由Flask_ENV环境变量设置。如果未设置,则默认为生产。另一个公认的环境是发展。Flask和扩展可以根据环境选择启用行为


在配置或配置中,可以添加以下代码:
ENV=”“

如果您尝试像这样将调试集添加为true,则相同
DEBUG=True

有关更多详细信息,您可以选中此项以删除“请勿在生产环境中使用开发服务器”。警告,请运行:

导出环境=开发

在运行烧瓶之前,请尝试gevent:

from flask import Flask
from gevent.pywsgi import WSGIServer

app = Flask(__name__)

@app.route('/api', methods=['GET'])
def index():
    return "Hello, World!"

if __name__ == '__main__':
    # Debug/Development
    # app.run(debug=True, host="0.0.0.0", port="5000")
    # Production
    http_server = WSGIServer(('', 5000), app)
    http_server.serve_forever()
注意:使用pip安装gevent安装gevent从Flask 1.x开始,默认环境设置为生产环境

要使用开发环境,请创建一个名为
.flaskenv
的文件,并将其保存在项目目录的顶级(根目录)中。在
.flaskenv
文件中设置
FLASK\u ENV=development
。您还可以保存FLASK\u APP=myapp.py

例如:

myproject/.flaskenv

FLASK_APP=myapp.py
FLASK_ENV=development
然后您只需在命令行上执行以下操作:

flask run

这应该会注意到警告。

我正在键入flask run,然后看到此消息,之后我用以下方法解决了此问题:

1-将此文本添加到myproject/.flaskenv:
烧瓶_APP=myapp.py
烧瓶_ENV=开发
您还应该键入“pip3 install python dotenv”以使用此文件.flaskenv

2-在项目文件夹中,在终端中键入您使用的flask命令:

烧瓶-3运行

首先,尝试以下操作:

set FLASK_ENV=development 

然后运行你的应用程序。

如果你遇到
NoAppException
并且你看到延迟加载,那么以下内容似乎可以解决这个问题:

cd <project directory>
export FLASK_APP=.
export FLASK_ENV=development
export FLASK_DEBUG=1
cd
导出应用程序=。
导出环境=开发
export\u DEBUG=1

谢谢你的回答,但我还是不知道该怎么做。如果您不知道如何设置WSGI或在何处查找说明,很可能您不需要它,请您为我介绍一下Web服务器网关接口(WSGI)。只要您不想在生产环境(=公共网站)中运行Flask代码,就可以使用Flask的内置Web服务器。如果有多个客户端访问您的服务,请确保如图所示设置
threaded=True
。@HarshitSatya我链接的文档将指导您完成一系列不同的WSGI选项。对于发展来说,它是不需要的。超出此范围的解释将超出此问题的范围,并且可能过于宽泛(“我如何部署我的Flask应用程序?”),因为整个教程都是专门在线介绍此内容的。就我个人而言,我使用pythonanywhere是因为它使部署变得非常简单。谢谢@IonicSolutions和@Arthur DentThis应该被接受为答案。亚瑟·登特(Arthur Dent)解释了这个问题,并将如何解决这个问题的文档链接起来。谢谢你,亚瑟。谢谢你的回答,但那时我已经试过了。and DEBUG=True有助于我们不必在每次为本地运行开发服务器的人运行代码时重新启动flask会话,您可以简单地挤压该消息。只有当服务器无法从外部访问时,这才可以。不要为了生产而这样做!这也存在于正式部署中:对于正在开发且不安全的应用程序,使用
gevent
?@alper与使用开发模式
app.run(debug=True,host=“0.0.0.0”,port=“5000”)
@alper相比,它的主要好处是什么
gevent
是在生产环境中运行应用程序的一个选项。