gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:05:25 26 4
gpt4 key购买 nike

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





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 theFlask.run() method. This will immediately launch a local serverexactly 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 fordevelopment which is why from Flask 0.11 onwards the flask method isrecommended. The reason for this is that due to how the reloadmechanism works there are some bizarre side-effects (like executingcertain code twice, sometimes crashing without message or dying when asyntax 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 thePython 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com