虚拟环境管理
Python 的依赖管理(包管理)做的并不是很好,尤其是在多个项目需要使用不同版本的包时,非常容易出现版本兼容性问题。为了解决这个问题,Python 提供了虚拟环境(Virtual Environment)机制,可以为每个项目创建独立的包环境,避免包版本冲突
虚拟环境工具
常用 pyenv-virtualenv 和 virtualenv 两个工具来创建和管理虚拟环境,两者略有不同:
pyenv-virtualenv是pyenv的一个插件,可以方便地为不同的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,然后使用当前 Python 的 pip 来安装
pip install virtualenv
除此之外,还需要安装 virtualenvwrapper,用于简化 virtualenv 的使用。virtaulenvwrapper 是 virtualenv 的扩展包,可以更方便地新增,删除,复制,切换虚拟环境
pip install virtualenvwrapper
创建所有 .virtualenvs 的隐藏文件夹存放所 有虚拟环境
mkdir ~/.virtualenvs
切换到 .virtualenvs 目录查看 python3、virtualenvwrapper.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