1.虚拟环境
为什么要搭建虚拟环境?- 在开发过程中, 当需要使用
python
的某些工具包/框架时需要联网安装
- 比如联网安装Flask框架
flask-0.10.1
版本
sudo pip install flask==0.10.1
- 提示:使用如上命令, 会将
flask-0.10.1
安装到/usr/local/lib/python2.7/dist-packages
路径下
- 问题:如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.
- 解决方案:
虚拟环境
- 作用:
虚拟环境
可以搭建独立的python运行环境
, 使得单个项目的运行环境与其它项目互不影响.
- 所有的
虚拟环境
都位于/home/
下的隐藏目录.virtualenvs
下
- 安装虚拟环境的命令 :
sudo pip install virtualenv
sudo pip install virtualenvwrapper
安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:1、创建目录用来存放虚拟环境
mkdir
$HOME/.virtualenvs
# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
# 3、运行
source ~/.bashrc
创建虚拟环境的命令 :
- 提示:如果不指定python版本,默认安装的是python2的虚拟环境
mkvirtualenv 虚拟环境名称
例 :
mkvirtualenv py_flask
在python3中,创建虚拟环境mkvirtualenv -p python3 虚拟环境名称
例 :
mkvirtualenv -p python3 py3_flask
- 创建虚拟环境需要联网
- 创建成功后, 会自动工作在这个虚拟环境上
- 工作在虚拟环境上, 提示符最前面会出现 “虚拟环境名称”
- 查看虚拟环境的命令 :workon 两次tab键
- 使用虚拟环境的命令 :
workon 虚拟环境名称
例 :使用python2的虚拟环境
workon py_flask
例 :使用python3的虚拟环境
workon py3_flask
- 退出虚拟环境的命令 :deactivate
- 删除虚拟环境的命令 :
rmvirtualenv 虚拟环境名称
例 :删除虚拟环境py3_flask
先退出:deactivate
再删除:rmvirtualenv py3_flask
如何在虚拟环境中安装工具包?
提示 : 工具包安装的位置 :
- python2版本下:
~/.virtualenvs/py_flask/lib/python2.7/site-packages/
- python3版本下:
~/.virtualenvs/py3_flask/lib/python3.5/site-packages
pip install 包名称
例 : 安装flask-0.10.1的包
pip install flask==0.10.1
- 查看虚拟环境中安装的包 :pip freeze
2.实现一个简单的Demo
from flask import Flask
from flask import abort
from flask import redirect
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello Python!</h1>'
@app.route('/user/<name>')
def Hello_world(name):
if name == 'baidu':
return redirect('http://www.baidu.com')
elif name == 'NO':
return abort(404)
return '<h1> Hello,%s </h1>' % name
if __name__ == '__main__':
app.run(debug=True)
从Demo中学习路由、修饰器、视图函数、请求、响应概念,一步步分析每行代码:
1.from flask import Flask
从flask库中导入Flask函数,from flask import abort
和from flask import redirect
同理。
2.app = Flask(__name__)
创建Flask对象app,Flask类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,Python的__name__
变量就是所需要的值。
3.@app.route('/')
客户端(例如web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例。程序实例需要知道对每个URL请求运行哪些代码,所以保存了一个URL到Python函数的映射关系。处理URL和函数之间的关系的程序称为路由。
在Flask程序中定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由。
修饰器是Python语言的标准特性,可以使用不同的方式修改函数的行为。惯常用法是使用修饰器把函数注册为事件的处理程序。
4.def index():
函数
index()函数放在@app.route('/')
后面,所以就是把index()
函数注册为路由。
如果部署程序的服务器域名为www.example.com
,在浏览器中访问www.example.com
后,会触发服务器执行index()
函数。
5.@app.route('/user/<name>')
同@app.route('/')
,如果部署程序的服务器域名为www.example.com
,在浏览器中访问www.example.com/user/tom
后,会触发服务器执行下方修饰函数sayHello(name)
。
6.Hello_world(name)
函数
if name == 'baidu':
return redirect('http://www.baidu.com')
elif name == 'NO':
return abort(404)
return '<h1> Hello, %s </h1>' % name
假定部署程序的服务器域名为www.example.com
。
在浏览器中访问www.example.com/user/baidu
,那么redirect()
函数就直接链接到百度了。
注意的是,在使用redirect()
函数之前,必须使用from flask import redirect
从flask库中导入redirect()
函数。
在浏览器中访问www.example.com/user/NO
,那么abort()
函数就会触发。
abort()函数用于处理错误,abort(404)
返回404错误,abort()
函数不会把控制权交还给调用它的函数,而是抛出异常把控制权交给Web服务器。
在浏览器中访问www.example.com/user/tom
,那么会正确执行,在浏览器中显示Hello,tom
。
7.if __name__ == '__main__':
当Python解释器,读py文件,它会执行它发现的所有代码。在执行代码之前,它会定义一些变量。例如,如果这个py文件就是主程序,它会设置
__name__
变量为"__main__"
。如果这个py被引入到别的模块,__name__
会被设置为该模块的名字。举个栗子:
创建一个test.py文件:
if __name__ == '__main__':
print '自己主动执行'
else:
print '我被别的模块引入'
执行下
$ python test.py
会输出自己主动执行
直接在命令行中输入python
随后输入import test
,会输出:我被别的模块引入
。
8.app.run(debug=True)
程序实例用run方法启动Flask继承的开发Web服务器。
服务器启动后,会进入轮询,等待并处理请求。轮询会一直进行,直到程序停止,比如按Ctrl-C
键。