使用virtualenv管理多个Python版本


在Ubuntu14.04上默认安装的Python版本是2.7.6,而且似乎也没有更到2.7.9以上的打算。有时,运行一些模块需要更高版本的Python(比如urllib3的一些功能需要2.7.9以上),这时该怎么办呢?

之前有一次遇到这种情况,我直接wget Python2.7.11的源码编译安装,覆盖了原来的2.7.6的版本。但是这直接导致了原来系统中一些依赖2.7.6版本的模块无法启动。而从源码安装的Python版本回退回系统默认安装的Python版本的过程是极其痛苦的,apt-get purge删不干净,需要手动locate各种Python模块的位置,尤其当系统中还有源码安装的Python3时,简直不堪回首……

最近又遇到了这样的问题,花了一些时间调研了下virtualenv,发现两个参数配合使用,正好可以解决多Python版本的问题。从此,妈妈再也不用担心我搞乱Python环境啦~

下面以在Ubuntu14.04(默认Python2.7.6)上安装Python2.7.9,运行zhihu-terminal(依赖Python2.7.9)为例,记录整个流程。


从源码安装Python

1
2
3
4
5
6
$ wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
$ tar xvf Python-2.7.9.tgz
$ cd Python-2.7.9/
$ ./configure --prefix=/usr/local/lib/
$ make
$ sudo make install

这里最重要的一个参数是--prefix=/usr/local/lib/,它确保了新安装的Python版本和系统默认的Python互不影响。

这时,直接运行python,还会显示版本是2.7.6:

1
2
3
4
5
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

运行Python2.7.9,需要找到/usr/local/lib/bin/下面的python:

1
2
3
4
5
$ /usr/local/lib/bin/python
Python 2.7.9 (default, Jul 22 2016, 17:26:34)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

配置virtualenv

virtualenv的安装就不赘述了。

1
2
3
4
5
6
7
8
$ cd zhihu-terminal
$ virtualenv -p /usr/local/lib/bin/python .
$ source ./bin/activate
(virtualenv)$ python
Python 2.7.9 (default, Jul 22 2016, 17:29:31)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

这里出现了第二个重要的参数 -p /usr/local/lib/bin/python,指定了virtualenv所使用的Python路径。

至此,在当前virtualenv下就可以畅快的使用Python2.7.9,而不用改动系统默认的Python2.7.6了~


转载请注明出处: http://blog.guoyb.com/2016/07/22/virtualenv-trick/

欢迎使用微信扫描下方二维码,关注我的微信公众号TechTalking,技术·生活·思考:
后端技术小黑屋

Comments