python - 使用flask run vs python app.py vs python -m flask run有什么区别?

标签 python flask

这个问题在这里已经有了答案:





How to run a flask application?

(6 个回答)


1年前关闭。




以下方式允许我启动 Flask 服务器。

选项1:

set FLASK_APP = app.py
flask run

选项 2:
set FLASK_APP = app.py
python -m flask run

选项 3:
python app.py

使用这两者有什么区别?

最佳答案

$ python app.py
这是simplest, standard way调用 Python 解释器来运行任何 Python 脚本。它不是 Flask 特有的。 app.py 可能有也可能没有 if __name__ == "__main__"块(参见 What does if __name__ == "__main__": do? ),但是如果您要为 Flask 执行此操作,则需要有 __main__调用 app.run() 的方法.来自 Flask docs :

The alternative way to start the application is through the Flask.run() method. This will immediately launch a local server exactly the same way the flask script does.

Example:

if __name__ == '__main__':
    app.run()

相同的文档还说明了为什么即使这样做有效,也不推荐:

This works well for the common case but it does not work well for development which is why from Flask 0.11 onwards the flask method is recommended. The reason for this is that due to how the reload mechanism works there are some bizarre side-effects (like executing certain code twice, sometimes crashing without message or dying when a syntax or import error happens).


如果您需要根据主机环境修改运行配置(例如端口),这种方式也有问题。比如在某台机器上运行时需要使用5500端口而不是默认的5000。您当然可以使用 os.environ 来做到这一点。和 app.run(host=5500) ,但是根据与代码无关的环境相关配置修改代码将是“困惑的”。
这就是为什么我们有第二种方式, flask command line tool .
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'
$ set FLASK_APP=app.py 
$ flask run --port=5500
您现在可以维护您的代码以独立于任何外部环境配置。除此之外,flask CLI 工具有一个 lot of other options for configuration and debugging ,例如启用/禁用 Debug模式、列出路由 ( flask routes ) 以及从 .env 文件中获取环境变量。
另请注意,您的应用程序不必显式调用 app.run__name__现在不会是 __main__ .这对于您的应用程序只是更大包的一部分和/或需要从其他目录运行的情况很有帮助。见 Larger Applications Flask 文档的部分。
最后,我们有第三种方式:
$ python -m flask run
这是另一个 standard way运行 Python 脚本。它也不是 Flask 特有的。从文档:

When called with -m module-name, the given module is located on the Python module path and executed as a script.


这意味着 flask将从调用的 python 中搜索module search path .当您的环境有多个 Python 版本并且您想确保使用正确的 Python 版本和 Flask 环境时,这尤其有用。当您为多个项目安装多个 Flask 时,它也很有用。它明确地设置使用哪个 Python 解释器来调用 flask命令行工具。
$ python3.8 -m flask --version
Python 3.8.10
Flask 1.1.2
Werkzeug 1.0.1
$ python3.8 -m flask run

$ python3.7 -m flask --version
Python 3.7.4
Flask 1.1.1
Werkzeug 0.16.0
$ python3.7 -m flask run

$ python -m flask --version
Python 2.7.16
Flask 1.0.3
Werkzeug 0.14.1
$ python -m flask run

关于python - 使用flask run vs python app.py vs python -m flask run有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58564162/

相关文章:

python - 为覆盖所有二维矩阵生成三个不重叠的掩模

python - pyvot : can I run Excel VBA macros from python script?

nginx - uWSGI/ flask : "no python application found, check your startup logs for errors"

python - Flask 响应中迭代器的行为

Python,以正确的方式进行条件导入

python flickr api用于组搜索并获取图像数据集

python - 在使用 Flask for Python 3 时如何使用 Bootstrap 4?

python - 调用“删除”按钮的 url

python - 无法使用 Flask 和 Flask Migrate 在 Docker 中运行入口点脚本,即使它可以在终端中运行

python - 创建一个列来保持连续值的运行计数