flask官方网站说我们可以通过以下方式运行flask应用程序
$ export FLASK_APP=hello.py
$ flask run
第二个命令对我不起作用。
$ flask run
Command 'flask' not found, but can be installed with:
sudo apt install python3-flask
反而有效
python3 -m flask run
如何使第二个命令起作用?如果我运行sudo apt install
python3-flask
,我会得到两次安装的flask吗?
谢谢。
答案 0 :(得分:3)
与我一起承受,因为我将尝试解释不同的部分以及它们如何相互联系。 export FLASK_APP=hello.py
正在设置名为FLASK_APP
的操作系统环境变量,只是指向启动烧瓶应用程序的入口文件。这与在操作系统上设置任何其他环境变量没有什么不同。现在,烧瓶团队为每个人提供了一个名为flask run
的命令,可用于启动烧瓶应用程序,该命令将使用FLASK_APP
环境变量中设置的值当它尝试启动Flask服务器时。因此,您的python3 -m flask run
命令起作用的原因是,您要告诉操作系统的python安装程序将flask run
命令作为脚本运行,这就是该命令的调用方式。>
供参考:
-m mod : run library module as a script (terminates option list)
此外,python尝试从其sys.path
环境变量解析模块,并按以下目录顺序解析所请求的模块:
PYTHONPATH
环境变量的值flask
现在,您的flask run
命令最初不起作用的原因是, python在上面列出的四个位置中的任何一个位置都找不到烧瓶。但是,一旦给了-m
python,便知道在site-packages
目录中查找flask
并能够找到上述模块。
作为参考,您可以看到python通过将sys.path
变量输出到控制台来寻找模块解析的地方:
import sys
print(sys.path)
好,这样就可以回答您第一个问题的第一部分,现在就像您第一个问题的第二部分一样:
“如果我运行sudo apt install python3-flask
,我会得到两次安装的flask吗?”
是的,这会在系统上全局安装flask ,我强烈建议您这样做,因为如果不小心,可能会严重破坏系统。那么如何避免弄乱系统级python配置呢?
Virtualenv,在虚拟环境中,您可以使用一个沙盒区域来处理库。在最坏的情况下,如果不小心弄坏了它们,就会将它们吹走并重新开始,而不会影响操作系统的python安装。 您应该在每个python项目和虚拟环境之间建立一对一的关系。如果您使用virtualenv
,我强烈建议您研究Virtualenvwrapper,该文件将virtualenv
包装起来,命令更容易记忆。尽管我认为所有很酷的孩子现在都在使用pipenv,所以您可能也想研究一下,但是我将把这个决定权交给您。很好的是,一旦激活了虚拟环境并进行开发,就可以使用flask run
,因为您的虚拟环境将位于python路径上。
关于第二个问题:“可以在不使用环境变量的情况下将两个命令合并为一个命令吗?”
否,您仍然需要将FLASK_APP
环境变量设置为使用flask run
,因为它会寻找该环境变量的值来启动Flask服务器。也许您可以尝试以下方法:
FLASK_APP=hello.py flask run
在命令行上按,看看是否有帮助,但是您仍在设置FLASK_APP
环境变量。另外,您可以直接使用以下命令启动Flask服务器的入口文件:
python hello.py
我知道很多,但希望能为您澄清一些事情!