Python
开发环境配置
Pyenv - 多个版本

如何使用Pyenv:安装、卸载、列出多个Python的本地、全局版本

在前一篇文章中,我们总结了如何在 MacOS 和 Windows 上安装最新版本的 Python。 然而,在某些情况下,你可能需要在一台机器上使用多个版本或不同的 Python 发行版。

例如,用于 Web API 开发的以 FastAPI 为中心的版本和软件包、 以及用于数据科学的 Anaconda 发行版和软件包。

手动管理这些不同版本的Python可能是一种痛苦。 你必须记住目录并不断改变PATH设置。 如果有一个程序可以为你做这些事情,那就太好了。

1. 介绍一下Pyenv

Pyenv是一个为我们管理多个Python版本的程序。 你可以很容易地选择你想使用的Python版本,甚至可以为不同的项目指定不同的Python版本来自动运行。 你甚至可以用多个版本的Python测试一个命令。

让我们来看看如何在Mac和Windows上安装pyenv,以及如何使用pyenv来安装多个版本的Python。

2. 在Mac上安装pyenv

在Mac上安装pyenv最简单的方法是通过homebrew。用下面的命令开始安装。

brew install pyenv

pyenv将autoconfopensslpkg-configreadline一起安装。 autoconf用于通过shell脚本实现自动化,openssl用于SSL/TLS加密、 pkg-config用于检查编译器信息,readline用于命令行操作。

一旦安装完成,就会用验证版本的命令进行验证。

pyenv --version

执行结果: 检查pyenv版本

2.1. 添加额外的shell

由于pyenv通过shell工作,你需要注册自己的shell。你可以通过为每个shell输入以下命令来完成这个工作。

2.1.1. Bash

如果你使用的是Bash shell, 输入下面的命令,在你的~/.bashtc文件中增加3行代码。

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

~/.profile文件中也添加三行代码。

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

如果存在一个~/.bash_profile文件,也把它加到这里。然后再次运行终端。

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

2.1.2. Zsh

如果你使用的是Zsh shell,键入以下命令,在~/.zshrc文件中添加三行代码,然后重新启动终端。

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

2.1.3. 鱼类

如果你使用Fish shell 3.2.0或更高版本,运行以下命令。

set -Ux PYENV_ROOT $HOME/.pyenv
fish_add_path $PYENV_ROOT/bin

如果你使用的是3.2.0之前的版本,请运行以下命令。

set -Ux PYENV_ROOT $HOME/.pyenv
set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths

最后,不管什么版本,在~/.config/fish/config.fish文件中添加以下命令。

echo 'pyenv init - | source' >> ~/.config/fish/config.fish

现在再次运行终端。

3. 在Windows上安装pyenv-win

由于Pyenv是一个通过基于Unix操作系统的shell脚本工作的程序,所以它从未在Windows上出现过。 然而,最近开发了一个名为 pyenv-win的Windows版本的Pyenv。 这使得Windows用户可以利用Pyenv的优势。

安装pyenv-win是一个单一的命令。 首先,以管理员身份打开Windows PowerShell(Windows上默认安装的)。 你也可以运行终端程序。

运行Windows PowerShell

确保你在标题栏中看到Windows PowerShell管理员,然后依次输入以下命令。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

如果你不输入第一条命令,你会得到一个类似这样的权限错误

pyenv安装安全错误

如果你同时输入这两条命令,安装会正常完成,像这样

pyenv安装完成

现在关闭终端程序并重新启动它。然后让我们输入pyenv版本检查命令。

pyenv --version

执行结果: 检查Windows pyenv版本

安装成功了。

接下来,我们需要在环境变量中注册Pyenv使用的路径。依次键入以下四个命令。

[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")

重新打开终端,设置就会生效。

4.如何在Mac、Windows上使用pyenv

不管你的操作系统是什么,使用pyenv都是一样的。我将在Mac上教你如何使用,而只是给你看我在Windows上的截图。 在Mac上,我使用fFsh shell。

Mac python执行错误

目前没有任何东西在运行,因为Mac上运行python的默认命令是'python3'。 现在我们要用pyenv来安装新版本的Python。

4.1. 用pyenv安装Python

首先,让我们通过输入以下命令来检查所有可供安装的版本。

pyenv install -l

执行的结果: pyenv install -l list

你会看到大量的发行版和版本,从Python2到Jython、Graal、Anaconda,等等。 要安装其中一个,你需要输入该版本的名称。

pyenv install [version_name]

执行的结果: python install pypy3

一旦安装完成,运行下面的命令可以看到你的机器上使用Pyenv安装的所有Python版本。

pyenv versions

执行的结果:

pyenv版本结果

上面你可以看到列表中新安装的pypy3版本。 下面是如何将其设置为已安装的Python。

4.2. 用 Pyenv 设置 Python 版本

让我们来设置版本以运行我们新安装的 Python。有三种方法可以做到这一点。让我们一个一个来看看。

4.2.1. 只在当前 shell 中设置

这种方法只在当前打开的 shell 中启用,关闭终端时设置被重置。运行下面的命令

pyenv shell [version_name]

执行的结果: pyenv shell result versions result

python命令已经执行了这个版本。如果你重新启动终端并输入该命令,你会看到它被初始化了。

未找到python命令

4.2.2. 只在当前文件夹中设置

如果你在当前文件夹中设置了Python的特定版本,那么只要你进入该文件夹,就会自动运行你设置的版本。 进入所需的文件夹,键入以下命令。

pyenv local [version_name]

为了测试,我创建了一个新的文件夹并尝试设置版本。

执行的结果是 pyenv local

你可以看到,当你访问 "test "文件夹时,set python运行,而当你离开父文件夹时,它又被取消了。

4.2.3. 启用机器宽

最后,你可以要求一个特定的版本在任何路径上运行。输入下面的命令来设置这个。

pyenv global [version_name]

执行的结果: pyenv global --reverse

3.11.1设置为全局,结果在检查时,该版本的Python在当前文件夹和新文件夹中都运行。

最后要注意的是每个Python版本设置的优先级。 1号是最高优先级,其次是2号,然后是3号。 换句话说,只针对当前 shell 的版本集将忽略全局文件夹,而针对文件夹的版本集将忽略全局。

4.3. 其他有用的命令

除了安装和设置版本之外,Pyenv还提供了一些其他命令,比如删除和路径检查。 你可以通过输入pyenv来查看这些命令和它们的描述,以熟悉它们。

执行的结果: pyenv命令

5. 在Windows上使用Pyenv的屏幕截图

让我们做一下我们在第4节中做的同样的事情,在Windows上进行解释。 我将只展示屏幕截图,所以请参考第4节的解释。

windows pyenv install -l

windows pyenv install

pyenv安装

pyenv shell and local

copyright for Python pyenv

© 2023 All rights reserved.