pyenv可以帮助你在一台开发机上建立多个版本的python环境, 并提供方便的切换方法。
例如系统自带的Python是2.6,自己需要Python 2.7中的某些特性;此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pyenv就是这样一个Python版本管理器。
pyenv项目地址: https://github.com/yyuu/pyenv
安装pyenv
通过脚本自动安装方式
通过https://github.com/yyuu/pyenv-installer
提供脚本进行自动安装
安装
1 | $ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash |
添加环境变量
PYENV_ROOT
指向pyenv检出的根目录,并向$PATH
添加$PYENV_ROOT/bin
以提供访问pyenv
这条命令的路径(这里的shell配置文件(~/.bash_profile
)依不同SHELL而需作修改,如Zsh:~/.zshrc
)
BASH
1 | $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc |
重启shell(因为修改了$PATH)
1 | $ exec $SHELL |
ZSH
1 | $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc |
重启shell(因为修改了$PATH)
1 | $ exec $SHELL |
更新
1 | $ pyenv update |
卸载
1 | #Uninstall: pyenv is installed within $PYENV_ROOT (default: ~/.pyenv). To uninstall, just remove it: |
手动安装方式
安装
将pyenv检出到你想安装的目录。建议路径为$HOME/.pyenv
1 | $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv |
添加环境变量
PYENV_ROOT
指向pyenv检出的根目录,并向$PATH
添加$PYENV_ROOT/bin
以提供访问pyenv
这条命令的路径(这里的shell配置文件(~/.bash_profile
)依不同SHELL而需作修改,如Zsh:~/.zshrc
)
BASH
1 | $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc |
重启shell(因为修改了$PATH)
1 | $ exec $SHELL |
ZSH
1 | $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc |
重启shell(因为修改了$PATH)
1 | $ exec $SHELL |
更新pyenv
1 | $ cd ~/.pyenv |
删除特定版本Python
查找特定版本Python文件夹位置,之后直接删除即可。
1 | $ pyenv prefix 3.4.3 |
包安装
Linux
1 | $ pip install --egg pyenv |
MAC
1 | $ brew install pyenv |
pyenv可用的命令
查看pyenv的命令
1 | $ pyenv -h |
使用
查看当前 pyenv 可检测到的所有版本,处于激活状态的版本前以*
标示。
1 | $ pyenv versions |
查看当前处于激活状态的版本,括号中内容表示这个版本是由哪条途径激活的(global、local、shell)
1 | $ pyenv version |
使用python-build(一个插件)安装一个Python版本,到$PYENV_ROOT/versions
路径下。
1 | $ pyenv install -v 2.7.3 |
建议添加-v
参数用于显示细节。python-build
会首先尝试从一个镜像站点下载包,此时可以去/tmp/python-build.xxx 里面关心一下下载速度。如果太慢,可以直接在shell里ctrl-c
终止此次下载,然后python-build
会自动去python.org/ftp
下载。不一定哪个更快。
卸载一个版本
1 | $ pyenv uninstall 2.7.3 |
为所有已安装的可执行文件 (如:~/.pyenv/versions//bin/) 创建shims,因此,每当你增删了Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令
1 | $ pyenv install 2.7.3 |
设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。
1 | $ pyenv global 3.4.0 |
设置面向程序的本地版本,通过将版本号写入当前目录下的.python-version
文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。pyenv会从当前目录开始向上逐级查找.python-version
文件,直到根目录为止。若找不到,就用global版本。
1 | $ pyenv local 2.7.3 |
设置面向shell的Python版本,通过设置当前shell的PYENV_VERSION环境变量的方式。这个版本的优先级比local和global都要高。--unset
参数可以用于取消当前shell设定的版本。
1 | $ pyenv shell pypy-2.2.1 |
查看pyenv可用的命令
1 | $ pyenv commands |
显示当前Python的安裝路径
1 | $ pyenv which python |
安装不同版本Python
查看可安装的版本
该命令会列出可以用pyenv安装的Python版本,仅列举几个
1 | $ pyenv install --list |
其中形如x.x.x这样的只有版本号的为Python官方版本,其他的形如xxxxx-x.x.x这种既有名称又有版本后的属于衍生版或发行版。
安装Python的依赖包
在安装Python时需要首先安装其依赖的其他软件包,已知的一些需要预先安装的库如下。
在CentOS/RHEL/Fedora下:
1 | $ yum install readline readline-devel readline-static |
安装指定版本
使用如下命令即可安装python 3.4.1
1 | $ pyenv install 3.4.1 -v |
该命令会从github上下载python的源代码,并解压到/tmp目录下,然后在/tmp中执行编译工作。若依赖包没有安装,则会出现编译错误,需要在安装依赖包后重新执行该命令。
对于科研环境,更推荐安装专为科学计算准备的Anaconda发行版
安装2.x版本
1 | $ pyenv install anaconda-2.1.0 |
安装3.x版本
1 | $ pyenv install anaconda3-2.1.0 |
Anacoda很大,用pyenv下载会比较慢,可以自己到Anaconda官方网站下载,并将下载得到的文件放在~/.pyenv/cache
目录下,则pyenv不会重复下载。
更新数据库
安装完成之后需要对数据库进行更新
1 | $ pyenv rehash |
查看当前已安装的python版本
1 | $ pyenv versions |
其中的星号表示当前正在使用的是系统自带的python。
设置全局的python版本
1 | $ pyenv global 3.4.1 |
当前全局的python版本已经变成了3.4.1。也可以使用pyenv local或pyenv shell临时改变python版本。
确认python版本
1 | $ python |
使用python
输入python即可使用新版本的python;
系统自带的脚本会以/usr/bin/python
的方式直接调用老版本的python,因而不会对系统脚本产生影响;
使用pip安装第三方模块时会安装到~/.pyenv/versions/3.4.1
下,不会和系统模块发生冲突。
使用pip安装模块后,可能需要执行pyenv rehash
更新数据库;
Pyenv的pyenv-virtualenv插件
如果你是安装我们前面的方式安装pyenv的,那它已经帮我们以plugin的形式安装好了virtualenv, 我们只要使用就好了
pyenv virtualenv是pyenv的插件,为Unix系统上的python virtualenv提供pyenv virtualenv
命令。它可以为pyenv管理的python版本运行提供隔离的虚拟环境,在此虚拟环境下的操作例如安装第三方模块以及修改库搜索路径等,都不会在原始的python环境里直接操作,从而保证了各python版本本身的纯净。
安装pyenv-virtualenv插件
Linux
1 | $ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv |
注:用pyenv自动安装脚本安装的已自带
MAC
1 | $ brew install pyenv-virtualenv |
添加环境变量
BASH
1 | $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile |
重启SHELL启用pyenv-virtualenv
1 | $ exec $SHELL |
ZSH
1 | $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc |
重启SHELL启用pyenv-virtualenv
1 | $ exec "$SHELL" |
pyenv-virtualenv使用
pyenv-virtualenv
会为pyenv
引入一些新命令,例如virtualenv/virtualenv-delete
用户创建/删除虚拟环境,virtualenvs用于列出所有的虚拟环境,activate和deactivate用于激活/禁用已有虚拟环境,用于获取使用帮助:
1 | $ pyenv help virtualenv |
使用pyenv-virtualenv建立虚拟python环境
pyenv virtualenv依赖于通过pyenv已安装的python版本,只能建立已安装python版本的虚拟环境
查看可用python版本列表
1 | $ pyenv versions |
创建一个虚拟的python环境
创建一个名为myenv的虚拟python环境,其使用3.4.2的版本。
这条命令在本机上创建了一个名为myenv的python虚拟环境,这个环境的真实目录位于:~/.pyenv/versions/
1 | $ pyenv virtualenv 3.4.2 myenv |
注意,命令中的3.4.2必须是一个安装前面步骤已经安装好的python版本, 否则会出错。
然后我们可以继续通过pyenv versions 命令来查看当前的虚拟环境, 结果如下:
1 | $ pyenv versions |
这里我们可以看到, 除了已经安装的python版本, 我们多出了一个myenv的python虚拟环境。
仅查看python的虚拟环境
1 | $ pyenv virtualenvs |
在当前工作目录激活虚拟环境myenv,此时Python版本自动变为3.4.2, 且是独立环境
1 | $ pyenv activate myenv |
接下来我们的python环境就已经切换到3.4.2的虚拟环境了, 运行python命令认证
1 | $ python |
查看可用pip及其版本
1 | (myenv) $ pip -V |
运行ipython,并尝试导入pymysql模块,如果能导入成功,则表示模块已然就绪;
1 | $ ipython |
如果要切换回系统环境, 运行这个命令即可
1 | $ pyenv deactivate |
那如果要删除这个虚拟环境呢? 答案简单而且粗暴,只要直接删除它所在的目录就好:
1 | $ rm -rf ~/.pyenv/versions/myenv/ |
顺带一提,Python3自带了一个叫做venv的虚拟环境模块,搭配pyenv使用简直爽
1 | $ python3 -m venv venv # 报错的话那就 python3 -m venv --without-pip venv |
参考
http://www.google.com/
https://github.com/yyuu/pyenv
http://m.oschina.net/blog/267469
https://blog.laisky.com/p/pyenv/
https://wp-lai.gitbooks.io/learn-python/content/0MOOC/pyenv.html
http://www.cnblogs.com/npumenglei/p/3719412.html
http://seisman.info/python-pyenv.html