Fork me on GitHub

Python系列之《Virtualenv使Python2与3项目并存》

前言:我在开发公司的运维cmdb平台时,使用的环境是python2.7,但有些项目我需要用到python3的环境来做,因此一个环境不能满足我需求,当然我想过很多方法,比如:虚拟机、docker?;但在我了解virtualenv过后,发现这个东西能实现我的需求,而且非常便捷。

ps : python2系统默认的环境,所以本文我们主要讲解python3如何使用Virtualenv来创建我们想要的项目环境。这是我在mac环境下配置的过程。

python 环境说明

mac自带有python2.7,我在mac上又安装了python3.6,安装方法就是在python官网下载一个Mac的包,然后以Mac安装包方式安装即可,安装好后会在这里出现:

1
2
3
4
5
tanshuai@tanshuaideMacBook-Pro # ls -lh /Library/Frameworks/Python.framework/Versions/
total 8
drwxrwxr-x 10 root admin 340B 7 29 12:17 2.7 <==系统自带
drwxrwxr-x 10 root admin 340B 9 26 12:34 3.6 <==官网下载安装的
lrwxr-xr-x 1 root wheel 3B 7 29 12:17 Current -> 2.7

安装好python3后,记得做环境变量:

1
2
tanshuai@tanshuaideMacBook-Pro # vim .bash_profile
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"

首先,安装virtualenv

第一步:查看pip是哪个版本

1
2
3
4
5
6
tanshuai@tanshuaideMacBook-Pro # which pip
/usr/local/bin/pip
tanshuai@tanshuaideMacBook-Pro # ls -lh /usr/local/bin/pip
lrwxrwxr-x 1 root admin 65B 7 29 12:17 /usr/local/bin/pip -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip
tanshuai@tanshuaideMacBook-Pro # which pip3
/Library/Frameworks/Python.framework/Versions/3.6/bin/pip3

从上能看到pip默认是2.7版本的,因为python3.6版本叫pip3

第二步:安装virtualenv

1
2
3
4
5
tanshuai@tanshuaideMacBook-Pro # pip3 install virtualenv # 使用php3版本安装virtualenv
tanshuai@tanshuaideMacBook-Pro # pip3 list|grep virtualenv
virtualenv 15.1.0
tanshuai@tanshuaideMacBook-Pro # which virtualenv
/Library/Frameworks/Python.framework/Versions/3.6/bin/virtualenv <==注意,一定要使用python3.6环境下的virtualenv,创建出来才会是python3.6环境(python2同理)

使用virtualenv

第一步:创建目录

1
2
tanshuai@tanshuaideMacBook-Pro # mkdir -p ~/Projects/Python/3.6/VirtualSource
tanshuai@tanshuaideMacBook-Pro # cd ~/Projects/Python/3.6/VirtualSource

第二步:创建一个独立的Python运行环境,命名为mxcmdb:

1
2
3
4
5
6
7
8
tanshuai@tanshuaideMacBook-Pro # virtualenv --no-site-packages mxcmdb
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/tanshuai/Projects/Python/3.6/VirtualSource/venv/bin/python3.6
Also creating executable in /Users/tanshuai/Projects/Python/3.6/VirtualSource/venv/bin/python
Installing setuptools, pip, wheel...done.
tanshuai@tanshuaideMacBook-Pro # ls -lh
total 0
drwxr-xr-x 7 tanshuai staff 238B 9 26 13:39 mxcmdb

使用命令virtualenv就可以创建一个独立的Python运行环境,我们还加上了参数–no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。

新建的Python环境被放到当前目录下的mxcmdb目录。有了mxcmdb这个Python环境,可以用source进入该环境:

1
2
tanshuai@tanshuaideMacBook-Pro # source mxcmdb/bin/activate
(mxcmdb) tanshuai@tanshuaideMacBook-Pro #

注意到命令提示符变了,有了个(mxcmdb)前缀,表示当前环境下是一个名为mxcmdb的环境。

在这个环境下可以安装你想要的环境,如:

1
2
3
(mxcmdb)  tanshuai@tanshuaideMacBook-Pro # pip install jinja2
(mxcmdb) tanshuai@tanshuaideMacBook-Pro # pip list|grep Jinja2
Jinja2 2.9.6

在mxcmdb环境下,用pip安装的包都被安装到mxcmdb这个环境下,系统Python环境不受任何影响。

退出当前的mxcmdb环境,使用deactivate命令:

1
2
(mxcmdb)  tanshuai@tanshuaideMacBook-Pro # deactivate
tanshuai@tanshuaideMacBook-Pro #

此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。

virtualenv原理

virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。
小结:
virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。

参考博文:
Python–Virtualenv简明教程:http://www.jianshu.com/p/08c657bd34f1
virtualenv - 廖雪峰的官方网站

-------------本文结束感谢您的阅读-------------