跳到主要内容

虚拟环境管理

Python 的依赖管理(包管理)做的并不是很好,尤其是在多个项目需要使用不同版本的包时,非常容易出现版本兼容性问题。为了解决这个问题,Python 提供了虚拟环境(Virtual Environment)机制,可以为每个项目创建独立的包环境,避免包版本冲突

虚拟环境工具

常用 pyenv-virtualenvvirtualenv 两个工具来创建和管理虚拟环境,两者略有不同:

  • pyenv-virtualenvpyenv 的一个插件,可以方便地为不同的 Python 版本创建虚拟环境,并且可以与 pyenv 无缝集成一起使用,pyenv负责 Python 版本管理,pyenv-virtualenv 负责虚拟环境管理,可以实现管理多个 Python 版本下的多个虚拟环境
  • virtualenv 是一个独立的虚拟环境管理工具,可以在任何 Python 环境中使用,不依赖于 pyenv,适用于不使用 pyenv 的用户,仅管理同一 Python 版本的虚拟环境

在实际使用中,可以根据需求选择合适的 Python 虚拟环境管理工具

pyenv-virtualenv

安装

pyenv-virtualenv 依赖 pyenv,需要先安装 pyenv,然后再安装 pyenv-virtualenv 插件

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
# 或
brew install pyenv-virtualenv

安装后需要设置init,用于加载 pyenv-virtualenv,以 zsh 为例,添加以下内容到 ~/.zshrc 文件中

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

使用

创建虚拟环境

pyenv virtualenv <python-version> <env-name>

创建后会在 $(pyenv root)/versions/ 目录下生成一个名为 <env-name> 的文件夹,里面包含了该虚拟环境的所有文件

查看虚拟环境

执行后会列出所有的虚拟环境,同一个虚拟环境会有两个名称,一个是 <env-name>,另一个是 <python-version>/envs/<env-name>,两者可以互相切换使用,较短的名称是一个符号链接,指向完整名称

pyenv virtualenvs

激活虚拟环境

pyenv activate <env-name>

退出虚拟环境

pyenv deactivate

删除虚拟环境

pyenv uninstall <env-name>

virtualenv

安装

virtualenv 由于只能管理同一 Python 版本的虚拟环境,因此需要先安装好 Python,然后使用当前 Pythonpip 来安装

pip install virtualenv

除此之外,还需要安装 virtualenvwrapper,用于简化 virtualenv 的使用。virtaulenvwrappervirtualenv 的扩展包,可以更方便地新增,删除,复制,切换虚拟环境

pip install virtualenvwrapper

创建所有 .virtualenvs 的隐藏文件夹存放所有虚拟环境

mkdir ~/.virtualenvs

切换到 .virtualenvs 目录查看 python3virtualenvwrapper.sh 的路径

cd .virtualenvs/
which virtualenvwrapper.sh
# /usr/local/bin/virtualenvwrapper.sh
which python3
# /Library/Frameworks/Python.framework/Versions/3.8/bin/python3
# /usr/local/bin/python3
# /usr/local/opt/python@3.8/bin/python3.8 # 我的实际环境

配置环境变量,以 zsh 为例,添加以下内容到 ~/.zshrc 文件中

# python virtualenv
export WORKON_HOME='~/.virtualenvs'
export VIRTUALENVWRAPPER_PYTHON='/usr/local/opt/python@3.8/bin/python3.8'
source /usr/local/bin/virtualenvwrapper.sh

使用 source 命令加载配置

source ~/.zshrc

使用

创建虚拟环境

-p 参数指定 Python 解释器路径,如果不指定则使用当前 Python 版本,创建后会在 ~/.virtualenvs/ 目录下生成一个名为 <env-name> 的文件夹,里面包含了该虚拟环境的所有文件

mkvirtualenv -p <python-path> <env-name>

查看虚拟环境

lsvirtualenv
# 或
workon

激活虚拟环境

workon <env-name>

退出虚拟环境

deactivate

删除虚拟环境

rmvirtualenv <env-name>