随着安装各种python package,我们的site-packages/dist-packages会越来越杂乱,而且有些包是临时测试用途的,基本用完之后就荒废了,更重要的是,有些程序的运行环境比较复杂,当和其他程序混在一起的时候,容易出现冲突或各种各样的错误,甚至进入死版本状态无法同时解决,这也是目前大多数python开发者都推荐使用virtualenv的最主要原因,比如readthedoc/django/django-cms等等混在一起的环境。
现在我们就从头开始,利用virtualenv搭建各种不同的python虚拟开发/运行环境,并从头开始部署django-cms
安装部署virtualenv
首先,这个工具叫virtualenv
(看看文档赶紧回来,我们继续啦)
下面我们进行安装,这里假定使用环境为ubuntu 13.10,当然Windows平台的pip工作原理也是一样的,只是virtualenv的运行机制会有所变化,需要了解的朋友自行google一下吧。
sudo pip install virtualenv或者sudo apt-get install python-virtualenv
推荐前一种,利用python的pip进行安装管理,这样不至于在我们的ubuntu软件丛里面增加更多的东西,如果你的pip罢工,就用第二种方式吧。
这里需要注意,安装virtualenv是有几个依赖包的,上述两种安装方式会自动安装依赖包。
等待安装结束,我们就可以使用virtualenv来配置虚拟环境了。
首先,virtualenv的大致工作原理是,在命令行当前位置创建一个包含虚拟环境各种信息的文件夹,同时在文件夹中bin/创建控制虚拟环境的脚本,当我们使用该虚拟环境(也就是这个目录中的东东)的时候,包括各种envvar`site-packages`会统统只聚合在这个虚拟环境(目录)中,不会对原始python环境造成任何影响。
接下来的操作中,我们假定会把各种虚拟环境都统一放在~/virtualenv/里面,并且搭建django-cms的专用虚拟环境。
1 | cd ~ |
上面的最后一条命令就是创建了以env-django-cms为名称的虚拟环境(其实就是个目录)。
1 | cd ~/virtualenv/env-django-cms |
上面的命令是使用source命令执行~/virtualenv/env-django-cms/bin/active脚本,这个脚本会激活当前虚拟环境,在bin/目录中还有其他脚本,以默认命令创建虚拟环境时会默认安装pip`easy_install`等python脚本,方便使用。
当激活该虚拟环境之后,我们的shell提示符前就多了(env-django-cms)这个信息,表示当前已经进入了虚拟环境,使用的是env-django-cms.
对于不同的虚拟环境,可以使用source命令到不同的文件夹中进行切换,而删除虚拟环境比较简单,退出控制台(其实就是退出当前虚拟环境),重新打开控制台,干掉对应的虚拟环境目录就OK了。
其实virtualenv命令并不是我们本文的终点,接下来的virtualenvwrapper才是日常真正使用的virtualenv帮助程序。
virtualenvwrapper封装了虚拟环境的各种操作,不需要再使用类似source这样的命令。
1 | sudo pip install virtualenvwrapper |
同样会自动安装几个依赖包。
安装完毕之后,编辑~/.bashrc,在文件末尾新行中添加下面一行内容:
1 | source /usr/local/bin/virtualenvwrapper.sh |
这里说明一下,ubuntu是.bashrc,fedora/redhat/mandriva等发行版的rc文件不一定是这个。
设置好之后,exit退出控制台,重新打开控制台,以应用上面的设置,这样我们的virtualenvwrapper就可以正常工作了。
下面是几个常用命令(不需要再使用virtuelenv/source等命令了):
| 功能 | 命令 |
|---|---|
| 创建虚拟环境 | mkvirtualenv env-django-cms |
| 退出当前虚拟环境 | deactivate |
| 进入或切换虚拟环境 | workon env-django-cms |
| 删除虚拟环境 | rmvirtualenv env-django-cms |
需要说明的几点是:
virtualenvwrapper创建的虚拟环境默认会放在
~/.virtualenvs目录中,并且上述操作虚拟环境的命令也与路径无关,不管你当前目录在哪里,virtualenvwrapper都会去~/.virtualenvs目录中查找相应目录。当workon启用虚拟环境之后,使用
easy_install/pip等命令时要小心,比如pip2/pip3这些在虚拟环境目录中的bin/中没有的脚本,还是会默认调用python原来的脚本,而在虚拟环境中,pip2对应的是pip-2.7(或者你的版本号),我喜欢指定版本号调用命令,所以开始的时候也犯过pip2/pip3将包安装到了python原始site-packages并提示权限不够安装终止的问题。而在bin/目录中的pip/easy_install等脚本,则是可以在任何地方直接使用的,它们的优先级高于全站脚本,不会调用python site-wide script在虚拟环境中使用pip安装时,最好手动指定一下缓存目录,这样所有虚拟环境都会通用这个目录,不用一遍遍的下载相同的包进行安装了,比如:
1 | pip-2.7 install --download-cache=~/.pip2_cache psycopg2 |
自此,virtualenv及其帮助程序顺利搞定,接下来我们开始部署django-cms
当年就写到这里……官方文档很详细,就不重复了