Python多版本与虚拟环境工具pyenv(基于macOS)

Python多版本与虚拟环境工具pyenv(基于macOS)

Python多版本管理有多种工具,如:pyenv、virtualenv、conda等等,其中conda安装好有4个多GB,个人认为没啥必要用它,本文使用pyenv(才6M)。

安装homebrew

Homebrew是macOS上一个用于安装“命令型软件”的工具(当然它也支持安装GUI软件,这得看该GUI软件是否提供homebrew安装方式,一般来说开源软件才会提供这种安装方式)。

如果你之前安装过,这一步就可以略过了,如果没有,那就安装一下,如果不熟悉,不知道自己是否安装过,可以运行brew命令,如果显示“zsh: Unknown command: brew”说明没有安装过,否则会提示brew命令的使用帮助。

打开终端,运行以下命令即可安装homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成后,终端上就可以使用brew命令(虽然它叫Homebrew,但它的命令是brew),可以用以下命令验证

brew -h

如果正常的话它会输出一堆“Example usage:”,否则会报错“zsh: Unknown command: brew”。

安装pyenv

pyenv是一个开源的python版本管理工具,我们使用brew来安装它

brew install pyenv

安装好之后,运行pyenv命令,如果正常,它会显示当前python版本及该命令的使用帮助。


修改根目录
多版本管理,肯定涉及到下载多个不同版本的python,那我们怎么知道它下载到哪儿呢?我们可以用pyenv root命令查看,默认它是下载到~/.pyenv/文件夹中的。

如果你想修改保存的位置,可以使用PYENV_ROOT环境变量来指定,如下所示把以下两句添加到~/.zshrc文件下(我建议默认就行,不要修改)

export PYENV_ROOT=$HOME/.pyenv

添加初始化命令
添加初始化命令到~/.zshrc中(激活虚拟环境就是靠这初始化起作用的)

eval "$(pyenv init -)"

如果是fish shell,则添加到~/.config/fish/config.fish

pyenv init - | source

加载修改修改后的配置
运行以下命令以加载前面添加的配置

# zsh shell
source ~/.zshrc

# fish shell
source ~/.config/fish/config.fish

安装pyenv-virtualenv插件

pyenv-virtualenvpyenv的一个插件,用于创建虚拟环境。

安装pyenv-virtualenv

brew install pyenv-virtualenv

使用pyenv安装python

首先使用以下命令查看可安装的版本

pyenv install --list

# --list可简写为-l
pyenv install -l

# 过滤出所有3.8的版本(因为它还有子版本,如3.8.1,3.8.2等等)
pyenv install --list | grep 3.8

使用pyenv命令安装一个版本为“3.8”的python(安装可能需要一定时间,而且没有进度提示),建议先不要安装,往下看

pyenv install 3.8

:未指定子版本,它会安装最高子版本,由于3.8版本最高子版本是16,所以它实际上会安装3.8.16。

解决python安装慢的问题

如果安装慢,可以自己下载压缩包并放到cache目录中,再执行安装命令,这样它会直接使用cache而不会去下载。

首先我们在pyenv的根目录创建一个cache文件夹

mkdir -p $(pyenv root)/cache/

然后我们先执行一下安装命令,比如pyenv install 3.8,它会显示下载链接(如下所示)

python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.11.3.tar.xz...
-> https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz

我们直接通过浏览器打开该链接来下载该文件(一般按住command键点击即可直接在浏览器中打开),下载好之后,后动放到$(pyenv root)/cache/文件夹中,然后再次执行pyenv install 3.8命令,它就会自动使用cache文件夹中的安装包。

如果你是直接安装,它也是会先下载安装包到cache文件夹中的,所以安装完之后,cache文件夹中的包就可以删掉了(当然如果硬盘够用也可以不删,因为下次可能又要用这个版本的话,免得要再去下载)。

python是直接被安装到以下文件夹中的,如果要卸载,直接到以下文件夹中找到对应的版本文件夹删除即可

$(pyenv root)/versions/

使用pyenv创建虚拟环境

pyenv实际上是使用我们前面安装过的pyenv-virtualenv插件来创建python虚拟环境的。

创建python虚拟环境要指定python版本,并且你指定的版本必须先用pyenv install xxx安装好(这个前面已经说过怎么安装)。

创建名为“jarvis”的基于python3.8的虚拟环境

pyenv virtualenv 3.8 jarvis

虚拟环境是被创建到对应版本的python文件夹下的envs/虚拟环境名/文件夹中的,比如pyenv install 3.8最终安装的是3.8.16,那么这个python最终是被安装到以下文件夹中的

$(pyenv root)/versions/3.8.16/

$(pyenv root)就是指pyenv的根目录,如果你没有修改过,它默认是~/.pyenv/~是指当前用户的家目录,对于macOS来说就是/Users/你的用户名/

如下所示,我们可以看到有个“envs”文件夹,虚拟环境文件夹就会被创建到“envs”文件夹下

> ls -l $(pyenv root)/versions/3.8.16/
total 0
drwxr-xr-x  20 bruce  staff  640 Apr  8 20:19 bin/
drwxr-xr-x   3 bruce  staff   96 Apr  8 20:32 envs/
drwxr-xr-x   3 bruce  staff   96 Apr  8 20:18 include/
drwxr-xr-x   5 bruce  staff  160 Apr  8 20:18 lib/
drwxr-xr-x   3 bruce  staff   96 Apr  8 20:18 share/

“envs”文件夹内容如下所示,可以看到只有一个“jarvis”文件夹,这就是我们刚刚创建的虚拟环境

> ls -l $(pyenv root)/versions/3.8.16/envs/
total 0
drwxr-xr-x  6 bruce  staff  192 Apr  8 20:32 jarvis/

查看创建了哪些虚拟环境

pyenv virtualenvs

删除刚刚创建的名为“jarvis”的虚拟环境(直接删除文件夹即可)

rm -rf ~/.pyenv/versions/jarvis

使用虚拟环境

虚拟环境可创建一个也可以创建多个,当你要使用你创建的某个虚拟环境时,需要通过命令去激活它。

激活名为“jarvis”的虚拟环境

pyenv activate jarvis

启用python虚拟环境后,当前终端窗口下就处于你指定的python虚拟环境,此时python的版本就不是你电脑中之前的python版本,而是你虚拟环境指定的python版本。

我们运行which python查看python路径,可以看到,现在的python已经是我们刚刚安装的python

/Users/bruce/.pyenv/shims/python

再用python --version,显示的是我们创建虚拟环境的时候指定的版本:Python 3.8.16。

如果你有安装ohmyzsh,则有更明显的标志(如下图)

取消激活虚拟环境

pyenv deactivate
打赏
订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

Python多版本与虚拟环境工具pyenv(基于macOS)