使用 pyenv 管理多个 Python 版本

2023-10-25

pyenv 是一个简单而强大的工具,用于管理多个Python版本。作为一名 Python 开发人员,您可能面临过不同项目需要不同 Python 版本的情况。

pyenv 为这个问题提供了一个优雅的解决方案。
本质上,pyenv 是一个 Python 版本管理器。它允许您在多个Python版本之间无缝切换。

它是一个很棒的工具,可以管理 Python 项目的环境、安装 Python、在 Python 版本之间切换等等。

 

 

pyenv 是如何工作的?

pyenv 通过修改PATH环境变量并使用垫片拦截Python命令。

当您运行类似命令时python or pip,操作系统使用您的目录中列出的目录PATH找到正确的可执行文件。
它的工作原理如下:

  1. 你运行一个Python命令,比如python or pip.
  2. 操作系统会搜索您的目录PATH从左到右。
  3. 它首先找到 pyenv shim 目录(因为 pyenv 将它放在你的PATH).
  4. shim 将命令传递给 pyenv。
  5. pyenv 确定您的应用程序指定了哪个 Python 版本。
  6. 它使用选定的 Python 版本运行您的命令。

这样,您就可以在每个项目的 Python 版本之间切换,这一切都归功于 pyenv。

 

在 Windows 上安装 pyenv

Windows 用户可以使用 pyenv-win 分支,它是 pyenv 的一个端口,可以通过以下命令轻松安装:


# Via pip
pip install pyenv-win --target $HOME\.pyenv

# Via Homebrew
brew install pyenv-win
  

运行命令后,您应该关闭终端并打开一个新终端以使更改生效。
注意:如果未包含,则需要更新 PATH 变量以包含 Python 安装目录。

 

在 Linux 上安装 pyenv

您可以使用 pyenv 存储库中的 pyenv-installer 脚本在 Linux 计算机上安装 pyenv。以下是执行此操作的命令:


curl https://pyenv.run | bash
  

此命令下载并运行 pyenv 安装程序。
接下来,您需要将 pyenv 添加到 shell 中,以便可以直接从终端使用它:


echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
  

这些命令将必要的行添加到 .bashrc 文件中以设置 pyenv 的环境。
运行这些命令后,您应该重新启动终端或运行以下命令以使更改生效:


exec "$SHELL"
  

 

在 MacOS 上安装 pyenv

在 MacOS 上,您可以使用 Homebrew。以下是使用 Homebrew 安装 pyenv 的方法:


brew update
brew install pyenv
  

安装后,将 pyenv init 添加到 shell 以启用垫片和自动完成:


echo 'if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)"; fi' >> ~/.bash_profile
  

完成后,您应该重新启动终端以使更改生效。

 

检查 pyenv 版本

安装 pyenv 后,您可以通过运行以下命令检查其版本:


pyenv --version
  

Output:


pyenv 2.3.23
  

此命令显示系统上安装的 pyenv 版本。在此示例中,安装的 pyenv 版本为 2.3.23。

 

配置pyenv环境变量

pyenv 使用多个环境变量来控制其行为。最重要的之一是PYENV_ROOT,它定义版本和填充程序的保存位置。默认情况下,这是~/.pyenv.
你可以这样设置:


export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
  

这些命令设置PYENV_ROOT变量并将其添加到您的系统中PATH.
要自动初始化 pyenv,您可以将以下内容添加到 shell 配置文件中:


if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
  

此命令检查 pyenv 是否已安装(使用command -v pyenv),如果是,则初始化它(用eval "$(pyenv init -)").

 

列出所有可用的 Python 版本

pyenv 使您可以访问各种 Python 版本。要列出所有可用的安装版本,请使用以下命令:


pyenv install --list
  

Output:


2.1.3
2.2.3
2.3.7
...
3.8.10
3.9.5
...
  

这个列表相当长,因为它包括从 2.1.3 到最新版本的所有 Python 版本。

 

安装特定的Python版本

要安装特定版本的Python,您可以使用pyenv install命令后跟版本号。

例如,要安装Python 3.9.5,您可以使用以下命令:


pyenv install 3.9.5
  

Output:


python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.5.tar.xz...
-> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
Installing Python-3.9.5...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.5 to /Users/username/.pyenv/versions/3.9.5
  

此命令下载 Python 3.9.5 并将其安装到 pyenv versions 目录。
安装后,您可以使用pyenv versions命令列出系统上安装的所有 Python 版本:


pyenv versions
  

Output:


* system (set by /Users/username/.pyenv/version)
  3.9.5
  

此输出显示已安装 Python 3.9.5,但系统当前使用全局 Python 版本。

 

设置全局Python版本(Switch版本)

使用 pyenv,您可以设置默认在所有 shell 中使用的全局 Python 版本。要设置全局版本,请使用pyenv global命令后跟版本号。例如:


pyenv global 3.9.5
  

要确认全局 Python 版本,请使用python --version命令:


python --version
  

Output:


Python 3.9.5
  

此输出表明全局 Python 版本现已设置为 3.9.5。

 

设置本地(每个项目)Python 版本

pyenv 允许您为每个项目设置本地 Python 版本。

此版本会覆盖其设置目录中的全局 Python 版本。操作方法如下:
首先,导航到您的项目目录:


cd my_project
  

然后,为您的项目设置本地版本:


pyenv local 3.8.10
  

该命令创建一个.python-version当前目录中具有指定版本的文件。
要验证当前目录的 Python 版本,您可以使用python --version再次命令:


python --version
  

Output:


Python 3.8.10
  

这表明无论全局 Python 版本如何,Python 3.8.10 都是当前目录的版本。

 

特定于 shell 的 Python 版本

Shell-specific version is only valid for the current shell session and is not saved to a configuration file. This can be particularly useful if you need to quickly test something in a specific Python version without affecting your global or local versions.

To set a shell-specific Python version, use the pyenv shell command. For example:


pyenv shell 3.8.10  

您可以使用以下命令确认当前 shell 的 Python 版本python --version命令:


python --version  

Output:


Python 3.8.10  

如果关闭当前终端并打开一个新终端,Python 版本将恢复为全局或本地设置。

要在同一会话中清除特定于 shell 的版本,请使用pyenv shell --unset命令:


pyenv shell --unset  

 

卸载Python版本

如果您不再需要特定的 Python 版本,可以使用 pyenv 轻松卸载它。

Use the pyenv uninstall命令后跟版本号。例如:


pyenv uninstall 3.9.5
  

系统会要求您确认操作。确认后,指定的Python版本将从您的系统中删除。

 

什么是虚拟环境?

虚拟环境是一个独立的目录树,其中包含特定 Python 版本的 Python 安装以及许多附加包。

这是一种将 Python 项目及其依赖项与其他项目隔离的方法,确保每个项目都有自己的一组依赖项,不会干扰其他项目。
当您处理需要不同版本的包或 Python 本身的项目时,虚拟环境的使用至关重要。

通过隔离每个环境,您可以避免包版本之间潜在的冲突。

 

使用pyenv创建虚拟环境

使用pyenv,您可以轻松创建虚拟环境。首先,确保您安装了所需的 Python 版本:


pyenv install 3.8.10
  

接下来,使用以下命令创建一个新的虚拟环境pyenv virtualenv命令:


pyenv virtualenv 3.8.10 my-env
  

此命令使用 Python 3.8.10 创建一个名为“my-env”的新虚拟环境。
要列出所有可用的虚拟环境,您可以使用pyenv virtualenvs命令:


pyenv virtualenvs
  

Output:


3.8.10/envs/my-env (created from /Users/username/.pyenv/versions/3.8.10)
my-env (created from /Users/username/.pyenv/versions/3.8.10)
  

此输出显示您有一个使用 Python 3.8.10 创建的名为“my-env”的虚拟环境。

 

激活和停用虚拟环境

要激活虚拟环境,您可以使用pyenv activate命令:


pyenv activate my-env
  

一旦虚拟环境被激活,该环境中安装的Python版本和软件包将不会影响系统的其余部分。
您可以通过检查Python版本来确认激活:


python --version
  

Output:


Python 3.8.10
  

这表明当前环境的Python版本是3.8.10。
要停用虚拟环境并返回全局 Python 版本,请使用pyenv deactivate命令:


pyenv deactivate
  

 

删除虚拟环境

如果您不再需要虚拟环境,可以使用以下命令将其删除pyenv uninstall命令,类似于卸载Python版本:


pyenv uninstall my-env
  

确认操作后,虚拟环境“my-env”将从您的系统中删除。

 

pyenv 插件

pyenv 支持扩展其功能的插件。以下是一些有用的:

  • pyenv-update:这个插件允许您使用单个命令更新 pyenv 及其所有插件。
  • pyenv-doctor:此插件检查 pyenv 安装和 Python 构建的运行状况。
  • pyenv-which-ext:这个插件添加了pyenv which在当前环境的目录中搜索程序的命令。

您可以使用与安装 pyenv 相同的方法来安装这些插件,但使用插件的 Git URL 而不是 pyenv 的。

pyenv 的真实用例

现在您已经学会了如何使用 pyenv,让我们讨论一下它在实际场景中的应用:

  1. 跨 Python 版本测试:如果您正在开发 Python 包,您可能希望确保它可以跨多个 Python 版本运行。 pyenv 可以轻松地在不同的 Python 版本之间切换进行测试。
  2. 简化的 Python 更新:当新的 Python 版本发布时,pyenv 允许您将其与现有版本一起安装,而不会影响您的系统 Python 或其他项目。然后,您可以在完全切换之前使用新版本测试您的项目。

我们的 pyenv 教程到此结束。您现在配备了一个强大的工具来管理多个 Python 版本和虚拟环境。

 

Resource

https://github.com/pyenv/pyenv

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyenv 管理多个 Python 版本 的相关文章

  • 如果两点之间的距离低于某个阈值,则从列表中删除点

    我有一个点列表 只有当它们之间的距离大于某个阈值时 我才想保留列表中的点 因此 从第一个点开始 如果第一个点和第二个点之间的距离小于阈值 那么我将删除第二个点 然后计算第一个点和第三个点之间的距离 如果该距离小于阈值 则比较第一点和第四点
  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • 如何在 Debian 9 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 在本教程中 我们将指导您如何安装Yarn在 Debian 9 系统上
  • 如何在 Ubuntu 18.04 上安装 Django

    Django 是一个免费开源的高级 Python Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 有不同的方法来安装 Django 具体取决于您的需要 它可以在系统范围内安装 也可以使用 pip 安装在 Pyth
  • 如何在 Linux 中添加目录到 PATH

    当您在命令行上键入命令时 您基本上是在告诉 shell 运行具有给定名称的可执行文件 在Linux中 这些可执行程序就像ls find file和其他文件 通常位于系统上的几个不同目录中 存储在这些目录中的任何具有可执行权限的文件都可以从任
  • 如何在 CentOS 8 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程至关重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 在 CentOS 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 本文介绍
  • Python range() 函数

    蟒蛇rangetype 通过定义范围的起点和终点来生成整数序列 它通常与for循环迭代数字序列 range 在 Python 2 和 3 中的工作方式有所不同 在Python 2中 有两个函数可以让你生成整数序列 range and xra
  • Linux 中的正常运行时间命令

    在本教程中 我们将介绍uptime命令 顾名思义 uptime命令显示系统已经运行了多长时间 它还显示当前时间 登录用户数以及过去 1 5 和 15 分钟的系统负载平均值 如何使用正常运行时间命令 uptime 命令的语法如下 uptime
  • 如何在 CentOS 7 上使用 VSFTPD 设置 FTP 服务器

    FTP 文件传输协议 是一种标准的客户端 服务器网络协议 允许用户在远程网络之间传输文件 有多种可用于 Linux 的开源 FTP 服务器 最流行和最广泛使用的是PureFTPd ProFTPD and vsftpd 在本教程中 我们将在
  • Python while 循环

    循环是编程语言的基本概念之一 当您想要多次重复特定的代码块直到满足给定条件时 循环会很方便 Python中有两种基本的循环结构 for and while loops 本教程涵盖了以下基础知识whilePython 中的循环 我们还将向您展
  • NumPy loadtxt 教程(从文件加载数据)

    在之前的教程中 我们讨论过NumPy 数组 我们看到了它如何使读取 解析和对数字数据执行操作的过程变得轻而易举 在本教程中 我们将讨论 NumPy loadtxt 方法 该方法用于解析文本文件中的数据并将其存储在 n 维 NumPy 数组中
  • Linux Bash 脚本编写第 3 部分 – 参数和选项

    到目前为止 您已经了解了如何编写无需用户输入即可完成工作的 Linux bash 脚本 今天我们将继续我们的 Linux bash 脚本系列 如果您想了解我们在谈论什么 我建议您查看之前的帖子 Bash 脚本基础知识 Bash 脚本 For
  • Pythonnamedtuple(将元组提升到一个新的水平)

    在本教程中 我们将深入研究命名元组 它们是什么 如何创建和操作它们 以及何时使用它们 或不使用它们 命名元组是Python内置的一部分收藏模块 并且它们提供了一种将数据捆绑在一个名称下的便捷方法 它们是 Python 内置元组数据类型的子类
  • 使用 Python 处理 CSV:综合教程

    CSV 逗号分隔值 文件是存储和共享表格数据的最常见方法之一 这些文件由行和列组成 其中每行代表一个记录 列包含由分隔符 通常是逗号 分隔的值 Python 提供了多种内置方法来处理 CSV 文件 使您可以高效地读取 写入和操作数据 本教程
  • Linux Bash 脚本编写第 5 部分 – 信号和作业

    在上一篇文章中 我们谈到了输入 输出和重定向在 bash 脚本中 今天我们将学习如何在Linux系统上运行和控制它们 到目前为止 我们只能从命令行界面运行脚本 但这并不是运行 Linux bash 脚本的唯一方法 这篇文章描述了控制 Lin
  • 使用curl命令的SSL/TLS:安全连接指南

    卷曲命令是一种发出网络请求的工具 它在通过 HTTPS 与安全服务器通信时使用 SSL TLS 默认情况下 curl尝试在可用时使用安全连接 但了解如何控制和诊断这些连接至关重要 目录 hide 1 使用客户端证书 2 指定证书类型 3 使
  • 如何使用 tqdm 创建 Python 终端进度条?

    进度条是估算和显示任务所需时间的宝贵工具 这些也可以添加到您的 Python 脚本或代码块中 以指示代码执行所需的时间 Python 中有多种可用的库 例如progressbar and tqdm可以用于此目的 目录 hide 1 什么是
  • 使用 Linux curl 命令管理 Cookie

    与 Web 应用程序交互时 您会遇到处理 cookie 和会话的需要 在本教程中 您将学习如何使用卷曲命令发送 接收和管理 cookie 目录 hide 1 手动发送 Cookie 标头 2 存储从服务器接收到的 Cookie 3 通过请求
  • 正确理解 Linux 运行级别

    您可以将 Linux 运行级别视为操作系统运行的不同 模式 每种模式或运行级别都有其打开或关闭的进程和服务列表 从 Linux 启动时起 它就始终处于某个运行级别 当您继续使用计算机时 此运行级别可能会发生变化 具体取决于操作系统需要访问的
  • Linux PS1 提示定制终极指南

    PS1 或提示字符串 1 是主要提示变量 它定义 Linux shell 环境中命令行提示的外观和元素 它提供了多个自定义选项 使您的命令提示符信息更丰富且更具视觉吸引力 本教程将讨论这些细节 增强您的命令行界面体验 目录 hide 1 查
  • 11 个令人惊叹的 NumPy Shuffle 示例

    蟒蛇的NumPy包提供了各种用于执行涉及随机性的操作的方法 例如从给定的数字列表中随机选择一个或多个数字的方法 或者生成给定范围内的随机数的方法 或者从给定分布 所有这些方法均在randomNumPy 包的模块 其中一种方法是numpy r
  • 使用 pyenv 管理多个 Python 版本

    pyenv 是一个简单而强大的工具 用于管理多个Python版本 作为一名 Python 开发人员 您可能面临过不同项目需要不同 Python 版本的情况 pyenv 为这个问题提供了一个优雅的解决方案 本质上 pyenv 是一个 Pyth