提到 Python 环境管理,更多人可能会首先想到 virtualenv。但与用于创建独立包环境的virtualenv 不同,pyenv 的作用仅限于维护不同版本的 Python。它的使用不依赖于 Python,是一个简单、独立的纯shell 脚本工具。
pyenv 也以pyenv-virtualenv插件的形式支持 virtualenv,强烈建议使用。安装后比较方便的是可以在你 cd 到项目目录时自动切换相应的虚拟环境,而不用老是source.
安装并配置pyenv参考1参考2参考3
作者很亲切地提供了一个自动安装工具:
$curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
如果想自己手动安装并进行配置的话,可参考pyenv安装传送门或下面代码:
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
然后需要配置一下:
vi ~/.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH ="$PYENV_ROOT/bin:$PATH"
eval"$(pyenv init -)"
source~/.bash_profile# exec $SHELL
source 主要用于重启配置,source前后对比如下:
root@tangshan-PC:~/.pyenv/bin#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@tangshan-PC:~/.pyenv/bin# source ~/.bash_profile
root@tangshan-PC:~/.pyenv/bin#echo $PATH
/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
列表可安装的Python版本
pyenv install --list
除了Python官方版本,还支持anaconda、ironpython、jython、miniconda、pypy、stackless
安装指定版本的Python,鉴于我之前用科学计算比较多,偷懒装了anaconda2-4.3.1,本次目标极简(主要怕系统再次出现卡顿现象),所以,采用最新的2.7.9
root@tangshan-PC:~# pyenv install 2.7.9
Downloading Python-2.7.9.tgz...
-> https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
(下面是我遇见的各种错误,解决方案参考了这个pyenv报错集锦)
本以为这样就可以了,但并没有。这样会直接连接到官网下载,速度实在不敢恭维。因此需要添加镜像加速。如果安装2.7.6你可以选择使用国内七牛的镜像。项目地址http://pyenv.qiniudn.com/pythons/。(别问我为什么要装2.7.6,妈蛋的七牛最高版本只到2.7.6.)
root@tangshan-PC:~# export PYTHON_BUILD_MIRROR_URL=”http://pyenv.qiniudn.com/pythons/”
root@tangshan-PC:~# pyenv install 2.7.6
……
configure: error: in `/tmp/python-build.20170531133442.3922/Python-2.7.6':
configure: error: no acceptable C compiler found in $PATH
报错说依赖包gcc没有安装,小事情,装一下:
root@tangshan-PC:~# apt-get install gcc
又报错,这次是make没装,继续:
root@tangshan-PC:~# apt-get install make
发现报错是因为依赖包没装好,重新安装依赖包:
apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils
重启一下,发现使用七牛并没有好的效果,果断采用源码(如~/Python-2.7.6.tar.gz)缓存在.pyenv/cache目录中,在安装完后可手动删除。
root@tangshan-PC:~# mkdir ~/.pyenv/cache
root@tangshan-PC:~# cp /root/Downloads/Python-2.7.9.tar.xz /root/.pyenv/cache
root@tangshan-PC:~# pyenv install 2.7.9
Python版本安装在~/.pyenv/versions目录中。安装完成后还需要敲如下命令:
# 为所有已安装的可执行文件 (如:~/.pyenv/versions/*/bin/*) 创建 shims, # 因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令 $ pyenv rehash
设置shell的Python版本
用global设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。
pyenv global 3.4.0
设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式, 通过这种方式设置的 Python 版本优先级较 global 高。pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。#若找不到,就用 global 版本。
pyenv local 2.7.3
设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。# 这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。
pyenv shell pypy-2.2.1
pyenv shell --unset
切换前后效果如下:
root@tangshan-PC:~# pyenv versions
* system (set by /root/.pyenv/version)
2.7.9
root@tangshan-PC:~# pyenv global 2.7.9
root@tangshan-PC:~# pyenv versions
system
* 2.7.9 (set by PYENV_VERSION environment variable)
安装pyenv-virtualenv,pyenv-virtual是pyenv的插件,它支持管理多个virtualenv。
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"'>> ~/.bash_profile
创建virtualenv
pyenv virtualenv 2.7.9 saa-virtual-env
创建saa-virtual-env之前,须先安装Python 2.7.9(通过系统或pyenv安装)。
saa-virtual-env存储在~/.pyenv/versions/2.7.9/envs目录中,且在~/.pyenv/versions目录中建立同名符号链接。
激活/禁用virtualenv
pyenv activate saa-virtual-env
pyenv deactivate
# 删除新创建的环境 $rm -rf ~/.pyenv/versions/saa-virtual-env/
参考资料:
http://www.malike.net.cn/blog/2016/05/21/pyenv-tutorial/
使用 pyenv 可以在一个系统中安装多个python版本
pyenv命令大全
python 环境管理器pyenv 命令 (翻译)
在Ubuntu上安装pyenv 相关问题