本文最先发表于我的博客Pylixm'wiki: http://pylixm.cchtml
配置环境:python
CentOS release 6.8linux
pyenv 20160509git
在工做开发中,一直使用 virtualenv
来管理python的包环境。很好的解决了不一样项目使用不一样python包的需求。对于多python版本的问题如何解决一直无解,虽然能够安装多个github
版本的python,靠绝对路径或靠建立虚拟环境的时候指定python(virtualenv -p
)版原本解决,但总感受不是那么的优雅。同事推荐了 pyenv
,一直没用过,特从网上找了些资料试着配置了下,记录以下。shell
pyenv 是针对 python 版本的管理,经过修改环境变量的方式实现;bash
virtualenv 是针对python的包的多版本管理,经过将python包安装到一个模块来做为python的包虚拟环境,经过切换目录来实现不一样包环境间的切换。curl
pyenv 的美好之处在于,它并无使用将不一样的 $PATH 植入不一样的 shell 这种高耦合的工做方式,而是简单地在 $PATH 的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
。全部对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而架空了后面的系统路径。工具
pyenv 提供了自动安装的工具,执行命令安装便可:post
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
需保证系统有 git
,不然须要新安装git工具。
将 pyenv 检出到你想安装的目录。建议路径为:$HOME/.pyenv
$ cd $ git clone git://github.com/yyuu/pyenv.git .pyenv
添加环境变量。PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv 这条命令的路径
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
这里的 shell 配置文件(~/.bash_profile)依不一样 Linux 而需做修改——Zsh:~/.zshenv;Ubuntu:~/.bashrc
向 shell 添加 pyenv init 以启用 shims 和命令补完功能
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
配置文件的位置同上一条同样须要修改
重启 shell(由于修改了 $PATH)
$ exec $SHELL
$ pyenv versions
-- 查看系统当前安装的python列表
$ pyenv install -v 3.5.1
-- 安装python
$ pyenv uninstall 2.7.3
-- 卸载python
$ pyenv rehash
-- 建立垫片路径(为全部已安装的可执行文件建立 shims,如:~/.pyenv/versions/*/bin/*
,所以,每当你增删了 Python 版本或带有可执行文件的包(如 pip)之后,都应该执行一次本命令)
$ pyenv global 3.4.0
-- 设置全局的 Python 版本,经过将版本号写入 ~/.pyenv/version 文件的方式。
$ pyenv local 2.7.3
-- 设置面向程序的本地版本,经过将版本号写入当前目录下的 .python-version 文件的方式。经过这种方式设置的 Python 版本优先级较 global 高。
pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。
$ pyenv shell pypy-2.2.1
-- 设置面向 shell 的 Python 版本,经过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。--unset 参数能够用于取消当前 shell 设定的版本。
$ pyenv shell --unset
shell > local > global
使用自动安装pyenv 后,它会自动安装部分插件,经过pyenv-virtualenv
插件能够很好的和 virtualenv
结合:
[root@linux3311 ~]# cd .pyenv/plugins/ [root@linux3311 plugins]# ll insgesamt 24 drwxr-xr-x. 4 root root 4096 19. Jun 05:17 pyenv-doctor drwxr-xr-x. 5 root root 4096 19. Jun 05:18 pyenv-installer drwxr-xr-x. 4 root root 4096 19. Jun 05:18 pyenv-update drwxr-xr-x. 7 root root 4096 19. Jun 05:18 pyenv-virtualenv drwxr-xr-x. 4 root root 4096 19. Jun 05:18 pyenv-which-ext drwxr-xr-x. 5 root root 4096 19. Jun 05:17 python-build
建立虚拟环境 $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
若不指定python 版本,会汇报认使用当前环境python版本。
列出当前虚拟环境 pyenv virtualenvs
激活虚拟环境 pyenv activate
退出虚拟环境 pyenv deactivate
删除虚拟环境 pyenv uninstall my-virtual-env
使用pyenv 来管理python,使用 pyenv-virtualenv 插件来管理多版本 python包。
此时,还需注意,当咱们将项目运行的 env 环境部署到生产环境时,因为咱们的python 包是依赖python 的,须要注意生产环境的python版本问题(详见 这里)。
以上为我的拙见,欢迎小伙伴们留言交流。小伙伴们如有更好的python 多版本环境管理方案,但愿留言不吝赐教,在此,先谢过了!
pyenv 下载地址 这里
virtualenv 中文文档地址 这里
http://my.oschina.net/lionets/blog/267469
https://github.com/yyuu/pyenv-virtualenv