如何使用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将autoconf
、openssl
、pkg-config
和readline
一起安装。
autoconf
用于通过shell脚本实现自动化,openssl
用于SSL/TLS加密、
pkg-config
用于检查编译器信息,readline
用于命令行操作。
一旦安装完成,就会用验证版本的命令进行验证。
pyenv --version
执行结果:
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管理员
,然后依次输入以下命令。
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 --version
执行结果:
安装成功了。
接下来,我们需要在环境变量中注册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的默认命令是'python3'。 现在我们要用pyenv来安装新版本的Python。
4.1. 用pyenv安装Python
首先,让我们通过输入以下命令来检查所有可供安装的版本。
pyenv install -l
执行的结果:
你会看到大量的发行版和版本,从Python2到Jython、Graal、Anaconda,等等。 要安装其中一个,你需要输入该版本的名称。
pyenv install [version_name]
执行的结果:
一旦安装完成,运行下面的命令可以看到你的机器上使用Pyenv安装的所有Python版本。
pyenv versions
执行的结果:
上面你可以看到列表中新安装的pypy3
版本。
下面是如何将其设置为已安装的Python。
4.2. 用 Pyenv 设置 Python 版本
让我们来设置版本以运行我们新安装的 Python。有三种方法可以做到这一点。让我们一个一个来看看。
4.2.1. 只在当前 shell 中设置
这种方法只在当前打开的 shell 中启用,关闭终端时设置被重置。运行下面的命令
pyenv shell [version_name]
执行的结果:
python
命令已经执行了这个版本。如果你重新启动终端并输入该命令,你会看到它被初始化了。
4.2.2. 只在当前文件夹中设置
如果你在当前文件夹中设置了Python的特定版本,那么只要你进入该文件夹,就会自动运行你设置的版本。 进入所需的文件夹,键入以下命令。
pyenv local [version_name]
为了测试,我创建了一个新的文件夹并尝试设置版本。
执行的结果是
你可以看到,当你访问 "test "文件夹时,set python运行,而当你离开父文件夹时,它又被取消了。
4.2.3. 启用机器宽
最后,你可以要求一个特定的版本在任何路径上运行。输入下面的命令来设置这个。
pyenv global [version_name]
执行的结果:
将3.11.1
设置为全局,结果在检查时,该版本的Python在当前文件夹和新文件夹中都运行。
最后要注意的是每个Python版本设置的优先级。 1号是最高优先级,其次是2号,然后是3号。 换句话说,只针对当前 shell 的版本集将忽略全局文件夹,而针对文件夹的版本集将忽略全局。
4.3. 其他有用的命令
除了安装和设置版本之外,Pyenv还提供了一些其他命令,比如删除和路径检查。
你可以通过输入pyenv
来查看这些命令和它们的描述,以熟悉它们。
执行的结果:
5. 在Windows上使用Pyenv的屏幕截图
让我们做一下我们在第4节中做的同样的事情,在Windows上进行解释。 我将只展示屏幕截图,所以请参考第4节的解释。
