准备:

环境搭建:
1 virtualenv介绍
问题需求:
在python开发中,经常涉及不同项目,依赖不同的python版本(2.7或者3.4),又或者依赖不同的第三方包.甚至可能涉及多个版本.
项目开发中,开发环境,测试环境,线上部署环境.可能依赖不同的配置.很多时候,开发机可能安装了很多包,而线上部署,可能只需要很小的子集.
解决方案: virtualenv
virtualenv 为每个不同项目提供一份 Python 安装.它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立.
virtualenv,类似”python”中的虚拟机.
可以对单一项目,在项目中,创建一个虚拟python开发环境.
将该项目依赖的包,单独安装在该”虚拟环境”中,实现和其他项目隔离.
该项目中,安装的python版本,不会和OS系统冲突.
每次使用,都需要在项目中,激活该”虚拟环境”.
使用完,退出”虚拟环境”.


2 安装virtualenv
2.1 使用pip安装
确认已经安装pip 包管理工具.
执行如下命令安装.


sudo pip install virtualenv


如果pip不能用,可以用python执行脚本进行安装或升级。


2.2使用系统包管理工具安装(Mac/Ubuntu)

brew install pyenv-virtualenv             # Mac下,采用homebrew方式安装 

 sudo apt-get install python-virtualenv    # ubuntu下,采用apt-get方式安装



3 使用方法
3.1 创建虚拟环境
创建虚拟环境.有两种方式.

cd my_project_folder                    # 切换至项目目录 



 方式1: 使用 主机默认python版本,创建 

 virtualenv venv                         # 创建虚拟环境安装目录"venv". 



 方式2: 指定python版本(路径),创建 

 virtualenv -p /usr/bin/python2.7 venv   # 指定使用python2.7创建一个 项目虚拟环境. 



 方式3: 不依赖系统环境中已有的site package(即系统已安装的python包) 

 virtualenv --no-site-packages venv  # 加上参数 --no-site-packages.




执行上述命令,项目中,多出一个名为”venv”的文件夹.
该文件夹,会从”宿主主机”,根据创建方式,拷贝一份”python环境”.
该虚拟环境中,默认已安装pip.


3.2 项目中使用虚拟环境
source venv/bin/activate   # 激活项目中的虚拟环境, venv为 创建虚拟环境时,给定名称


3.3 执行操作
3.3.1 安装开发包


sudo pip install flask   # 安装flask包




3.3.2运行项目


python xxx.py


3.4 结束虚拟环境
项目运行结束,执行如下命令:


deactivate      # 退出项目的 virtualenv 虚拟环境.


3.5 生成可打包环境


某些特殊需求下,可能没有网络, 我们期望直接打包一个ENV, 可以解压后直接使用, 这时候可以使用virtualenv -relocatable指令将ENV修改为可更改位置的ENV


3.6 查看帮助


4 使用技巧


经常有这样一种需求:就是把项目发布,需要知道项目依赖哪些包.


4.1 pip的常用操作.
导出:
pip freeze > requirements.txt   # 导出项目依赖的包到requirements.txt文件


批量安装:
pip install -r requirements.txt  # 从依赖文件,批量安装包.


4.2 配合virtualenv使用.


这里为何一定要用virtualenv呢?因为如果没有使用virtualenv,上述pip freeze操作,会将主机安装过的所有python包,都导出.这显然不是我们需要的.


对单一的项目,如果没有virtualenv,将导出一堆用不到的包.


有了virtualenv,就可以先激活项目中的virtualenv,再执行pip freeze操作.这样就可以保证获取到的都是项目依赖(无冗余).


5 pip常用操作

sudo pip install flask             # 单一安装flask包 

 pip install -r requirements.txt    # 批量安装python包 

 pip list                           # 查看环境中,已安装的所有python包 

 pip freeze > requirements.txt      # 导出环境中,已安装所有包至配置文件