pyenv 安装脚本解读

在这里插入图片描述

pyenv 安装脚本

curl https://pyenv.run | bash

执行上面这一行脚本就可以安装pyenv来满足你对 Python 多版本共存以及切换的支持。

pyenv搭配virtualenv可以满足你对Python虚拟环境版本的支持。个人感觉pyenvconda更轻量,更推荐使用。

那么上面的脚本到底干了什么事儿呢?

pyenv.run的内容

#!/bin/bash
#
# Usage: curl https://pyenv.run | bash
#
# For more info, visit: https://github.com/pyenv/pyenv-installer
#
index_main() {set -ecurl -s -S -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
}index_main

它去github获取了另一个脚本并执行,脚本的内容如下:

pyenv-installer 的内容

#!/usr/bin/env bashset -e
[ -n "$PYENV_DEBUG" ] && set -xif [ -z "$PYENV_ROOT" ]; thenif [ -z "$HOME" ]; thenprintf "$0: %s\n" \"Either \$PYENV_ROOT or \$HOME must be set to determine the install location." \>&2exit 1fiexport PYENV_ROOT="${HOME}/.pyenv"
ficolorize() {if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"else echo -n "$2"fi
}# Checks for `.pyenv` file, and suggests to remove it for installing
if [ -d "${PYENV_ROOT}" ]; then{ echocolorize 1 "WARNING"echo ": Can not proceed with installation. Kindly remove the '${PYENV_ROOT}' directory first."echo} >&2exit 1
fifailed_checkout() {echo "Failed to git clone $1"exit -1
}checkout() {[ -d "$2" ] || git -c advice.detachedHead=0 clone --branch "$3" --depth 1 "$1" "$2" || failed_checkout "$1"
}if ! command -v git 1>/dev/null 2>&1; thenecho "pyenv: Git is not installed, can't continue." >&2exit 1
fi# Check ssh authentication if USE_SSH is present
if [ -n "${USE_SSH}" ]; thenif ! command -v ssh 1>/dev/null 2>&1; thenecho "pyenv: configuration USE_SSH found but ssh is not installed, can't continue." >&2exit 1fi# `ssh -T git@github.com' returns 1 on success# See https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connectionssh -T git@github.com 1>/dev/null 2>&1 || EXIT_CODE=$?if [[ ${EXIT_CODE} != 1 ]]; thenecho "pyenv: github ssh authentication failed."echoecho "In order to use the ssh connection option, you need to have an ssh key set up."echo "Please generate an ssh key by using ssh-keygen, or follow the instructions at the following URL for more information:"echoecho "> https://docs.github.com/en/repositories/creating-and-managing-repositories/troubleshooting-cloning-errors#check-your-ssh-access"echoecho "Once you have an ssh key set up, try running the command again."exit 1fi
fiif [ -n "${USE_SSH}" ]; thenGITHUB="git@github.com:"
elseGITHUB="https://github.com/"
ficheckout "${GITHUB}pyenv/pyenv.git"            "${PYENV_ROOT}"                           "${PYENV_GIT_TAG:-master}"
checkout "${GITHUB}pyenv/pyenv-doctor.git"     "${PYENV_ROOT}/plugins/pyenv-doctor"      "master"
checkout "${GITHUB}pyenv/pyenv-update.git"     "${PYENV_ROOT}/plugins/pyenv-update"      "master"
checkout "${GITHUB}pyenv/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"  "master"if ! command -v pyenv 1>/dev/null; then{ echocolorize 1 "WARNING"echo ": seems you still have not added 'pyenv' to the load path."echo} >&2{ # Without args, `init` commands print installation help"${PYENV_ROOT}/bin/pyenv" init || true"${PYENV_ROOT}/bin/pyenv" virtualenv-init || true} >&2
fi

逐行解释

让AI帮我们解释一下这个脚本,这个脚本是用于安装 pyenv 的 Bash 脚本,pyenv 是一个用来管理多个 Python 版本的工具。脚本首先会检查一些条件,确保环境设置正确,然后从 GitHub 克隆 pyenv 和它的一些插件,并设置适当的路径和权限。

  1. 设置脚本行为和调试信息

    set -e
    [ -n "$PYENV_DEBUG" ] && set -x
    
    • set -e:如果脚本中某一行命令返回非零值(即出错),则立即退出脚本。
    • set -x:如果环境变量 PYENV_DEBUG 被设置,则开启调试模式,打印每个执行的命令。
  2. 设置 PYENV_ROOT

    if [ -z "$PYENV_ROOT" ]; thenif [ -z "$HOME" ]; thenprintf "$0: %s\n" \"Either \$PYENV_ROOT or \$HOME must be set to determine the install location." \>&2exit 1fiexport PYENV_ROOT="${HOME}/.pyenv"
    fi
    
    • 如果 PYENV_ROOT 未设置,且 HOME 变量也没有设置,脚本会输出错误并退出。
    • 如果 HOME 已设置,则默认将 PYENV_ROOT 设置为 $HOME/.pyenv
  3. 颜色化输出函数

    colorize() {if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"else echo -n "$2"fi
    }
    
    • colorize 函数用于输出带有颜色的文本,支持终端支持颜色时输出颜色,不支持时输出普通文本。
  4. 检查 PYENV_ROOT 目录是否已存在

    if [ -d "${PYENV_ROOT}" ]; then{ echocolorize 1 "WARNING"echo ": Can not proceed with installation. Kindly remove the '${PYENV_ROOT}' directory first."echo} >&2exit 1
    fi
    
    • 如果 PYENV_ROOT 目录已存在,脚本会输出警告并退出,要求用户先删除该目录才能继续安装。
  5. 定义 failed_checkoutcheckout 函数

    failed_checkout() {echo "Failed to git clone $1"exit -1
    }checkout() {[ -d "$2" ] || git -c advice.detachedHead=0 clone --branch "$3" --depth 1 "$1" "$2" || failed_checkout "$1"
    }
    
    • failed_checkout:如果 Git 克隆失败,会输出错误信息并退出。
    • checkout:如果目标目录不存在,则使用 git clone 命令从指定 Git 仓库克隆代码。支持克隆指定分支($3)并且使用浅克隆(--depth 1)。
  6. 检查是否安装 Git

    if ! command -v git 1>/dev/null 2>&1; thenecho "pyenv: Git is not installed, can't continue." >&2exit 1
    fi
    
    • 如果系统没有安装 git,脚本会输出错误并退出。
  7. 检查 USE_SSH 配置

    if [ -n "${USE_SSH}" ]; thenif ! command -v ssh 1>/dev/null 2>&1; thenecho "pyenv: configuration USE_SSH found but ssh is not installed, can't continue." >&2exit 1fi# `ssh -T git@github.com' returns 1 on successssh -T git@github.com 1>/dev/null 2>&1 || EXIT_CODE=$?if [[ ${EXIT_CODE} != 1 ]]; thenecho "pyenv: github ssh authentication failed."exit 1fi
    fi
    
    • 如果环境变量 USE_SSH 设置了,脚本会检查系统是否安装了 ssh,如果没有安装,退出。
    • 然后,使用 ssh 测试 GitHub 的 SSH 连接,确保 SSH 密钥设置正确。
  8. 设置 GitHub 地址(基于是否使用 SSH)

    if [ -n "${USE_SSH}" ]; thenGITHUB="git@github.com:"
    elseGITHUB="https://github.com/"
    fi
    
    • 如果使用 SSH,设置 GitHub 地址为 git@github.com:,否则使用 HTTPS。
  9. 克隆 pyenv 和相关插件

    checkout "${GITHUB}pyenv/pyenv.git"            "${PYENV_ROOT}"                           "${PYENV_GIT_TAG:-master}"
    checkout "${GITHUB}pyenv/pyenv-doctor.git"     "${PYENV_ROOT}/plugins/pyenv-doctor"      "master"
    checkout "${GITHUB}pyenv/pyenv-update.git"     "${PYENV_ROOT}/plugins/pyenv-update"      "master"
    checkout "${GITHUB}pyenv/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"  "master"
    
    • 克隆 pyenv 主仓库以及其插件:pyenv-doctorpyenv-updatepyenv-virtualenv
  10. 提醒用户配置 pyenv 到 PATH

    if ! command -v pyenv 1>/dev/null; then{ echocolorize 1 "WARNING"echo ": seems you still have not added 'pyenv' to the load path."echo} >&2{ # Without args, `init` commands print installation help"${PYENV_ROOT}/bin/pyenv" init || true"${PYENV_ROOT}/bin/pyenv" virtualenv-init || true} >&2
    fi
    
    • 如果 pyenv 没有被正确添加到 PATH,脚本会提醒用户,并尝试运行 pyenv initpyenv virtualenv-init 来显示如何配置。

总结

这个脚本的作用是为用户自动安装 pyenv 和相关插件。它会确保环境符合安装要求,检查 git 是否可用,确认用户是否有正确的 SSH 配置,并从 GitHub 克隆 pyenv 和其插件。然后它会提醒用户如何正确配置 pyenv,以便在系统中使用它。如果某些条件不满足,脚本会提前退出并给出相应的错误提示。

我们可以通过export PYENV_ROOT="/data/pyenv"设置PYENV_ROOTpyenv安装到指定的目录,从而避免日积月累各种依赖包塞满系统盘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/487404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 内存管理

Redis 给缓存数据设置过期时间有什么用? 一般情况下,我们设置保存的缓存数据的时候都会设置一个过期时间。为什么呢? 内存是有限且珍贵的,如果不对缓存数据设置过期时间,那内存占用就会一直增长,最终可能…

Day2——需求分析与设计

教师端签到应用软件的需求分析; 产品经理如何写好产品需求文档(附模板) 需求分析是软件开发过程中的关键步骤,它确保了开发的软件能够满足用户的需求。以下是进行需求分析的具体步骤: 1. 确定分析目标 明确教师端签到…

Python爬虫——HTML中Xpath定位

Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置,进而将其写入到本地或者数据库中。 学习Xpath爬虫,我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…

AI如何让PPT制作变得轻松与智能?用一键生成ppt!

谁还愿意把时间浪费在PPT的设计和内容排版上?尤其是对于那些需要频繁制作演示文稿的人来说,一份看起来专业的PPT往往会让人陷入“做与不做”的困境。但随着科技的飞速发展,传统的PPT制作方法正逐渐被更为高效的工具所取代,尤其是智…

树莓派 PICO RP2040 MACOS 使用

文章参考: Developing in C on the RP2040: macOS | Wellys Dev 这里会提示报错:ln: /bin/picotool: Operation not permitted 参考:Mac ln命令报错:Operation not permitted_ln operation not permitted-CSDN博客 放在 usr/lo…

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时,便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value,其次就是vu…

xtu oj 制药

文章目录 回顾前言代码思路 回顾 AB III问题 H: 三角数问题 G: 3个数等式 数组下标查询,降低时间复杂度1405 问题 E: 世界杯xtu 数码串xtu oj 神经网络xtu oj 1167 逆序数(大数据)xtu oj 原根xtu oj 不定方程的正整数解xtu oj 最多的可变换字…

【Linux】VMware 安装 Ubuntu18.04.2

ISO镜像安装步骤 选择语言 English 选择键盘布局 English 选择系统 Ubuntu 虚拟机网卡地址,默认即可 代理地址,默认空即可 镜像地址,修改成阿里云地址 选择第二项,LVM 磁盘扩容技术 第一块硬盘名sda,默认…

Java项目实战II基于微信小程序的跑腿系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的现代生活中&…

透彻理解并解决Mockito模拟框架的单元测试无法运行的问题

本篇的实例基于Maven IDE (VS Code) 运行 在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行使用Mockito 注解 ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。 不使用注…

CUDA学习笔记(1):安装和起步-1

CUDA安装和起步 写在前面硬件的准备学习的目的Pytorch学习CUDA方向 CUDA相关的书寻找CUDA的示例 安装Vsual Studio 2019下载CUDA和安装首先检查,自己的电脑是否已装过CUDA(读作:kuda)查看cuda-samples README.md,要求的…

获取pdf文件文字图片内容以及在PDF中插入图片

该功能用到如下jar包: //获取图片数据public void huoqu() throws IOException {File file new File("C:\\Users\\xiaomage\\Desktop\\123.pdf");PDDocument document Loader.loadPDF(file);/* PDFTextStripper stripper new PDFTextStripper();String…

【C#】NET 9中LINQ的新特性-CountBy

前言 在 .NET 中,使用 LINQ 对元素进行分组并计算它们的出现次数时,需要通过两个步步骤。首先,使用 GroupBy方法根据特定键对元素进行分类。然后,再计算每个组元素包含个数。而随着 .NET 9 版本发布,引入了一些新特性。其中 LINQ 引入了一种新的方法 CountBy,本文一起来了…

若依集成更好用的easyexcel

背景 若依使用的是apach poi并在此基础上进行封装apach poi的原生的api是很复杂的,若依简化了了此操作apach poi的上传速率和下载速率都是没有优化的,依赖于文件大小的限制在此前提下,如果没法满足客户的需求(超大型文件的上传&am…

阿里内部正式开源“Spring Cloud Alibaba (全彩小册)”

年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个…

Android问题记录 - Inconsistent JVM-target compatibility detected for tasks

文章目录 前言开发环境问题描述问题分析解决方案补充内容最后 前言 前段时间升级Android Studio后修复了一堆问题,详情请看:Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0(持续更新)。我以为问题已经全部解决了…

分布式专题(1)之Redis持久化、主从与哨兵架构详解

一、Redis持久化 1.1 RDB快照(snapshot) 在默认的情况下,Redis将内存数据快照保存名字为:dump.rdb的二进制文件中,当然你在配置文件redis.conf中修改对应的二进制文件名。 redis开启RDB快照,可以在redis中…

Y20030053 JSP+SSM+MYSQL+LW+旅游系统的设计与实现 源码 配置 文档 全套资料

旅游系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 摘 要 随着旅游业的蓬勃发展和人们对休闲度假需求的不断增加,旅游业管理面临着越来越多的挑战。为了提高管理效率、优化客户体验并增强市场竞争力,本文介绍…

TypeScript进阶

Typescript进阶 基础知识 JavaScript 的核心特点就是灵活,但随着项目规模的增大,灵活反而增加开发者的心智负担。例如在代码中一个变量可以被赋予字符串、布尔、数字、甚至是函数,这样就充满了不确定性。而且这些不确定性可能需要在代码运行…

github操作学习笔记

git开源的分布式版本控制系统: 每次修改文件提交后,都会自动创建一个项目版本 查看git版本看有没有安装成功:git --version 把默认编辑器设置成vim:git config --global core.editor "vim" 1、设置昵称和邮箱&#xff…