Python 版本管理工具选择与 Pyenv 使用说明
Python 版本管理工具的主要作用是帮助开发者在同一台机器上管理多个 Python 版本和环境。这对于开发和部署不同项目非常有用,因为不同项目可能依赖不同的 Python 版本或者不同的包版本。
具体来说,Python 版本管理工具有以下功能:
(1)避免依赖冲突,不同的项目可能依赖不同版本的库,使用版本管理工具可以创建独立的虚拟环境,避免依赖冲突。
(2)简化开发流程,开发者可以轻松地在不同的 Python 版本之间切换,而不需要重新安装或配置 Python。
(3)便于部署,减少冲突。在开发环境中使用与生产环境相同的 Python 版本和依赖,可以减少部署时出现的问题。
(4)共享环境配置,提高开发环境一致性。可以将环境配置文件(如 requirements.txt 或 pyproject.toml)共享给团队成员,确保大家使用相同的开发环境。
常见的管理工具有 Pyenv 和 Conda。Pyenv 是当前最流行的 Python 版本管理工具,支持多种 Python 版本,如 CPython、Anaconda、PyPy 等,功能全面且简单易用。Conda 最初由 Anaconda, Inc. 开发,主要用于 Python 和 R 编程语言的软件包(含 Python)及环境管理,特别适合跨平台、多语言项目,Python 版本管理只是其一小部分功能,若仅用于管理 Python 版本,Conda 有些大材小用,且系统较复杂、学习成本略高。相比之下,Pyenv 是常规项目 Python 版本管理的最优选择。以下详细介绍 Pyenv 的使用方法。
一、Pyenv 安装
建议: 先卸载系统内置的 Python,否则可能导致 pyenv 设置不生效。
1. Windows
pyenv 本身是为 Unix 系统设计的。你可以使用 pyenv-win 这个项目,它是 pyenv 的 Windows 版本。
你需要在 PowerShell 中执行以下命令安装 pyenv-win:
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"
重新打开 PowerShell,运行 pyenv --version 检查安装是否成功。
2. Linux
你可以使用以下命令来安装 pyenv:
curl https://pyenv.run | bash
之后再将 pyenv 配置到环境变量中并使之生效,执行如下命令:
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
source ~/.bashrc
上述配置仅能使 pyenv 在 bash 环境生效,更多 shell 环境配置请参考:Set up your shell environment for Pyenv。配置的本质在于将$PYENV_ROOT 下的 shims 和 bin 目录配置到 PATH 变量中,且 shims 需配置在前。配置后的 PATH 如下:
[root@2e7669577b11 /]# echo $PATH
/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
二、Pyenv 基本用法
## 查看帮助文档
pyenv
## 查看某个命令帮助文档
pyenv install --help
## 查看版本
pyenv version
## 检查 Python 是否正常运行
python -c "import sys; print(sys.executable)"
## 查看已安装的 Python 版本
pyenv versions
## 查看当前使用的 Python 版本
pyenv version
## 查看所有可用的 Python 版
pyenv install --list
## 安装指定版本
pyenv install 3.9.1
## 验证
python --version
## 卸载指定版本
pyenv uninstall 3.9.1
## 全局指定 Python 版本(影响所有项目)
pyenv global 3.9.1
## 局部指定 Python 版本(仅影响当前项目目录),指定后在当前项目目录内创建 .python-version 文件,保存版本信息
## 优先级高于 global
pyenv local 3.9.1
## 会话级指定 Python 版本(影响所有项目)
pyenv shell 3.9.1
## 查看 python 的安装目录
pyenv which python
## 重新生成 pyenv 的 shims 目录中的可执行文件
pyenv rehash
Python 安装常见问题,可参考:Python common build problems
三、Pyenv 核心原理 -Shims
pyenv 通过 Shims 实现了对不同 Python 版本的透明管理和切换。
1. 工作原理
上述环境配置中,在 PATH 环境变量最前面插入一个 shims 目录,$(pyenv root)/shims:$(pyenv root)/bin:/usr/local/bin:/usr/bin:/bin。通过一个称为 rehashing 的过程,pyenv 在该目录中维护垫片,以匹配每个已安装的 Python 版本中的每个 Python 命令,如: python、pip 等。
Shims 是轻量级可执行文件,它只是将你的命令传递给 pyenv。因此,在安装了 pyenv 的情况下,当你运行 pip 时,你的操作系统将执行以下操作:
(1)搜索 PATH 环境变量,寻找 pip 可执行文件
(2)在 $(pyenv root)/shims 中找到 pip
(3)运行名为 pip 的 shim,它将命令传递给 pyenv
2. 作用
(1)通过使用 Shims,pyenv 可以实现对不同项目使用不同 Python 版本的灵活管理,而不需要手动修改环境变量或路径。
(2)你可以方便地在全局、目录级别甚至是 shell 会话级别设置或切换 Python 版本,极大地方便了开发和测试工作。
3. 示例
(1)假设你在项目 A 中使用 Python 3.8,而在项目 B 中使用 Python 3.9。通过 pyenv 和 Shims,你可以在项目目录中分别设置 Python 版本:
# 在项目 A 目录中
pyenv local 3.8.10
# 在项目 B 目录中
pyenv local 3.9.5
(2)当你在项目 A 目录中运行 python 命令时,Shims 会确保调用的是 Python 3.8.10,而在项目 B 目录中则会调用 Python 3.9.5。
通过这种方式,Shims 实现了对不同 Python 版本的透明管理和切换。
四、Pyenv 初始化操作源码解读
1. pyenv init -
用于初始化 pyenv,使其在当前 shell 会话中工作。运行后,执行如下命令(相关说明附在注释中):
# 1.PATH 变量处理
## 该脚本将当前的 PATH 变量拆分为一个数组 paths,并赋予
## 通过遍历 paths 数组,检查每个路径是否为 '/root/.pyenv/shims',如果是,则将其移除
PATH="$(bash --norc -ec 'IFS=:; paths=($PATH);
for i in ${!paths[@]}; do
if [[ ${paths[i]} == "''/root/.pyenv/shims''" ]]; then unset '\''paths[i]'\'';
fi; done;
echo "${paths[*]}"')" #
# 2. 更新 PATH 变量
## 将 '/root/.pyenv/shims' 添加到 PATH 变量的最前面
export PATH="/root/.pyenv/shims:${PATH}"
## 设置 PYENV_SHELL 环境变量为 bash,sh 环境下,输出的是 shell
export PYENV_SHELL=bash
## sh 环境下,无该行代码,bash 环境下执行改行的作用是:source 命令加载 pyenv 的自动补全脚本
source '/root/.pyenv/libexec/../completions/pyenv.bash'
## 通过 command 命令执行 pyenv rehash(主要作用是重新生成 pyenv 的 shims 目录中的可执行文件),并将错误输出重定向到 /dev/null
command pyenv rehash 2>/dev/null
# 3. 定义一个 pyenv 函数,该函数根据不同的子命令执行不同的操作
## 如果子命令是 activate、deactivate、rehash 或 shell,则通过 eval 执行 pyenv "sh-$command"
## 对于其他子命令,直接调用 command pyenv "$command" "$@"
pyenv() {
local command
command="${1:-}"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
activate|deactivate|rehash|shell)
eval "$(pyenv "sh-$command" "$@")"
;;
*)
command pyenv "$command" "$@"
;;
esac
}
2. pyenv init --path
用于设置 PYENV_ROOT 环境变量,使得 pyenv 可以找到安装的 Python 版本。pyenv init - 包含 pyenv init --path 操作。
sh 或 bash 环境运行后,执行如下命令(相关说明附在注释中):
## 该脚本将当前的 PATH 变量拆分为一个数组 paths,并赋予
## 通过遍历 paths 数组,检查每个路径是否为 '/root/.pyenv/shims',如果是,则将其移除
PATH="$(bash --norc -ec 'IFS=:; paths=($PATH);
for i in ${!paths[@]}; do
if [[ ${paths[i]} == "''/root/.pyenv/shims''" ]]; then unset '\''paths[i]'\'';
fi; done;
echo "${paths[*]}"')"
## 将 '/root/.pyenv/shims' 添加到 PATH 变量的最前面
export PATH="/root/.pyenv/shims:${PATH}"
## 通过 command 命令执行 pyenv rehash,并将错误输出重定向到 /dev/null
command pyenv rehash 2>/dev/null
五、参考文章
Python 版本管理工具选择与 Pyenv 使用说明的更多相关文章
- python版本管理工具pyenv和包管理工具pipenv
一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...
- 腾讯云服务器ubuntu16.04系统下安装Python版本管理工具pyenv
一. 系统环境 腾讯云提供的系统是ubuntu 16.04 LTS,系统默认的Python版本是2.7.12,我想要安装3.6和其他的版本. 比较方便的是腾讯云已经默认安装好了git和curl ...
- Ubuntu安装Python版本管理工具pyenv
gyf@gyf-VirtualBox:~$ git clone https://github.com/yyuu/pyenv.git ~/.pyenvCloning into '/home/gyf/.p ...
- python 版本管理工具 pyenv 使用备忘
安装步骤 安装 xcode-select 以及 homebrew(前者在安装 git 的时候装过,后者 mac 开发必备无需解释) 安装 pyenv brew install pyenv,用 pyen ...
- Python生态工具、文本处理和系统管理(虚拟)
一.Python生态工具 一.Python内置小工具 1.秒级启动一个下载服务器 Python 内置了一个下载服务器就能够显著提升效率了 . 例如, 你的同事要让你传的文件位于某一个目录下,那么,你可 ...
- python 管理工具
pip 包管理工具 virtualenv 虚拟环境管理工具 切换目录 virtualenvwrapper 虚拟环境管理工具加强版 pyenv python版本管理工具 修改环境变量 pyenv-vir ...
- Python多版本共存之pyenv
经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...
- Python 多版本共存之pyenv
经常遇到这样的情况: 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性: 系统自带的 Python 是 2.x,自己需要 Python 3.x: 此时需要在系统中安装 ...
- 你应该学会的Python多版本管理工具Pyenv
目录 Pyenv 简介 安装pyenv 通过pyenv安装python各种发行版 pyenv命令 多版本Python的管理 Pyenv常见问题Wiki Pyenv 简介 首先,该工具是在类linux环 ...
- python多版本管理工具(pyenv)
在学习和利用python开发的很多情况下,需要多版本的Python并存.此时需要在系统中安装多个Python,但又不能影响系统自带的 Python.pyenv 就是这样一个 Python 版本管理器. ...
随机推荐
- 树莓派4B-GPIO控制舵机转动
树莓派4B-GPIO控制舵机转动 硬件需求: 树莓派 舵机 杜邦线 舵机 什么是舵机? 舵机(servomotor)是一种简化版本的伺服电机,是位置伺服的驱动器,能够通过输入PWM信号控制旋转角度,具 ...
- 洛谷P1464
搜索优化后是记忆化搜索,再优化就是dp了 #include <iostream> #include <utility> using namespace std; typedef ...
- 第二部分:关键技术领域的开源实践【内网穿透FRP】
FRP简介 FRP(Fast Reverse Proxy)作为一种高性能的内网穿透工具,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网IP节点(云 ...
- 解决方案 | xpdf4.04支持中文pdf识别与转换(pdf提取txt)
一.下载地址 按照参考链接将xpdf4.04(含有xpdf-chinese-simplified包)已经打包好,下载链接如下: https://www.123pan.com/s/9Rn9-eEQpH. ...
- Linux 提权-密码搜寻
本文通过 Google 翻译 Password Hunting – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充 ...
- [oeasy]python0115_西里尔字符集_Cyrillic_俄文字符编码_KOI_8859系列
各语言字符编码 回忆上次内容 上次回顾了 非ascii的拉丁字符编码的进化过程 0-127 是 ascii 的领域 西欧.北欧语言 大多使用 拉丁字符 由iso组织 制定iso-8859-1 ...
- 学习 React 需要具备的 JavaScript 知识
学习 React 需要具备的 JavaScript 知识 为什么要学习 React? React 可以与任何其他库或框架无缝集成,因为 React 是一个仅视图库(它是 Model View C on ...
- 5/15课下作业:评价一下steam软件
用户界面: 登录后会弹出特惠广告,广告内容可能不常用.主界面简洁方便,启动游戏,购买游戏,浏览社区,浏览自己内容一目了然 记住用户选择: 登录一次后会记住用户的账户密码,可以直接进行用户间的切换,会记 ...
- Python+selenium编写第一个UI自动化脚本
python UI自动化前提:①python需要安装selenium模块 ②下载浏览器驱动 1.安装selenium模块 先确认本地是否安装selenium模块,没有的话点击右边的添加按钮" ...
- 【Java】java.util.ConcurrentModificationException
异常提示信息: java.util.ConcurrentModificationException at java.util.LinkedHashMap$LinkedHashIterator.next ...