本文出处:出处 飞污熊博客
以前一直使用virtualenv来管理python的包环境,但是有时候我需要多个python版本环境时候就不能愉快的玩耍了。 而pyenv可以帮到我。
pyenv是针对python版本的管理,通过修改环境变量的方式实现,在其官网说明上很清楚, 通过在PATH最前面插入shims来决定应用使用的python版本,从而将你的命令传递给正确的python程序。
我的系统环境是CentOS7.2
理解Shims
pyenv会在你的PATH最前面插入一个shims目录:
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
通过一个rehashing操作就可以在该目录匹配所有已经安装的不同版本的python命令,比如python, pip等。 所有对Python可执行文件的查找都会首先被这个shims路径截获,后面的设置就不生效了。
安装
推荐自动安装(保证系统上面先安装git):
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
环境变量
编辑~/.bash_profile,最后面加入:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
重启 shell:
exec $SHELL
常用命令
pyenv versions – 查看系统当前安装的python列表
pyenv version – 查看系统当前使用的python版本
pyenv install -v 3.5.3 – 安装python
pyenv uninstall 2.7.13 – 卸载python
pyenv rehash – 为所有已安装的可执行文件(如:~/.pyenv/versions/bin/)创建shims, 因此每当你增删了Python版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)
版本切换
pyenv global 3.5.3 – 设置全局的Python版本,通过将版本号写入~/.pyenv/version文件的方式
pyenv local 2.7.13 – 设置面向程序的本地版本,通过将版本号写入当前目录下的.python-version文件的方式。 通过这种方式设置的Python版本优先级较global高。
pyenv shell 2.7.13 - 设置面向shell的Python版本,通过设置当前shell的PYENV_VERSION环境变量的方式
优先级: shell > local > global
卸载pyenv
禁用pyenv很简单,只需要在~/.bash_profile中的pyenv init那行删了即可。
完全移除pyenv,先执行上面第1步,然后删了pyenv的根目录: rm -rf $(pyenv root)
插件pyenv-virtualenv
官网地址: https://github.com/pyenv/pyenv-virtualenv
使用自动安装pyenv后,它会自动安装部分插件,通过pyenv-virtualenv插件可以很好的和virtualenv结合
另外,一个可选配置是在~/.bash_profile最后添加:
eval "$(pyenv virtualenv-init -)"
可以实现自动激活虚拟环境,这个特性非常有用建议都加上。
创建虚拟环境: pyenv virtualenv 2.7.13 virtual-env-2.7.13,默认使用当前环境python版本。 在文件夹 ( p y e n v r o o t ) / v e r s i o n s / m y − v i r t u a l − e n v − 2.7.13 中 创 建 一 个 基 于 P y t h o n 2.7.13 的 虚 拟 环 境 。 列 出 虚 拟 环 境 : p y e n v v i r t u a l e n v s , 对 每 个 v i r t u a l e n v 显 示 2 个 , 短 的 只 是 个 链 接 , 那 个 ∗ 表 示 当 前 激 活 的 。 激 活 虚 拟 环 境 : p y e n v a c t i v a t e v i r t u a l − e n v − 2.7.13 退 出 虚 拟 环 境 : p y e n v d e a c t i v a t e 删 除 虚 拟 环 境 : p y e n v u n i n s t a l l v i r t u a l − e n v − 2.7.13 如 果 e v a l " (pyenv root)/versions/my-virtual-env-2.7.13中创建一个基于Python 2.7.13的虚拟环境。 列出虚拟环境: pyenv virtualenvs,对每个virtualenv显示2个, 短的只是个链接,那个*表示当前激活的。 激活虚拟环境: pyenv activate virtual-env-2.7.13 退出虚拟环境: pyenv deactivate 删除虚拟环境: pyenv uninstall virtual-env-2.7.13 如果eval " (pyenvroot)/versions/my−virtual−env−2.7.13中创建一个基于Python2.7.13的虚拟环境。列出虚拟环境:pyenvvirtualenvs,对每个virtualenv显示2个,短的只是个链接,那个∗表示当前激活的。激活虚拟环境:pyenvactivatevirtual−env−2.7.13退出虚拟环境:pyenvdeactivate删除虚拟环境:pyenvuninstallvirtual−env−2.7.13如果eval"(pyenv virtualenv-init -)"写在你的shell配置中(比如上面的~/.bash_profile), 那么当pyenv-virtualenv进入/离开某个含有.python-version目录时会自动激活/退出虚拟环境。
场景使用流程:
pyenv versions
pyenv virtualenv 2.7.13 virtual-env-2.7.13
pyenv local virtual-env-2.7.13
使用pyenv来管理多版本的python命令,使用pyenv-virtualenv插件来管理多版本python包环境。爽歪歪~