pyenv的安装和应用

简介

最近本人需要在python3.X的环境中工作,但是mac自带的python版本是2.X的,由于大部分情况下2.X还是主流,所以也不希望自己的2.X升级成3.X,于是希望在一台机器上包含多个版本的python,pyenv是这样一个python版本管理器。

安装pyenv

安装的方法有一些,由于自己的机器上有homebrew,所以使用它来安装pyenv,具体的命令如下:

1
$ brew install pyenv

完成了pyenv的安装后,还需要在_profile文件中写入数条命令,首先打开该文件:

1
$ vi ~/.bash_profile

然后在该文件中写入如下命令:

1
2
3
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.rc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.rc
$ echo 'eval "$(pyenv init -)"' >> ~/.rc

最后执行命令:

1
$ exec $SHELL -l

此时pyenv就安装完成了。

安装python

先查看可安装的python版本:

1
pyenv install --list

这里举例子安装python3.4.2,由于pyenv原本的源下载速度很慢,我们可以使用国内的镜像:

1
export PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/"

然后在运行如下命令:

1
$ pyenv install 3.4.2

安装完成后对数据库进行更新:

1
$ pyenv rehash

接下来就可以对已安装的python版本进行查询了:

1
$ pyenv versions

会看到如下显示:

1
2
* system (set by /Users/yin/.pyenv/version)
3.4.2

pyenv的使用

这里可以进行两种设置

  • 设置全局版本

使用全局版本的方法是在shell中运行命令:

1
$ pyenv global 3.4.2

  • 设置局部版本

在这里本人新建了一个文件夹pythonT,进入该文件夹。然后运行:

1
$ pyenv local 3.4.2

此时运行python命令发现在该文件夹环境下版本是3.4.2当在其它文件夹下运行时是2.7.6(即本人电脑上自带的python版本)。

取消设定

在pyenv中local有–unset参数,而global没有该参数。要取消local设定可以使用:

1
$ pyenv local --unset

使用pyenv-virtualenv

pyenv-virtualenv 是pyenv的插件,为pyenv设置的python版本提供隔离的虚拟环境,设置虚拟环境后,在这个目录下面安装的第三方库及修改库搜索路径都不会影响其他环境,相当于一个沙盒环境,互相不影响。

安装过程见:官方说明

具体的使用:

1
2
3
4
$ pyenv virtualenv <version> <name> #初始化环境
$ pyenv activate <name> #激活环境
$ pyenv deactivate #取消激活环境
$ pyenv unistall <name> #删除存在的环境

(生成的环境可以通过 shift-command-G输入~/.pyenv的地址查看。)

补充说明

Python 3.3中使用pyenv命令创建的虚拟环境不包含pip,需要手动安装。Python 3.4改进了这一缺陷。

##发生的问题汇总
可能是Mac更新系统的原因,当我在用pyenv安装Python-2.7.5的版本时出现了The Python zlib extension was not compiled. Missing the zlib?.解决的方法有两种:

  • 使用CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install -v 2.7.5
  • 尝试重新安装Xcode command line tools(特别是刚升过级的系统)。

建议选择第二种,具体可以在Apple官网下载对应的版本,因为后面还有不少坑,比如遇到的OS X 10.11 using python-build 20150818问题。可以看看原作者和发现问题人的讨论OS X 10.11 pyenv install.

该项目的Github官方主页为:pyenv的官方主页

在具体的处理“坑”的时候,认为显示了隐藏文件可能方便一点,这里提供两个命令:

1
2
$ defaults write com.apple.finder AppleShowAllFiles -bool true #开启显示隐藏
$ defaults write com.apple.finder AppleShowAllFiles -bool false #关闭隐藏

输入后强制重启Finder就可以了。

Mac系统的环境变量,加载顺序为:/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc

/etc/profile和/etc/paths是系统级别的,系统启动就会加载,后面几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取,如果~/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果~/.bash_profile文件不存在,才会以此类推读取后面的文件。~/.bashrc没有上述规则,它是bash shell打开的时候载入的。