背景
- 不同python版本
同一电脑上的多个python版本,开发着需要考虑版本兼容 - 同一python版本中同一库的不同版本管理
例如在python2.7下应用A是基于Django1.6,应用B是基于Django1.7的,这种情况怎么管理。
引荐virtualenv, virtualenvwrapper
“The basic problem being addressed is one of dependencies and versions, and indirectly permissions. Imagine you have an application that needs version 1 of LibFoo, but another application requires version 2. How can you use both these applications? If you install everything into/usr/lib/python2.7/site-packages (or whatever your platform’s standard location is), it’s easy to end up in a situation where you unintentionally upgrade an application that shouldn’t be upgraded.
Or more generally, what if you want to install an application and leave it be? If an application works, any change in its libraries or the versions of those libraries can break the application.
Also, what if you can’t install packages into the global site-packages directory? For instance, on a shared host.”
安装
一般使用pip:
[sudo] pip install virtualenv
[sudo] pip install virtualenvwrapper
使用
创建虚拟环境
virtualenv pythonenv
virtualenv pythonenv --no-site-packages #依赖系统环境中的site packages
启用虚拟环境
source pythonenv/bin/activate #linux
pythonenv\Scripts\activate.bat #Windows
退出虚拟环境
pythonenv/bin/deactivate #linux
pythonenv\Scripts\deactivate #Windows
虚拟环境的管理
将所有的虚拟环境整合在一个目录下。
管理(新增、移除、复制)所有的虚拟环境。
可以使用一个命令切换虚拟环境。
Tab 补全虚拟环境的名字。
每个操作都提供允许使用者自定的hooks。
可撰写容易分享的extension plugin 系统。
常用管理命令
列出虚拟环境列表:workon 或者lsvirtualenv
新建虚拟环境:mkvirtualenv [虚拟环境名称]
启动/切换虚拟环境:workon [虚拟环境名称]
删除虚拟环境:rmvirtualenv [虚拟环境名称]
离开虚拟环境:deactivate
总结
基于virtualenv + virtualenvwrapper可以很好的完成环境隔离,保证对每个应用的环境是干净的。而且对一个干净的环境可以通过:
pip freeze > requirements.txt
将包依赖信息保存在requirements.txt文件
pip install -r requirements.txt
会自动安装所有包, 方便应用部署分发