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

时间:2019-10-25 18:50:18

标签: python flask

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

选项1:

This is the full code of my website

选项2:

set FLASK_APP = app.py
flask run

选项3:

set FLASK_APP = app.py
python -m flask run

使用这两种方法有什么区别?

2 个答案:

答案 0 :(得分:1)

flask run

此文件在PATH上寻找可执行文件(称为flask),第一个文件以参数run执行,这将使flask助手通过调用FLASK_APP运行应用程序。

python -m flask run

此文件在您的PATH上查找名为python的可执行文件,第一个文件执行-m作为参数,该文件应运行一个模块(烧瓶),然后将运行参数传递给它。 这里的主要区别在于,当它执行PATH中第一个找到的可执行文件时,您可以运行与第一个完全不同的Flask。您还可以运行其他python版本的Flask。

python app.py

这将调用PATH上的第一个python可执行文件,并将app.py作为参数传递。它将使python运行app.py脚本,该脚本可能有也可能没有app.run()(这是启动Flask的原因)。 如果您在app.py中没有任何内容,它将不会调用Flask的服务器。

答案 1 :(得分:1)

$ python app.py

这是调用Python解释器运行任何Python脚本的simplest, standard way。它不特定于Flask。 app.py 可能有一个if __name__ == "__main__"块(可能没有)(请参阅What does if __name__ == "__main__": do?),但是如果您 要为Flask这样做,它 必须具有调用__main__的{​​{1}}方法。来自Flask docs

  

启动应用程序的另一种方法是通过   Flask.run()方法。这将立即启动本地服务器   flask脚本完全相同。

     

示例:

app.run()

同一文档也说明了为什么即使有效,还是不建议这样做:

  

这在普通情况下效果很好,但不适用于   这就是为什么从Flask 0.11开始if __name__ == '__main__': app.run() 方法是   推荐的。原因是由于如何重新加载   机制的工作有一些怪异的副作用(例如执行   某些代码两次,有时会崩溃而无任何消息,或者在   语法或导入错误)。

如果您需要根据主机环境修改运行配置(例如端口),则这种方法也会出现问题。例如,在特定计算机上运行时,需要使用端口5500而不是默认的5000。您当然可以使用flaskos.environ来做到这一点,但这将是基于与环境无关的与代码无关的配置来“修改”代码。

输入flask command line tool

app.run(host=5500)
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

您现在可以将代码维护为独立于任何外部环境配置。除此之外,$ set FLASK_APP=app.py $ flask run --port=5500 CLI工具还具有lot of other options for configuration and debugging,例如启用/禁用DEBUG模式,列出路由(flask)以及从.env文件获取env var。

还请注意,您的应用程序不必显式调用flask routes,现在app.run不再是__name__。这对于您的应用只是较大软件包的一部分和/或需要从其他目录运行的情况很有用。请参阅Flask文档的Larger Applications部分。

最后,

__main__

这是另一个运行Python脚本的standard way。它也不特定于Flask。从文档中:

  

$ python -m flask run 调用时,给定的模块位于   Python模块路径,并作为脚本执行。

这意味着将从调用的-m module-name module search path中搜索flask。当您的环境具有多个Python版本且每个版本都有自己的Flask安装时,此功能特别有用。它显式设置要使用哪个Python解释器来调用python CLI工具。

flask