macOS 使用 pyenv 和 virtualenv 搭建 python 工作环境

人生苦短,我在 Mac 上用 python。

介绍

macOS 自带 python2.7,但是为了更好地进行 python 的开发,最好是安装 python3 进行适配。然而,有时候我们需要在不同的项目中使用不同版本的 python,如果直接采用官网的 pkg 文件安装的话不免会产生冲突,而且也没有办法管理。为此,本文通过使用 Homebrew 和相应的工具包来搭建 python 工作环境。

注:对于 Linux 平台,同样也可以使用 pyenv 和 virtualenv 对不同版本的 python 和不同的开发环境进行管理,命令基本相同,只是在安装 pyenv 的时候就没办法使用 Homebrew 了,可以使用 Linux 平台上的 apt-get 等包管理工具进行安装。

准备工作

  1. 安装 Homebrew
  2. 了解如何使用 Terminal

使用 pyenv 安装、管理多版本 python

pyenv 提供了一个安装、管理多个版本的 python 的工具,可以用类似于 Homebrew 安装包的语句来安装、管理不同版本的 python。

安装 pyenv

安装好 Homebrew 以后,执行brew install pyenv即可完成 pyenv 的安装。
若要卸载 pyenv,执行brew uninstall pyenv即可
安装完成后,还需要在 .bash_profile 中增加以下内容:

export PYENV_ROOT="${HOME}/.pyenv"

if [ -d "${PYENV_ROOT}" ]; then
  export PATH="${PYENV_ROOT}/bin:${PATH}"
  eval "$(pyenv init -)"
fi

这段代码的作用主要是指明 pyenv 的位置, 以便以后可以直接在命令行里面运行 pyenv 命令。 保存在 ~/.bash_profile 文件中是为了每次用户登陆后自动生效。

安装、卸载 python

完成 pyenv 的安装后,执行pyenv install (python-version)即可安装对应版本号的 python。可通过命令pyenv install --list查看所有可安装的 python 版本,然后替换前面的(python-version)即可。
安装完毕后,执行pyenv version查看当前 python 版本。pyenv versions查看已安装的 python 版本,前面有星号的表示当前 python 版本
安装好的 python 实际路径为~/.pyenv/versions

切换 python 版本

使用pyenv global (python-version)切换全局 python 版本,pyenv global system切换回系统自带 python,pyenv local (python-version)切换当前目录的 python 版本。

使用 pyenv-virtualenv 创建、管理多个不同的 python 工作区

有时候我们需要在不同的项目工程中使用不同版本的 python,virtualenv 就是一个能够创建隔离的 python 环境的工具,这本来是一个 python 包,本节将介绍一个基于 pyenv 的插件:pyenv-virtualenv。下一节介绍如何单独使用 virtualenv 管理工作区。

安装 pyenv-virtualenv

使用 Homebrew 安装:brew install pyenv-virtualenv

创建隔离的工作环境

创建工作环境:pyenv virtualenv (python-version) (workspace-name)
上面这句命令使用给定的python版本创建了一个名为workspace-name的工作环境,目录的实际路径为~/.pyenv/versions/(python-version)/envs,同时会在~/.pyenv/versions中创建一个对应的软链接,指向相应的目录。

切换不同的工作环境

激活环境:pyenv activate (workspace-name)
退出环境:pyenv deactivate
在这个隔离的虚拟环境中,可以使用 pip 安装需要的包,而不会影响到其他的 python 版本。但是可能会在 home directory 下创建一些隐藏目录(如 keras、matplotlib、jupyter 等)。

删除工作环境

只需要把工作环境的目录删除掉就可以删除对应的工作环境了

顺带一提的是,使用 PyCharm 等 IDE 的时候,会自动检测出项目是否使用了 virtualenv ,因此直接在 IDE 中运行代码即可,不需要激活虚拟环境。

单独使用 virtualenv 管理工作区

virtualenv 原本是一个可以通过 pip 安装的 python 包,上面的 pyenv-virtualenv 是以插件的形式,配合 pyenv 进行使用的。如果已经用其他的方法安装了 python,如官网 pkg、Homebrew 等,还可以单独使用 virtualenv 进行管理。效果与前面完全相同,只是使用的命令有所改变。

安装 virtualenv

使用 pip 安装:pip install virtualenv

创建隔离的工作环境

创建工作环境:virtualenv (python-path) (workspace-directory) --option
上述命令中,需要指定工作环境使用 python 的 python 解释器路径,然后会复制一份到工作环境中,并且还需要指定工作环境的实际路径;option 选项则可以指定是否将原来的包一并复制过去,如果使用--no-site-packages则不复制,pyenv global (python-version) 仅复制系统系统包,默认是复制的。

切换工作环境

首先 cd 到 workspace-directory。
激活环境:source bin/activate
退出环境:deactivate
激活后就可以在隔离的工作环境中使用 pip 安装需要的包了。

删除隔离的工作环境

同样是删除 workspace-directory 即可删除工作环境。

总结

说了这么多,使用这种办法来安装和管理无非是为了能够更好地掌控安装过程,并且安装、卸载也非常干净简洁。在搭建好 python 工作环境以后,马上开始着手干活才是最重要的,不能为了使用工具而使用工具,这样就本末倒置了。


本文为原创文章,转载请注明。