Python多版本管理:pyenv
Python多环境创建:virtualenv
Python多环境管理:virtualenvwrapper
pyenv的介绍
经常遇到这样的情况:
- 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性;
- 系统自带的 Python 是 2.x,自己需要 Python 3.x;
此时需要在系统中安装多个 Python,但又不能影响系统自带的 Python,即需要实现 Python 的多版本共存。pyenv 就是这样一个 Python 版本管理器。
安装 pyenv
在终端执行如下命令以安装 pyenv 及其插件:
|
|
安装完成后,根据提示将如下语句加入到 ~/.bashrc
中:
|
|
然后重启终端即可。
安装 Python
查看可安装的版本
|
|
该命令会列出可以用 pyenv 安装的 Python 版本。列表很长,仅列举其中几个:
2.7.8 # Python 2 最新版本
3.4.1 # Python 3 最新版本
anaconda2-4.1.0 # 支持 Python 2.6 和 2.7
anaconda3-4.1.0 # 支持 Python 3.3 和 3.4
其中 2.7.8 和 3.4.1 这种只有版本号的是 Python 官方版本,其他的形如 anaconda2-4.1.0
这种既有名称又有版本后的属于 “衍生版” 或发行版。
安装 Python 的依赖包
在编译 Python 过程中会依赖一些其他库文件,因而需要首先安装这些库文件,已知的一些需要预先安装的库如下。
在 CentOS/RHEL/Fedora 下:
sudo yum install readline readline-devel readline-static
sudo yum install openssl openssl-devel openssl-static
sudo yum install sqlite-devel
sudo yum install bzip2-devel bzip2-libs
在 Ubuntu 下:
sudo apt-get update
sudo apt-get install make build-essential libssl-dev zlib1g-dev
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl
sudo apt-get install llvm libncurses5-dev libncursesw5-dev
安装指定版本
用户可以使用 pyenv install
安装指定版本的 python。如果你不知道该用哪一个,推荐你安装 anaconda3 的最新版本,这是一个专为科学计算准备的发行版。
|
|
执行该命令后,会从给定的网址中下载安装文件 Anaconda3-4.1.0-Linux-x86_64.sh
。但由于文件很大,通常下载需要很久。建议的做法是,先执行以上命令然后马上中断安装,这样就知道 pyenv 要下载的文件的链接。然后用户自己用其他更快的方式(比如 wget、迅雷等等)从该链接中下载安装文件,并将安装文件移动到 ~/.pyenv/cache
目录下(该目录默认不存在,用户要自行新建)。
以本文说的情况为例:
- 执行
pyenv install anaconda3-4.1.0 -v
获取下载链接 - 用 wget 从下载链接中获取文件
Anaconda3-4.1.0-Linux-x86_64.sh
- 将安装包移动到
~/.pyenv/cache/Anaconda3-4.1.0-Linux-x86_64.sh
- 重新执行
pyenv install anaconda3-4.1.0 -v
命令。该命令会检查 cache 目录下已有文件的完整性,若确认无误,则会直接使用该安装文件进行安装。
安装过程中,若出现编译错误,通常是由于依赖包未满足,需要在安装依赖包后重新执行该命令。
更新数据库
在安装 Python 或者其他带有可执行文件的模块之后,需要对数据库进行更新:
|
|
查看当前已安装的 python 版本
|
|
其中的星号表示当前正在使用的是系统自带的 python。
设置全局的 python 版本
|
|
当前全局的 python 版本已经变成了 anaconda3-4.1.0。也可以使用 pyenv local
或 pyenv shell
临时改变 python 版本。
确认 python 版本
|
|
使用 python
- 输入
python
即可使用新版本的 python; - 系统自带的脚本会以
/usr/bin/python
的方式直接调用老版本的 python,因而不会对系统脚本产生影响; - 使用
pip
安装第三方模块时会自动按照到当前的 python 版本下,不会和系统模块发生冲突。 - 使用
pip
安装模块后,可能需要执行pyenv rehash
更新数据库;
pyenv 其他功能
pyenv uninstall
卸载某个版本pyenv update
更新 pyenv 及其插件
参考
virtualenv以及virtualenvwratpper的介绍
各位 Python 的小伙伴肯定多多少少接触过 virtualenv。本文将介绍 virtualenv 以及如何更科学更优雅地使用 virtualenv。
virtualenv
首先来聊一下 virtualenv
是个什么鬼。
在使用 Python
开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。这里,就要隆重介绍 virtualenv
,一个可以帮助我们管理不同 Python
环境的绝好工具。virtualenv
可以在系统中建立多个不同并且相互不干扰的虚拟环境。另外,值得一提的是,在 virtualenv
的虚拟环境中使用 pip
安装依赖还可以绕过某些系统的权限设置,因为毕竟不需要向系统目录写入数据嘛~~
那么,virtualenv
是怎么运行的呢?
安装
首先从安装讲起,这里假设已经安装了 pip
,如果没有安装 pip
的话,请自行出门谷歌 (好吧,我是好人,附上 pip
官方文档链接)。之后就可以用 pip
来直接安装 virtualenv
了。当然,这里可能是需要使用 sudo
提升权限的,毕竟是在宿主物理环境里安装。如下命令中 sudo
省略,如有需求请自行添加。
pip install virtualenv
好了现在你拥有了 virtualenv
虚拟环境管理器。
使用
接下来说使用。
比如我们想要做一点奇怪的事情,写一个脚本去抓取某个网站的信息,我们暂且把这个工程叫做 spider
吧。这个工程里需要访问网络,我们打算使用为人类编写的网络访问库 requests
,但是我们又不想在宿主环境中安装这个包。让我们开始吧。
假设我们把这个工程放在 /path/to/project/spider/
目录下,并且这里我们把虚拟环境直接放在工程目录下。首先,我们在这个目录下建立一个虚拟环境。
virtualenv /path/to/project/spider
这样,虚拟环境就建立好了。此时可以看到,在这个目录下面会有三个目录被建立:
bin
include
lib
其中,bin
目录中包含一些在这个虚拟环境中可用的命令,以及开启虚拟环境的脚本 activate
;include
中包含虚拟环境中的头文件,包括 Python
的头文件;lib
中就是一些依赖库啦~~
当然,现在我们还没有进入到虚拟环境中。激活虚拟环境只需要一条命令。
source /path/to/project/spider/bin/activate
此时就可以我们就已经在虚拟环境中啦。
接下来安装工程需要的 requests
库。
pip install requests
搞定!
这时候在虚拟环境里就有了 requests
库,宿主环境中则不会被干扰。
那么如何退出虚拟环境嘞?退出就更简单啦,只需要下面一个命令就搞定啦。
deactivate
此时就回到了进入虚拟环境之前,一切都好像没发生过。多年以后,如果你忘记了虚拟环境的位置,一切就真的没发生过了 = =
补充一句,如果想要删除虚拟环境,只要把这个目录下的 bin
、include
和 lib
三个目录删掉就好了。
virtualenvwrapper
为神马需要 virtualenvwrapper
?这要从 virtualenv
说起。
上一节结束的时候说,如果忘记了虚拟环境的位置,一切就真的没发生过了。虽然是句玩笑,不过真的会发生哦~
virtualenv
的一个最大的缺点就是,每次开启虚拟环境之前要去虚拟环境所在目录下的 bin
目录下 source
一下 activate
,这就需要我们记住每个虚拟环境所在的目录。
一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,比如放到 ~/virtualenvs/
,并对不同的虚拟环境使用不同的目录来管理。virtualenvwrapper
正是这样做的。并且,它还省去了每次开启虚拟环境时候的 source
操作,使得虚拟环境更加好用。
安装
同样,从安装开始。
安装 virtualenvwrapper
也可以使用 pip
的方式。需要加入 sudo
的话请自行加入哦~
pip install virtualenvwrapper
不过,在 Mac OS X El Capitan 上可能会出现安装报错的情况,主要问题出在一个叫做 six
的包上。因此安装的时候,可以采用如下方式。
pip install virtualenvwrapper --ignore-installed six
现在,我们就拥有了一个可以管理虚拟环境的神器。
使用
首先,需要对 virtualenvwrapper
进行配置。它需要指定一个环境变量,叫做 WORKON_HOME
,并且需要运行一下它的初始化工具 virtualenvwrapper.sh
,这个脚本在 /usr/local/bin/
目录下。WORKON_HOME
就是它将要用来存放各种虚拟环境目录的目录,这里我们可以设置为 ~/.virtualenvs
。
export WORKON_HOME='~/.virtualenvs'source /usr/local/bin/virtualenvwrapper.sh
由于每次都需要执行这两部操作,我们可以将其写入终端的配置文件中。例如,如果使用 bash
,则添加到 ~/.bashrc
中;如果使用 zsh
,则添加到 ~/.zshrc
中。这样每次启动终端的时候都会自动运行,终端其中之后 virtualenvwrapper
就可以用啦。
利用 virtualenvwrapper
,我们可以使用下面的命令轻松创建一个虚拟环境。
mkvirtualenv spider
之后我们就有了一个叫做 spider
的虚拟环境。它被存放在 $WORKON_HOME/spider
目录下。
新建虚拟环境之后会自动激活虚拟环境。如果我们平时想要进入某个虚拟环境,可以用下面的命令。
workon spider
这也就是为什么环境变量中存放虚拟环境的目录为啥叫做 WORKON_HOME
。顺便说一句,workon
后面可是可以支持用 tab
自动补全的哟。
同样,离开虚拟环境,可以使用。
deactivate
另外,删除虚拟环境也一样简单。
rmvirtualenv spider
结束
到这里,virtualenv
和 virtualenvwrapper
的基本使用就介绍完了,需要了解更多用法,可以参考官方文档哟。希望这两个工具能够帮助小伙伴们在工作中提高效率哟~~