”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 PyEnv 进行 Python 版本管理

使用 PyEnv 进行 Python 版本管理

发布于2024-11-04
浏览:957

Python Version Management with PyEnv

命令参考(安装和设置说明如下):

# List all versions of python interpreters available to install:
pyenv install -l
# List all versions of CPython (the default interpreter) available to install:
pyenv install -l | grep -E '^\s*[0-9]'
# Install specified version. In this case it installs 3.12.6
pyenv install 3.12.6
# List versions installed locally:
pyenv versions
# See global version
pyenv global
# Set global version to x.x.x; in this case it sets to 3.12.6
pyenv global 3.12.6
# See local version
pyenv local
# Set global version to x.x.x; in this case it sets to 2.7.18
pyenv global 3.12.6

PyEnv 简介

截至 2024 年 9 月,不同语言版本和解释器的管理在 Pythonic 世界中有点属于灰色地带,但社区当然有“非官方”解决方案来规避这个问题。
一个特别好的解决方案是 PyEnv,它大量借鉴了 ruby​​ 的版本管理解决方案,这是 ruby​​ 做得非常好的事情。
PyEnv 基本上是 shell 脚本的集合,有助于在全局和本地范围内安装和选择特定的 python 版本或解释器。
它的工作原理是在 PATH 中插入垫片目录,并根据特定条件重新哈希垫片,以便映射 python 二进制文件(以及其他设置,例如映射 pip、切换 PYTHON_VERSION env 等)。
本指南将重点关注 MacOS 和 Debian 系列 Linux 发行版,并将涵盖 bash 和 zsh 的设置。它不会覆盖 pyenv-win。

安装 PyEnv

苹果系统

这假设已安装 homebrew 和 xcode-tools。
第一行将安装依赖项来安装和构建 python 版本。
第二行将安装 pyenv 本身。
第三行是可选的,将在运行brew之前附加pyenv加载,以避免运行brew doctor时出现误报警告,并避免在开发brew python包时出现错误。请注意,它被放置在 .zshrc 中,您的 mac 默认情况下应该已经启用了 zsh,除非它是旧机器,在这种情况下,您可能应该将其附加到 .bash_profile。

brew install openssl readline sqlite3 xz zlib tcl-tk && \
brew install pyenv \
&& echo "alias brew='env PATH=\"${PATH//$(pyenv root)\/shims:/}\" brew'" >> ~/.zshrc

Linux(基于 Debian)

首先,安装依赖项。
然后,将公共存储库克隆到 $HOME/.pyenv.

sudo apt update && sudo apt install build-essential \
libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev && \
git clone https://github.com/pyenv/pyenv.git $HOME/.pyenv

安装后(MacOS 和 Linux)

将此添加到相关的 shell 配置文件中,如果您使用的是 bash,则为 .bash_profile;如果您使用的是 zsh,则为 .zshrc。如果您不确定,请使用 echo $SHELL 找出哪个。

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

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

最后,刷新终端环境以查看 exec "$SHELL" 的变化。

完成此设置后,您的 python(不是 python3!)将映射到使用 pyenv 设置的 python 版本。
我建议您安装一个 python 版本(请参阅上面的命令参考)并将其设置为您的全局版本。
检查 python --version 是否一切正常,看看您安装的版本是否与您选择的版本匹配。如果没有,它可能仍然指向系统默认值,因此您可能已经执行了以下步骤之一(可能是刷新终端的部分,如果您不确定要做什么,请关闭并重新打开终端窗口).

享受更明智的 python 版本管理的乐趣!

版本声明 本文转载于:https://dev.to/otamm/python-version-management-with-pyenv-3fig?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 Java 中绕 x 轴垂直旋转形状?
    如何在 Java 中绕 x 轴垂直旋转形状?
    围绕 x 轴垂直旋转形状提供的代码演示了如何旋转多边形,但它不会围绕 x 轴旋转它x 轴。要实现绕 x 轴的垂直旋转,我们可以将多边形旋转 90 度,然后应用所需的弧度旋转。修改后的代码如下:import java.awt.*; import java.awt.event.*; import jav...
    编程 发布于2024-11-17
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-17
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-17
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1和$array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求是构...
    编程 发布于2024-11-17
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-17
  • 如何跨不同网页存储 JavaScript 变量?
    如何跨不同网页存储 JavaScript 变量?
    跨页面持久保存 JavaScript 变量在 JavaScript 中,变量的作用域通常仅限于定义它们的页面。但是,在某些情况下,您可能需要从一个页面访问另一页面的变量。这就是持久化变量的概念发挥作用的地方。跨页面持久化 JavaScript 变量的一种方法是利用 window.name 属性。此属...
    编程 发布于2024-11-17
  • 如何在多项目 Gradle 配置中包含跨模块的测试依赖关系?
    如何在多项目 Gradle 配置中包含跨模块的测试依赖关系?
    Gradle 中的多项目测试依赖关系在 Gradle 中使用多项目配置时,管理跨项目测试的依赖关系可能具有挑战性。本文探讨了一个常见问题,即一个模块的测试依赖项在另一个模块中无法识别,重点关注用户遇到的具体示例。用户具有包含两个项目 A 和 B 的多项目配置. 项目 A 包含主代码和测试源代码,而项...
    编程 发布于2024-11-17
  • 为什么在 C++ 中包含“cstdio”时,“printf”可以在没有“std::”的情况下工作?
    为什么在 C++ 中包含“cstdio”时,“printf”可以在没有“std::”的情况下工作?
    cstdio stdio.h 命名空间cstdio 的 C 参考声明“库的每个元素都在 std 命名空间内定义”。然而,您发现 std::printf 和 printf 都可以工作,这就提出了 C 标头是否在两个命名空间中都包含符号的问题。答案更加细致。包括 cstdio 包括 cstdio 将符号...
    编程 发布于2024-11-17
  • 使用 WordPress API 的综合指南:身份验证和后期调度
    使用 WordPress API 的综合指南:身份验证和后期调度
    在本指南中,我们将探讨如何使用 WordPress API 进行身份验证并安排特定发布时间的帖子。这些步骤将帮助您以编程方式安全地管理您的 WordPress 内容。 使用 WordPress API 进行身份验证 要安全地与 WordPress API 交互,您需要对您的请求进行身...
    编程 发布于2024-11-17
  • 如何在 Java 中将字符串转换为输入流?
    如何在 Java 中将字符串转换为输入流?
    Java中将字符串转换为InputStream给定一个字符串,可以方便地将其转换为InputStream对象以进行进一步处理.要实现此目的,可以利用 ByteArrayInputStream 类。此类包装了一个字节数组并将其公开为 InputStream。可以使用与所需字符串对应的字节来初始化字节数...
    编程 发布于2024-11-17
  • 为什么 Flex 项目不通过边距和“边框”大小缩小以适应每行三个?
    为什么 Flex 项目不通过边距和“边框”大小缩小以适应每行三个?
    Flex 项目忽略边距和边框大小在 Flexbox 中,通过设置 flex: 1 1 33.33% 和 margin: 10px on flex物品,人们可能期望每排三个盒子。然而,使用 flex-wrap:wrap 时,盒子不会缩小到每行三个。原因在于 box-sizing: border-box...
    编程 发布于2024-11-17
  • 如何在SQL存储过程中实现真正的动态排序?
    如何在SQL存储过程中实现真正的动态排序?
    SQL 存储过程中的动态排序:深入探究在 SQL 存储过程中动态排序的需求是 Web 和应用程序中的常见需求Windows 应用程序。然而,有效实现它的问题仍然存在。现有方法:Hackish 解决方案一种流行的方法涉及复杂的 PHP CASE-WHEN 构造,该构造动态分配排序列和基于参数值的方向。...
    编程 发布于2024-11-17
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-17
  • Ubuntu 升级后如何解决 Python 中的“ImportError: No module named 'encodings'”?
    Ubuntu 升级后如何解决 Python 中的“ImportError: No module named 'encodings'”?
    解决Ubuntu升级后Python中的“ImportError: No module name 'encodings'”问题无法获取语言环境编码时出现的问题,导致错误消息“ImportError:没有名为‘encodings’的模块。”尽管重新安装 Python 并设置环境变量,此问...
    编程 发布于2024-11-17
  • 简单工厂
    简单工厂
    什么是简单工厂? 简单工厂不是设计模式。它只是将对象创建与客户端代码解耦。换句话说,简单工厂通过将实例化逻辑移至单独的类来封装对象实例化。 简单工厂经常与工厂模式混淆。我们将研究简单工厂来阐明它们的区别。另外,学习简单工厂可以帮助我们轻松理解工厂模式。 简单工厂可以...
    编程 发布于2024-11-17

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3