以下方式允许我启动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
使用这两种方法有什么区别?
答案 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。您当然可以使用flask
和os.environ
来做到这一点,但这将是基于与环境无关的与代码无关的配置来“修改”代码。
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