管理众多Python版本的神器:Pyenv

译文
开发 前端
你在寻找一种轻松管理多个Python版本的方法吗?那么,Pyenv适合您。

译者 | 布加迪

审校 | 重楼

想要在不破坏开发环境的情况下,在上午尝试最新Python版本的新特性,在午休时间浏览遗留的Python代码库吗Pyenv可以这个忙。使用Pyenv,您可以安装Python版本,在不同版本之间切换,并删除不再需要的版本。

本教程介绍了Pyenv的安装和使用

安装Pyenv

第一步是安装Pyenv。我用的是LinuxUbuntu 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!

注意如果使用MacWindows系统,查看有关如何安装Pyenv的详细说明https://github.com/pyenv/pyenv#installation。在Windows上,您需要在Windows Subsystem for LinuxWSL)中安装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

责任编辑:华轩 来源: 51CTO
相关推荐

2020-05-25 17:40:00

MacpyenvPython

2013-09-12 15:36:31

2022-05-18 08:05:20

pyenvPython解释器

2022-06-06 14:54:44

PythonNuitka

2021-01-26 05:30:44

python程序员代码

2021-01-24 22:46:07

Python开发程序员

2015-11-18 16:36:12

数据中心/华三

2015-03-18 10:59:23

AzureAzure管理工具云计算平台

2022-08-24 13:25:20

微软Python小白神器

2022-02-11 07:45:10

Linuxsmem系统

2012-11-08 10:22:32

BUG软件测试

2017-05-27 20:00:30

Python爬虫神器PyQuery

2024-04-18 09:51:36

Python数据开发

2010-06-03 18:07:21

2009-10-23 09:29:43

linux优势特点

2019-01-24 13:37:14

JavaScript开发 小程序

2024-02-23 15:51:40

PythonBlaze延迟计算

2022-10-09 10:11:30

Python爬虫神器

2010-02-23 17:44:48

Python 3.0

2022-06-23 09:17:07

PythonGUIPyAutoGUI
点赞
收藏

51CTO技术栈公众号