Flask学习记录:搭建开发环境

1.Pipenv简介

Pipenv是基于pip的Python包管理工具,它和pip的用法非常相似,可以看作pip的加强版,它的出现解决了旧的pip + virtualenv + requirements.txt的工作方式的弊端。具体来说,它是pip、Pipfile和Virtualenv的结合体, 它让包安装、包依赖管理和虚拟环境管理更加方便,使用它可以实现高效Python项目开发工作流。

pipenv主要有以下特性:

  1. 集成了pip+virtualenv两者的功能。
  2. 以前用virtualenv管理requirements.txt可能会存在各种包依赖的问题,想解决这个问题可能需要手动来维护。Pipenv使用Pipfile和Pipfile.lock,前者用来记录项目依赖包列表,后者存放包的依赖关系,查看依赖关系是十分方便。当我们使用Pipenv安装/删除/更新依赖包时,Pipfile以及Pipfile.lock会自动更新。
  3. 通过加载.env文件简化开发工作流程。

2.安装Pipenv

windows下输入以下命令安装Pipenv

pip install pipenv

Linux或者MacOS输入以下命令安装Pipenv

sudo pip install pipenv

3.创建并启动虚拟环境

虚拟环境(virtual environment)就是隔离的Python环境。通过虚拟环境,你可以为每个项目创建一个独立的Python解释器环境,因为不同的项目可能会依赖不同的Python环境和不同的包。另外,使用虚拟环境可以很清楚地记录每个项目所需要的依赖,以便项目要迁移到新的环境的时候可以快速复制项目原来的环境。

使用pipenv install命令来创建一个虚拟环境

pipenv install

创建完成后会在当前项目中自动生成一个文件夹,包含当前项目所使用的Python解释器环境,并且会自动安装像pip、wheel、setuppools等基本的包。如果当前项目下面有Pipfile文件,还会自动帮你安装好Pipfile里面的依赖包。

默认情况下,Pipenv会统一管理所有虚拟环境。在Windows系统中,虚拟环境一般会在C:\Users\Administrator.virtualenvs\目录下创建,而Linux会在home/$username/local/share/virtualenvs/目录下创建。

如果想把虚拟环境文件夹自动存放到对应的项目目录下面,可以设置环境变量。变量名为WORKON_HOME,变量值为PIPENV _VENV_IN_PROJECT,Pipenv会把虚拟环境放在对应项目目录的.venv目录下。

虚拟环境文件夹的目录名称为“当前项目目录名+随机字符串”,比如hello-68LuOCbow

创建虚拟环境成功后,使用pipenv shell命令启动虚拟环境

pipenv shell

使用exit命令可退出当前虚拟环境

exit

当执行pipenv shell或pipenv run命令时,Pipenv会自动从项目目录下的.env文件中加载环境变量。

如果想在没有显式地激活虚拟环境的情况下执行命令,可以使用pipenv run命令,例如

pipenv run python hello.py

这句命令的意思是在没有启动虚拟环境的情况下运行 hello.py脚本文件。

4.管理虚拟环境中的依赖

在创建虚拟环境的时候,如果项目根目录下没有Pipfile文件的话,pipenv install命令会在根目录下面创建Pipfile和Pipfile.lock文件。前者用来记录项目依赖包列表,后者存放包的依赖关系,查看依赖关系是十分方便。当我们使用Pipenv安装/删除/更新依赖包时,Pipfile以及Pipfile.lock会自动更新。

可以使用pipenv graph命令查看当前环境下的依赖情况,
或者是在虚拟环境中使用pip list命令查看依赖列表。

如果要在一个新的环境部署运行项目的时候,
只需要执行pipenv install命令。
Pipenv命令就会创建一个新的环境,
并且自动从Pipfile中读取依赖并且安装到新的虚拟环境中。

Pipenv默认使用系统同版本的python解释器,当我们需要其它版本的python时,可以切换python版本

pipenv --python 3.7
pipenv --python 3.6
pipenv --python 2.7

当我们需要在虚拟环境安装包时,使用pipenv install命令安装包,后面的–dev是指明该包只安装在开发环境中

pipenv install flask --dev

当我们使用pipenv install 命令安装包时,无论是否激活了虚拟环境,这个包都会自动安装到虚拟环境中。如果要全局安装/更新/删除包的时候,要使用pip命令。

当我们需要根据Pipfile和Pipfile.lock文件生成requirements.txt文件时,使用如下命令

pipenv lock -r > requirements.txt

如果只想导出开发用的包,可以使用

pipenv lock -r --dev > requirements.txt

5.启动开发服务器

Flask内酯了一个简单的开发服务器(由Flask依赖包Werkzeug提供),足够在开发和测试阶段使用。

  • 如果已经激活了虚拟环境,使用flask run命令来启动服务器
flask run

当前服务器时默认启动在本地上,默认监听5000端口,如果希望公网可以访问,或者想修改监听端口,可以在flaks run后面添加–host参数和–port参数

flask run --host=0.0.0.0 --port=8000
  • 如果没有激活虚拟环境,则可以使用pipenv run flask命令启动服务器
pipenv run flask run

(1)自动发现程序实例
一般来说,在执行flask run命令之前,需要提供程序的实例所在模块的位置。Flask会自动探测程序实例,自动探测的规则如下:

  • 从当前目录寻找app.py和wsgi.py模块,并寻找名为app或者application的程序实例。
  • 从环境变量FLASK_APP对应的值寻找名为app或者application的程序实例。

上述情况都是假定程序主模块命名为app.py,所以flask run命令会自动在其中寻找程序实例。如果主程序模块是其它名称,比如是hello.py,那么需要设置环境变量FLASK_APP,将包含程序实例的模块名赋值给这个变量(需要先激活虚拟环境)。

  • Linux或mac系统使用export命令
export Flask_APP=hello
  • 在windows系统中使用set命令
set FLASK_APP=hello

(2)管理环境变量
如果安装了python-dotenv,那么在使用flask run或其它命令时会使用它自动从.flaskenv文件和.env文件中加载环境变量。

当安装了python-dotenv时,Flask在加载环境变量的优先级时:手动设置的环境变量>.env中设置的环境变量>.flaskenv设置的环境变量。

除了FLASK_APP,还会用到其他环境变量。环境变量在新创建命令行窗口或重启电脑后就清除了,每次都要重设变量会显得有些繁琐。当要同时开发多个Flask程序,这个FLASK_APP就需要被不停地设置。为了避免频繁设置环境变量,可以使用python-dotenv管理项目的环境变量,首先使用Pipenv将它安装到虚拟环境:

pipenv install python-dotenv

在项目根目录下分别创建两个文件:.env和.flaskenv。.flaskenv用来存储和Flask相关的公开环境变量,比如FLASK_APP,而.env用来存储包含敏感信息的环境变量,比如服务器的Email账户和密码。在.flaskenv或.env文件中,环境变量使用键值对的形式定义,每行一个。环境变量创建如下所示:

FLASK_ENV=development
FLASK_APP=app

当修改完.flaskenv或.env文件时记得要先退出虚拟环境后再进入,否则修改的环境变量无效。

参考书籍:《Flask Web开发实战 入门、进阶与原理解析》李辉 著

你可能感兴趣的:(Flask)