Python环境管理-Pyenv与Virtualenv

Pyenv

pyenv可以帮助我们轻松地管理多个Python版本并且在其中进行切换。在官方文档中有详细的介绍,这里主要记录了在使用MacOS,同时使用zsh的情况下,pyenv的安装过程,已经相关的使用方式。

首先需要安装pyenv,在MacOS上直接使用HomeBrew进行安装即可。

1
2
brew update
brew install pyenv

之后需要修改配置文件,由于使用的是zsh,因此需要执行下面的命令将相关配置添加到.zshrc,当然也可以添加到.zprofile配置文件中。修改完毕之后重启Shell,pyenv就安装完毕了。

1
2
3
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

pyenv提供简单而强大的功能,其中最常用的就是不同版本的Python安装,切换以及卸载。

首先是安装不同版本的Python,通过命令pyenv install -l可以查看所有可供下载的Python版本,之后通过install命令即可安装指定的版本:

1
pyenv install <version>

通过命令pyenv versions我们可以看到目前pyenv管理的版本以及当前正在使用的版本。实际上,通过pyenv下载的Python,都被存放在~/.pyenv/versions/ 目录下。

之后是Python版本的切换。pyenv提供了三个命令来完成版本的切换,对应三种不同的生效层级。

1
2
3
4
5
6
7
8
# 仅指定当前shell会话的Python版本
pyenv shell <version>

# 指定当前目录使用的Python版本,当处于当前目录或者子目录的时候自动选择
pyenv local <version>

# 指定全局的Python版本
pyenv global <version>

pyenv卸载对应版本的Python也非常简单,只需要通过uninstall命令即可。

1
pyenv uninstall <version>

Virtualenv

virtualenv是一个Python工具,能够帮助我们创建隔离的Python虚拟环境。

virtualenv推荐使用pipx进行安装,pipx可以帮助用户在一个隔离的环境中安装和运行Python应用。pipx同样可以通过HomeBrew来进行安装。

1
2
brew install pipx
pipx ensurepath

安装好了之后,就可以利用pipx来安装virtualenv。

1
2
pipx install virtualenv
virtualenv --help

如果由于特殊原因连接不上Python官方源,可以使用--index-url来临时指定一个其他的下载源。

使用虚拟环境,我们只需要关注虚拟环境的创建,管理,卸载以及依赖下载即可。

首先是环境创建,使用下面的命令即可创建一个虚拟环境。执行该命令之后,virtualenv会在当前目录下生成一个文件夹,表示生成的虚拟环境。

1
2
virtualenv env_name
# 虚拟环境的常用name为venv,即virtualenv venv

在创建虚拟环境的时候,可以指定Python版本,使用--python=pythonx.x。但是virtualenv不会下载对应的Python版本,只会进行本地的Python发现,需要使用的Python版本需要在本地存在。此时使用pyenv进行多版本的Python管理就正中下怀。

1
2
3
4
5
virtualenv venv --python=python3.6
# RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.6'

virtualenv venv --python=python3.7
# created virtual environment CPython3.7.15.final.0-64 in 3765ms

环境创建之后需要激活,在Linux:

1
2
# 激活虚拟环境
source env_name/bin/activate

激活环境之后,依赖的下载正常使用pip即可。此时下载的依赖都会被存放在生成的虚拟环境中,即对应的文件夹下。

退出虚拟环境的命令如下:

1
2
# 退出虚拟环境
deactivate

要想删除这个虚拟环境,只需要删除对应的文件夹即可。

virtualenv结合Pycharm使用非常容易。事实上我们可以直接在Pycharm项目解释器设置中利用virtualenv创建虚拟环境,只需要指定对应的Python解释器即可。当然需要Python解释器在本地存在。

之后Pycharm会自动在当前项目目录下创建一个venv文件夹,即该项目对应的虚拟环境

Pyenv-Virtualenv

pyenv和virtualenv实际上是配合工作的,在上面的过程中我们已经可以发现这一点了。我们可以利用pyenv来管理Python的多版本,然后利用virtualenv来创建虚拟环境,在创建虚拟环境的之后指定需要使用的Python版本。

实际上,pyenv与virtualenv还有另一种配合使用的方式,即使用pyenv相关插件pyenv-virtualenv。

首先进行插件的安装:

1
brew install pyenv-virtualenv

之后可以使用如下命令来创建虚拟环境:

1
2
# eg:pyenv virtualenv 3.7.15 venv_3_7_15
pyenv virtualenv <python-version> <env-name>

需要注意的是,这里使用的Python版本同样需要提前使用pyenv进行下载。执行命令之后,我们就可以通过pyenv virtualenvs来查看所有的虚拟环境。

环境的激活和退出命令也是类似:

1
2
3
4
5
# 激活虚拟环境
pyenv activate <env-name>

# 退出虚拟环境
pyenv deactivate

创建出的虚拟环境实际对应了两个文件夹,位置为~/.pyenv/versions/<env-name>,以及~/.pyenv/versions/<python-version>/envs/<env-name>

实际上可以理解为,pyenv-virtualenv插件帮助我们管理了virtualenv创建出的虚拟环境,将其统一管理在同一个目录下。而如果我们使用原生的virtualenv进行创建,随着使用的增多,虚拟环境会散落在各个角落。当然两种方式各有利弊,按需选择即可。

推荐结合Pycharm进行虚拟环境的创建,每个Project对应一个虚拟环境venv。同时利用pyenv来管理多版本Python。

参考文章

  1. Intro To Pyenv|RealPython
  2. Python Virtual Environments A Primer|RealPython
  3. Python Environments With Pyenv And Virtualenv

Python环境管理-Pyenv与Virtualenv
http://example.com/2023/07/27/Python环境管理-Pyenv与Virtualenv/
作者
EverNorif
发布于
2023年7月27日
许可协议