Virtualenv&Flask 入门

2021-06-02 15:00:23 浏览数 (1)

简介

Flask 依赖两个外部库:Werkzeug 和 Jinja2 。 Werkzeug 是一个 WSGI(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集。Jinja2 负责渲染模板。

那么如何在你的电脑上安装这一切?虽说条条大道通罗马,但是最强大的方式是 virtualenv ,所以我们首先来看它。

你首先需要 Python 2.6 或更高的版本,所以请确认有一个最新的 Python 2.x 安装。 在 Python 3 中使用 Flask 请参考: Python 3 支持

Virtualenv

动态语言Ruby、Python都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响。例如项目可以在基于Python2的环境中运行,而项目B可以在基于Python3的环境中运行。Python通virtualenv工具管理虚拟环境。

virtualenv 解决了什么问题?如果你像我一样喜欢 Python,不仅会在采用 Flask 的Web 应用中用上 virtualenv,在别的项目中你也会想用上它。你拥有的项目越多,同时使用不同版本的 Python 工作的可能性也就越大,或者起码需要不同版本的 Python 库。悲惨现实是:常常会有库破坏向后兼容性,然而正经应用不采用外部库的可能微乎其微。当在你的项目中,出现两个或更多依赖性冲突时,你会怎么做?

virtualenv 拯救世界!virtualenv 为每个不同项目提供一份 Python 安装。它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立。让我们来看看 virtualenv 是怎么工作的。

安装virtualenv

  • pip list
代码语言:javascript复制
lihuandeMacBook-Pro:~ lihuan$ pip list
Package      Version
------------ -------
appdirs      1.4.4
click        7.1.2
distlib      0.3.1
filelock     3.0.12
Flask        1.1.2
itsdangerous 1.1.0
Jinja2       2.11.3
MarkupSafe   1.1.1
pip          21.0.1
setuptools   41.2.0
six          1.15.0
virtualenv   20.4.2
Werkzeug     1.0.1
lihuandeMacBook-Pro:~ lihuan$ pip3 list
Package      Version
------------ -------
appdirs      1.4.4
click        7.1.2
distlib      0.3.1
filelock     3.0.12
Flask        1.1.2
itsdangerous 1.1.0
Jinja2       2.11.3
MarkupSafe   1.1.1
pip          21.0.1
setuptools   41.2.0
six          1.15.0
virtualenv   20.4.2
Werkzeug     1.0.1
lihuandeMacBook-Pro:~ lihuan$ 
  • 安装 virtualenv 之前需要先确认是否安装好 python 和 pip
代码语言:javascript复制
lihuandeMacBook-Pro:~ lihuan$ python -V
Python 2.7.16
lihuandeMacBook-Pro:~ lihuan$ pip -V
pip 21.0.1 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
  • pip安装virtualenv
代码语言:javascript复制
pip install virtualenv
# 或者
pip3 install virtualenv

lihuandeMacBook-Pro:~ lihuan$ virtualenv --version
virtualenv 20.4.2 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/virtualenv/__init__.py
lihuandeMacBook-Pro:~ lihuan$ 

使用virtualenv

  • 创建virtualenvs文件夹
代码语言:javascript复制
# 创建一个文件夹用来存放各个环境的相关文件
mkdir virtualenvs
cd virtualenvs
  • 创建虚拟环境

创建一个名称为 test_env 的不带任何第三方包的独立的Python运行环境

代码语言:javascript复制
方法一:
virtualenv test_env
方法二:
mkdir test_env
cd test_env
virtualenv .

lihuandeMacBook-Pro:virtualenvs lihuan$ virtualenv test_env
created virtual environment CPython3.8.3.final.0-64 in 731ms
  creator CPython3Posix(dest=/Users/lihuan/Documents/projects/python/master/virtualenvs/test_env, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/lihuan/Library/Application Support/virtualenv)
    added seed packages: pip==21.0.1, setuptools==52.0.0, wheel==0.36.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
  • 进入虚拟环境
代码语言:javascript复制
# 进入环境
source test_env/bin/activate

lihuandeMacBook-Pro:virtualenvs lihuan$ source test_env/bin/activate
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ 

(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ python
Python 3.8.3 (v3.8.3:6f8c8320e9, May 13 2020, 16:29:34) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

备注:目录说明
bin,存放了当前Python运行环境的Python解释器(bin/python),以及可执行命令(例如pip,easy_install);
test_env/lib/python*.*/site-packages,安装的python库存放在这个目录下。
  • 安装软件包

为环境安装软件包

代码语言:javascript复制
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ pip install requests
Collecting requests
  Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 712 kB/s 
Collecting chardet<5,>=3.0.2
  Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
     |████████████████████████████████| 178 kB 1.2 MB/s 
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.3-py2.py3-none-any.whl (137 kB)
     |████████████████████████████████| 137 kB 227 kB/s 
Collecting idna<3,>=2.5
  Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
     |████████████████████████████████| 58 kB 2.2 MB/s 
Collecting certifi>=2017.4.17
  Downloading certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
     |████████████████████████████████| 147 kB 2.3 MB/s 
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2020.12.5 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3-1.26.3
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ 
  • 退出当前虚拟环境
代码语言:javascript复制
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ deactivate

Flask

Flask 的设计易于使用和扩展。它的初衷是为各种复杂的Web应用程序构建坚实的基础。可以自由地插入任何扩展。也可以自由构建自己的模块。Flask 适合各种项目。它对原型设计特别有用。Flask 依赖于两个外部库:Jinja2 模板引擎和 Werkzeug WSGI 工具包。 Flask 是最精致,功能最丰富的微框架之一。Flask 还很年轻,拥有蓬勃发展的社区,一流的扩展和漂亮的 API。Flask 具有快速模板,强大的 WSGI 功能,在 Web 应用程序和库级别的完整单元可测性,以及大量文档等优点。 选用 Flask 框架也是因为它方便入手,结构简单,零配置,是个学习 Python Web 开发的好工具。

安装virtualenv

代码语言:javascript复制
pip3 install virtualenv

安装Flask

代码语言:javascript复制
lihuandeMacBook-Pro:master lihuan$ pip3 install flask
Collecting flask
  Downloading https://files.pythonhosted.org/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl (94kB)
     |████████████████████████████████| 102kB 905kB/s 
Collecting click>=5.1 (from flask)
  Downloading https://files.pythonhosted.org/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl (82kB)
     |████████████████████████████████| 92kB 3.3MB/s 
Collecting Jinja2>=2.10.1 (from flask)
  Downloading https://files.pythonhosted.org/packages/7e/c2/1eece8c95ddbc9b1aeb64f5783a9e07a286de42191b7204d67b7496ddf35/Jinja2-2.11.3-py2.py3-none-any.whl (125kB)
     |████████████████████████████████| 133kB 289kB/s 
Collecting Werkzeug>=0.15 (from flask)
  Downloading https://files.pythonhosted.org/packages/cc/94/5f7079a0e00bd6863ef8f1da638721e9da21e5bacee597595b318f71d62e/Werkzeug-1.0.1-py2.py3-none-any.whl (298kB)
     |████████████████████████████████| 307kB 2.6MB/s 
Collecting itsdangerous>=0.24 (from flask)
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10.1->flask)
  Downloading https://files.pythonhosted.org/packages/0c/12/37f68957526d1ec0883b521934b4e1b8ff3dd8e4fab858a5bf3e487bcee9/MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 flask-1.1.2 itsdangerous-1.1.0
WARNING: You are using pip version 19.2.3, however version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
lihuandeMacBook-Pro:master lihuan$ 

查看Flask

代码语言:javascript复制
lihuandeMacBook-Pro:master lihuan$ pip3 list
Package      Version
------------ -------
click        7.1.2  
Flask        1.1.2  
itsdangerous 1.1.0  
Jinja2       2.11.3 
MarkupSafe   1.1.1  
pip          19.2.3 
setuptools   41.2.0 
Werkzeug     1.0.1  
WARNING: You are using pip version 19.2.3, however version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
lihuandeMacBook-Pro:master lihuan$ 

验证Flask

代码语言:javascript复制
Python 3.8.3 (v3.8.3:6f8c8320e9, May 13 2020, 16:29:34) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license()" for more information.
>>> import flask
>>> 

导入Flask

Pycharm引入Flask模块,选择安装即可成功导入。

代码语言:javascript复制
from flask import Flask  # 引入Flask模块

使用Flask

最简单的Web应用 hello.py

代码语言:javascript复制
from flask import Flask  # 引入Flask模块

app = Flask(__name__)  # 创建一个应用


@app.route('/')
def index():  # 定义根目录处理器
    return '<h1>Hello World!</h1>'


if __name__ == '__main__':
    app.run()  # 启动服务

使用pycharm启动,如果一起正常的话会有类似下面的反馈

代码语言:javascript复制
* Serving Flask app "hello" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL C to quit)

因为是通过 app.run() 启动的服务,所以会有个错误提示,提醒不能将此Web应用部署在生产环境中,可以暂时忽略

此时,打开浏览器,输入127.0.0.1:5000/ 或者 localhost:5000/, 就可以看到 Hello World! 欢迎字样。

代码语言:javascript复制
127.0.0.1 - - [12/Mar/2021 19:11:12] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [12/Mar/2021 19:11:12] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [12/Mar/2021 19:11:16] "GET / HTTP/1.1" 200 -

0 人点赞