出于种种原因,很多人的电脑上会同时安装很多个版本的 Python,比如会有 2.7 + 3.4。一般在 windows 下我们都可以通过使用绝对路径的方式来绕过系统对 PATH 环境变量的查询;在 linux 下除了这种方式外,还可以在脚本文件开头显示指定需要使用的解释器,就像这样:#!/usr/bin/env python2.7 或 #!usr/bin/env python3.4。一旦特定版本的解释器被打开后,就不用再担心 PATH 的问题了
对于上述问题的解决方案,更多人可能会首先想到 virtualenv。但与用于创建独立包环境的 virtualenv 不同,pyenv 的作用仅限于维护不同版本的 Python。它的使用不依赖于 Python,是一个简单、独立的纯 shell 脚本工具。pyenv 也以 pyenv-virtualenv 插件的形式支持 virtualenv,强烈建议使用。安装后比较方便的是可以在你 cd 到项目目录时自动切换相应的虚拟环境,而不用老是 source.
pyenv 在安装和配置完毕后可以实现:一键(命令)切换全局、本地或当前 shell 使用的 Python 版本。
pyenv 的美好之处在于,他并没有使用将不同的
pyenv 的 github 页面 提供了完整的安装与使用指导,所以本文基本上就是对 Readme 的翻译和解释
手动安装详细步骤如下:
$mkdir ~/.pyenv$git clone git://github.com/yyuu/pyenv.git .pyenv$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_PRofile$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile #向 shell 添加 pyenv init 以启用 shims 和命令补完功能$ exec $SHELL$ source ~/.bash_profile这里的 shell 配置文件(~/.bash_profile)依不同Linux 而需作修改——Zsh:~/.zshenv;Ubuntu:~/.bashrc
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
详细列表:https://github.com/yyuu/pyenv/blob/master/COMMANDS.md#command-reference
常用命令如下: - pyenv versions:查看当前 pyenv 可检测到的所有版本,处于激活状态的版本前以 * 标示。 - pyenv version:查看当前处于激活状态的版本,括号中内容表示这个版本是由哪条途径激活的(global、local、shell) - pyenv install:使用 python-build(一个插件) 安装一个 Python 版本,到 $PYENV_ROOT/versions 路径下。建议添加 -v 参数用于显示细节。python-build 会首先尝试从一个镜像站点下载包,此时可以去 /tmp/python-build.xxx 里面关心一下下载速度 - pyenv uninstall:卸载一个版本 - pyenv rehash:为所有已安装的可执行文件 (如:~/.pyenv/versions//bin/) 创建 shims,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令 - pyenv global:设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。 - pyenv local:设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。 - pyenv shell:设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。–unset 参数可以用于取消当前 shell 设定的版本。
pyenv virtualenv是pyenv的插件,为UNIX系统上的Python virtualenvs提供pyenv virtualenv命令。
系统中不同python版本切换的操作截图如下:
可以看到, python版本已经是3.5.3, 而且是在虚拟环境之中 (env353),这时可以对这个环境进行任意包的安装,且不会对其他环境造成影响
离开环境:pyenv deactivate新闻热点
疑难解答