virtualenv 介绍
virualenv is a tool to create isolated Python environments.
virtualenv创建一个独立的安装目录环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。
virtualenv
通过创建独立Python开发环境的工具, 来解决依赖、版本以及间接权限问题。比如同一依赖包版本跨度过大, 导致不兼容使项目无法正在运行, 使用virtualenv可以解决这些问题,或者当需要使用不同python版本也可以通过该方式解决。
安装Virtualenv
直接通过pip安装,需要pip版本1.3以上
shell> pip install virtualenv
通过源码包安装
shell> curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-X.X.tar.gz
shell> tar xvfz virtualenv-X.X.tar.gz
shell> cd virtualenv-X.X
shell> python setup.py install
Virtualenv使用
安装完毕之后,可以使用virtualenv管理python环境
创建虚拟环境
shell> mkdir -p /app/python/
shell> cd /app/python/
#将会创建一个名为ENV3的目录, 并且安装了ENV3/bin/python, 创建了lib,include,bin目录,安装了pip,默认不会访问系统共享库.
shell> virtualenv ENV3
Using base prefix '/usr/local/python3'
New python executable in /app/python/ENV3/bin/python3.4
Also creating executable in /app/python/ENV3/bin/python
Installing setuptools, pip, wheel...done.
shell> ll ENV3/
drwxr-xr-x 2 root root 4096 10月 12 17:01 bin
drwxr-xr-x 2 root root 4096 10月 12 16:58 include
drwxr-xr-x 3 root root 4096 10月 12 16:58 lib
-rw-r--r-- 1 root root 60 10月 12 17:01 pip-selfcheck.json
`lib`,所有安装的python库都会放在这个目录中的`lib/pythonx.x/site-packages/`下
`bin`,`bin/python`是在当前环境是使用的python解释器
-p PYTHON_EXE, --python=PYTHON_EXE:指定默认的python解释器
--system-site-packages:指定虚拟环境访问系统共享库。
--always-copy:默认拷贝文件而不是做软连接。
--no-pip:创建新环境时不安装pip。
--relocatable:将ENV修改为可更改位置的ENV,将所有脚本文件修改为相对路径。目前版本存在问题,可能无效。
创建python2.7环境
shell> virtualenv --python=/usr/local/python/bin/python --system-site-packages ENV27
激活使用虚拟环境
激活虚拟环境
shell> source ENV3/bin/activate
# 注意此时终端发生了变化
(ENV3) # python -V
Python 3.4.4
(ENV3) # pip list
pip (8.1.2)
setuptools (28.3.0)
wheel (0.30.0a0)
进入python2虚拟环境
shell> source ENV27/bin/activate
(ENV27) # python -V
Python 2.7.9
(ENV27) # pip list
APScheduler (3.0.5)
mysql-connector-python (1.2.3)
pip (8.1.2)
setuptools (28.3.0)
wheel (0.30.0a0)
退出虚拟环境
shell> deactivate
小结
virtualenv通过把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate
进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python
和pip
均指向当前的virtualenv环境。
virtualenv为应用提供了隔离的Python运行环境,可以解决不同应用间多版本的冲突问题。