Python 版本控制神器

字数 1431阅读 3370

以下内容均转自我的博客 YuanBLQ

由于 python 拥有众多的版本,以及不同模块也有不同的版本。如果每个版本之间相互都不兼容那也就无所谓什么版本控制了,可是同一机器上各个版本的 python 可以相互兼容并存,而且同一模块不同版本有时需要的 python 版本是不相同的,所以 python 的版本控制显得尤为重要。

pyenv 是个 shell 脚本,能够轻松得实现各个不同版本 python 的相互间切换,而且各个版本的 python 切换不限于全局切换,甚至不同文件夹都可以拥有不同的 python 版本。

下面我们就来看看如何使用 pyenv

管理 python 版本

如果你既需要使用 python2,也需要使用 python3pyenv 将是一个很高效的 python 版本管理工具。

由于 pyenv 是脚本插件,所以只能在类 UNIX 系统上使用。所以,如果你想在 windows 上安装,那就点击左上角去隔壁 virtualenv 瞧瞧。

安装 pyenv(Ubuntu)

  1. 确定你想把 pyenv 安装在哪。推荐安装在 $HOME/.pyenv,但你也可以安装在任意位置。
    $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    
  2. 定义你 PYENV_ROOT 的环境变量来指定你把 pyenv 仓库克隆到了哪,并把 $PYENV_ROOT/bin 添加到你的 $PATH 中,这样就能在命令行使用 pyenv 命令。
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    
  3. 设置启动 shell 时自动加载 pyenv 脚本。在 shell 配置文件的最后面加上 eval "$(pyenv init -)"
    $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    
  4. 重启 shell,使脚本生效。
    $ exec $SHELL
    
  5. 安装不同的 python 版本到 $(pyenv root)/versions 文件夹。
    pyenv 安装之前的所有 python 版本都归为 system 版本。 (可以用 pyenv versions 查看当前安装的 python 版本)
    在安装 python 之前,可以使用 pyenv install -l 查看当前可以安装哪些 python 版本。
    然后使用 pyenv install 选择的版本 来安装你所选择的 python 版本。比如 pyenv install 3.6.1 安装 python 官网的版本。

使用 git 更新 pyenv

如果你是按照上面的方法安装的 pyenv,那你可以使用 git 来更新。

更新为最新的开发版

$ cd $(pyenv root)
$ git pull

更新为指定的版本

$ cd $(pyenv root)
$ git fetch
$ git tag
v0.1.0
$ git checkout v0.1.0

pyenv 的基本操作命令

  • pyenv versions 查看当前已安装的 python 版本
  • pyenv install ... 安装指定版本的 python
  • pyenv global python版本 切换全局 python 版本
  • pyenv local python版本 切换当前文件夹下的 python 版本
  • pyenv shell python版本 切换当前 shell 中的 python 版本
  • pyenv version 查看当前使用的 python 版本

卸载 pyenv

  • 如果你只是想禁用 pyenv,那么把 pyenv init 从 shell 的配置文件中移除,然后重启 shell 就行了(移除后 pyenv 命令仍然能使用,但是版本切换命令不会生效)。
  • 完整卸载 pyenv。执行上一步,然后把 pyenv 的根目录删除即可全部删除 pyenv(通过 pyenv install ... 安装的 python 版本都会删除)。
    rm -rf $(pyenv root)
    

卸载 pyenv 安装的 python 版本

  • 使用 pyenv uninstall ... 命令。
  • 直接删除 versions 文件夹下的对应 python 版本文件夹。

pyenv 其他操作命令

参见 commands.md




管理 python 模块版本

使用 virtualenvvirtualenvwrapper 管理 python 虚拟环境,每次都需要手动激活或退出。对于懒癌晚期患者,pyenv-virtual 的自动激活和退出虚拟环境功能简直不能再赞。另外搭配 pyenv 食用效果更佳。

安装 pyenv-virtualenv(Ubuntu)

由于 pyenv-virtualenvpyenv 的一个插件,所以安装之前需要先安装 pyenv

注意:如果 pyenv 的安装目录不是 $HOME/.pyenv 需要确保克隆下来的仓库位于你所安装的 pyenv 目录下的 plugin 文件夹下。

接下来就可以执行安装步骤了:

  1. 克隆 pyenv-virtual 仓库到 plugin 文件夹下。
  2. (可选/重点)添加 pyenv virtualenv-init 到你的 shell 配置文件中,这样进入指定文件夹自动进入虚拟环境,离开文件夹退出虚拟环境。
    $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
    
  3. 重启 shell。

创建 pyenv-virtualenv 虚拟环境

  • pyenv virtualenv 指定python版本 虚拟环境名字
  • pyenv virtualenv 虚拟环境名字

如果不指定 python 版本,则默认使用当前 pyenv version 的 python 版本。

创建的虚拟环境位于 $(pyenv root)/versions/ 下的指定 python 版本的文件夹中 envs/ 文件夹下。

激活虚拟环境

  • 自动激活/退出
  • 手动激活/退出

自动激活环境:

  • .bashrc 文件的最后添加 eval "$(pyenv virtualenv-init -)",然后在 shell 中输入 exec "$SHELL" 重启 shell,或者手动重启 shell。
  • 在想要激活虚拟环境的文件夹中新建 .python-version 文件,并写入虚拟环境的名字(pyenv local python版本 该命令也是通过创建该文件来达到进入该文件夹后自动使用指定 python 版本的目的)。
  • 以后进入该的文件夹就会自动激活虚拟环境,离开该文件夹就会退出虚拟环境。

手动激活环境:

  • pyenv activate 虚拟环境名字 激活虚拟环境。
  • pyenv deactivate 退出虚拟环境。

删除虚拟环境

有 2 种方法:

  1. 删除 $(pyenv root)/versions$(pyenv root)/versions/{version}/envs 的相关文件夹即可。
  2. 命令行运行 pyenv uninstall 虚拟环境的名字

推荐阅读更多精彩内容