首次运行 Flask:不要在生产环境中使用开发服务器

2025-03-04 08:27:00
admin
原创
81
摘要:问题描述:我在 PyCharm 社区版中安装了 Flask 插件,并且我的 Flask 应用程序中只有这段简单的代码:from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1&g...

问题描述:

我在 PyCharm 社区版中安装了 Flask 插件,并且我的 Flask 应用程序中只有这段简单的代码:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello!</h1>'

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

我收到了这条消息:

WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead

* Restarting with stat
* Debugger is active!
* Debugger PIN: 123-456-789
* Running on http://127.0.0.1:5000/

为什么我运行 Flask 时会出现此错误?


该消息的先前版本为“请勿在生产环境中使用开发服务器”。


解决方案 1:

要将应用程序部署到生产环境,一种选择是使用生产 WSGI 服务器 Waitress。

waitress以下是代码中使用示例。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

if __name__ == "__main__":
    from waitress import serve
    serve(app, host="0.0.0.0", port=8080)

运行应用程序:

$ python hello.py

Waitress 还提供了一个命令行实用程序waitress-serve。要使用该实用程序,您可以将代码修改为以下内容:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

def create_app():
   return app

然后我们可以waitress-serve如下使用:

waitress-serve --port=8080 --call hello:create_app

顺便说一句,8080 是默认端口。

要验证部署,请打开一个单独的窗口:

% curl localhost:8080
<h1>Hello!</h1>%                     

或者直接在浏览器中运行http://localhost:8080/


部署应用程序的其他替代方案包括 Gunicorn 和 uWSGI。有关更多详细信息,请参阅flask 部署文档。

解决方案 2:

从 Flask 2.2 开始,开发服务器始终显示此警告,无法禁用它。开发服务器不适用于生产环境。它不是特别高效、稳定或安全。请使用生产 WSGI 服务器。有关更多信息,请参阅Flask 的部署文档。

不过,这个警告只是一个警告,并不是阻止您的应用运行的错误。如果您的应用无法运行,则您的代码存在其他问题。

该警告适用于开发服务器,而不适用于 Flask 本身。Flask 框架适用于任何类型的应用程序和部署。

解决方案 3:

尝试 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 install gevent 安装 gevent

解决方案 4:

如果对于某些人(比如我之前)上述答案不起作用,我认为以下答案会起作用(我认为对于 Mac 用户来说)输入以下命令来执行 flask run

$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run

或者,您可以执行以下操作(我还没有尝试过,但网上有一个资源谈到了这一点)

$ export FLASK_APP=hello.py
$ python -m flask run

来源:更多

解决方案 5:

为了避免这些消息,请在 CLI(命令行界面)内运行这些命令。

export FLASK_APP=app.py
export FLASK_ENV=development
export FLASK_DEBUG=0
flask run

解决方案 6:

要绕过警告,请使用以下代码,否则请按照以下步骤操作:https://flask.palletsprojects.com/en/2.3.x/deploying/

import functools
from typing import Callable, Any, Tuple, Dict
import werkzeug.serving

def _ansi_style_supressor(func: Callable[..., Any]) -> Callable[..., Any]:
    @functools.wraps(func)
    def wrapper(*args: Tuple[Any, ...], **kwargs: Dict[str, Any]) -> Any:
        if args and isinstance(args[0], str) and args[0].startswith('WARNING: This is a development server.'):
            return ''
        return func(*args, **kwargs)

    return wrapper

# Apply the suppressor to the _ansi_style function
werkzeug.serving._ansi_style = _ansi_style_supressor(werkzeug.serving._ansi_style)

将上述代码粘贴到运行 Flask 的文件顶部。

上面的代码定义了一个装饰器 _ansi_style_supressor,它以一个函数作为输入,并返回一个仅抑制警告消息的修改后的函数。

解决方案 7:

这个答案专门针对在 Flask 后端运行 Dash 应用程序

在使用 Flask 开发 Dash 应用时,此警告很常见。您可以在开发过程中忽略它。对于生产,您可以改用 gunicorn。

  • 添加gunicorn到您的 requirements.txt 并安装在您的生产环境中。

  • 在你的 app.py 文件中,添加一个变量server = app.server

  • 在生产环境中,使用命令运行你的应用程序gunicorn app:server。其中,app引用 app.py 文件,并server引用我们在该文件中创建的变量。

请注意,gunicorn 是为 UNIX 开发的。该命令无法在 Windows 上运行。

在像 Digital Ocean 这样的平台上,使用生产服务器非常重要,因为服务无法访问本地主机。

解决方案 8:

这在 Windows 上对我有用:

$env:FLASK_APP="flask_project.py"
$env:FLASK_ENV="development"
flask run

flask_project.py 与我的虚拟环境位于同一路径上。

解决方案 9:

如果您想避免因红色燃烧而出现的警告,那么您只需从源文件中更改警告即可,而不会产生任何副作用……您仍将正常收到 http 响应状态代码。进入 C:\Python37\Lib\site-packages\werkzeug\serving.py 并进行更改。
命令提示符

解决方案 10:

烧瓶运行

  • 调试模式:关闭 警告:这是一个开发服务器。请勿在生产部署中使用它。请改用生产 WSGI 服务器。

  • http://127.0.0.1:5000上运行
    按 CTRL+C 退出

我也收到了这个警告信息。但服务器运行正常。在你的情况下,它也运行正常,没有任何错误。检查 url = http://127.0.0.1:5000

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4053  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2777  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   95  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   111  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   97  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用