译者 | 布加迪
审校 | 重楼
想要在不破坏开发环境的情况下,在上午尝试最新Python版本的新特性,在午休时间浏览遗留的Python代码库吗?Pyenv可以帮这个忙。使用Pyenv,您可以安装Python版本,在不同版本之间切换,并删除不再需要的版本。
本教程介绍了Pyenv的安装和使用。
安装Pyenv
第一步是安装Pyenv。我用的是Linux:Ubuntu 23.01。如果您使用Linux系统,安装Pyenv的最简单方法是运行以下curl命令:
$ curl https://pyenv.run | bash
这将使用pyenv-installer安装Pyenv。
安装完成后,系统提示您完成shell环境的设置以使用Pyenv。为此,可以将以下命令添加到~/.bashrc文件:
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
您已准备好开始使用Pyenv了!
注意:如果您使用Mac或Windows系统,查看有关如何安装Pyenv的详细说明:https://github.com/pyenv/pyenv#installation。在Windows上,您需要在Windows Subsystem for Linux(WSL)中安装Pyenv。
使用Pyenv安装Python版本
您已经安装了Pyenv,可以通过运行pyenv install命令来安装特定的Python版本,就像这样:
$ pyenv install version
执行以下命令,查看已安装的Python版本列表:
$ pyenv versions
* system (set by /home/balapriya/.pyenv/version)
我还没有安装任何新版本,所以Python的唯一版本是系统版本,这里是Python 3.11:
$ python3 -version
Python 3.11.4
不妨尝试安装Python 3.8和3.12。试着运行这个命令来安装Python 3.8:
$ pyenv install 3.8
第一次尝试使用Pyenv安装特定版本的Python时,可能会遇到错误,这是由于缺少一些构建依赖项。不用担心,这很容易解决!
一些故障排除提示
尝试使用pyenv install命令在我的Linux发行版上安装Pyenv时,由于缺少构建依赖项,我遇到了错误。
这个StackOverflow帖子包含有关为Pyenv安装所需构建依赖项的有用信息。运行以下命令以安装丢失的依赖项:
$ apt-get install build-essential zlib1g-dev libffi-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev
现在,您应该能够安装Python版本,不会出现任何错误:
$ pyenv install 3.8
注意:当您安装Python 3时,默认安装最新的版本。但是您也可以指定3.x,用于安装特定的Python版本。还可以运行pyenv install --list来列出所有可以安装的Python版本,不过版本很多。
同样,运行pyenv install以安装Python 3.12:
$ pyenv install 3.12
现在如果您运行pyenv versions,除了系统版本外,还会看到Python 3.8和3.12:
$ pyenv versions
* system (set by /home/balapriya/.pyenv/version)
3.8.18
3.12.0
设置Python全局版本
使用Pyenv,您可以设置全局Python版本。顾名思义,全局版本是您在命令行使用Python时所使用的Python版本。
但请注意将其设置为比较新的版本,以免在运行使用较新Python版本的项目时出现错误。
比如说,不妨看看如果将全局版本设置为Python 3.8.18会发生什么。
$ pyenv global 3.8.18
创建一个项目文件夹。在其中,用以下代码创建一个main.py文件:
# main.py
def handle_status_code(status_code):
match status_code:
case 200:
print(f"Success! Status code: {status_code}")
case 404:
print(f"Not Found! Status code: {status_code}")
case 500:
print(f"Server Error! Status code: {status_code}")
case _:
print(f"Unhandled status code: {status_code}")
status_code = 404 # oversimplification, yes. handle_status_code(status_code)
如您所见,这段代码使用了Python 3.10中引入的match-case语句。因此,需要Python 3.10或更高版本才能成功运行此代码。如果您试着运行脚本,会得到以下错误:
File "main.py", line 2
match status_code:
^
SyntaxError: invalid syntax
在本文例子中,系统Python是3.11版本,比较新。所以我可以将全局版本设置为系统Python版本,如下所示:
$ pyenv global system
当您现在运行同一个脚本时,应该会得到以下输出:
Output >>>
Not Found! Status code: 404
如果您的系统Python是旧版本,比如Python 3.6或更早版本,安装更新版的Python并将其设置为全局版本将大有帮助。
为项目设置本地Python版本
当您想要处理使用早期Python版本的项目时,希望安装该版本以避免任何错误(比如不再支持的方法调用)。
假设您在处理项目A时想使用Python 3.8,处理项目B时想使用Python 3.10或更高版本,在这种情况下,就可以在项目A的目录中设置本地Python版本,如下所示:
$ pyenv local 3.8.18
您可以运行python --version来检查项目目录中的Python版本:
$ python --version
Python 3.8.18
这在处理较旧的Python代码库时特别有用。
卸载Python版本
如果不再需要Python版本,可以通过运行pyenv uninstall命令卸载它。假设不再需要Python 3.8.18,那么可以通过运行以下命令来卸载它:
$ pyenv uninstall 3.8.18
您应该在终端会看到类似的输出:
pyenv: remove /home/balapriya/.pyenv/versions/3.8.18? [y|N] y
pyenv: 3.8.18 uninstalled
结语
但愿这篇关于Pyenv的入门教程对您有所帮助。总结几个最常见的命令以便快速查询:
命令 | 功能 |
pyenv versions | 列出目前已安装的所有Python版本 |
pyenv install –list | 列出可以安装的所有Python版本 |
pyenv install 3.x | 安装Python 3.x的最新版 |
pyenv install 3.x.y | 安装Python 3.x的版本y |
pyenv global 3.x | 将Python 3.x设为全局Python版本 |
pyenv local 3.x | 将您项目的本地Python版本设为3.x |
pyenv uninstall 3.x.y | 卸载Python 3.x的版本 |
Docker是一个很好的选择,可以让本地开发变得轻松,不用担心依赖项冲突,但是每当需要处理新项目就使用Docker或其他容器化解决方案可能是大材小用。
因此,我认为能够在命令行中安装、管理和切换Python版本仍然有帮助。您还可以了解pyenv-virtualenv插件以创建和管理虚拟环境。
原文标题:Too Many Python Versions to Manage? Pyenv to the Rescue,作者:Bala Priya C