如何运行Flask应用程序

时间:2019-03-30 13:45:35

标签: python-3.x flask

flask官方网站说我们可以通过以下方式运行flask应用程序

$ export FLASK_APP=hello.py
$ flask run
  1. 第二个命令对我不起作用。

    $ 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吗?

  2. 可以在不使用两个命令的情况下将其合并为一个命令 环境变量?

谢谢。

1 个答案:

答案 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环境变量解析模块,并按以下目录顺序解析所请求的模块:

  1. 已在其中调用脚本的当前目录。这就是为什么您可以始终导入彼此相同目录中包含的模块
  2. 您的PYTHONPATH环境变量的值
  3. 路径上的标准库目录
  4. 最后,网站软件包目录即您的第三方软件包,例如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

我知道很多,但希望能为您澄清一些事情!