关于python:Flask首次运行:请勿在生产环境中使用开发服务器

Flask at first run: Do not use the development server in a production environment

我在PyCharm Community Edition中安装了Flask插件,而我的flask应用程序中只有以下简单代码:

1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)

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

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

我收到此消息:

1
2
3
4
5
6
7
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时出现此错误?

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


官方教程讨论了将应用程序部署到生产环境。一种选择是使用生产WSGI服务器Waitress。其他服务器包括Gunicorn和uWSGI。

When running publicly rather than in development, you should not use
the built-in development server (flask run). The development server
is provided by Werkzeug for convenience, but is not designed to be
particularly efficient, stable, or secure.

Instead, use a production WSGI server. For example, to use Waitress,
first install it in the virtual environment:

1
$ pip install waitress

You need to tell Waitress about your application, but it doesn’t use
FLASK_APP like flask run does. You need to tell it to import and call
the application factory to get an application object.

1
2
$ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080

或者,您可以在代码中使用waitress.serve()而不是使用CLI命令。

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask

app = Flask(__name__)

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

if __name__ =="__main__":
    from waitress import serve
    serve(app, host="0.0.0.0", port=8080)
1
$ python hello.py

除非您告知开发服务器它正在开发模式下运行,否则它将假定您正在生产环境中使用它,并警告您不要这样做。开发服务器不适用于生产环境。它的设计目的不是特别高效,稳定或安全。

通过将FLASK_ENV环境变量设置为development来启用开发模式。

1
2
export FLASK_ENV=development
flask run

如果您在PyCharm(或可能的任何其他IDE)中运行,则可以在运行配置中设置环境变量。

开发模式默认情况下启用调试器和重新加载器。如果您不需要这些,请将--no-debugger--no-reloader传递给run命令。

但是,该警告只是警告,并不是阻止您的应用运行的错误。如果您的应用无法运行,则您的代码还有其他问题。


如果以上答案对某些人(如我之前的我)不起作用,我认为以下答案将起作用(我认为适用于Mac用户)
输入以下命令进行烧瓶运行

1
2
3
$ export FLASK_APP = hello.py
$ export FLASK_ENV = development
$ flask run

或者,您可以执行以下操作(我还没有尝试过,但是在线上有一篇资源对此进行了讨论)

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

来源:更多