pyenv管理多个版本python的完整指南

Written by

in

文章目录
  • 购买的阿里云服务器自带的 openssl版本太低了,1.0.2版本。但是python3.10版本需要的openssl至少是1.1.1版本 [xpe@ilabx_ide ~]$ openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 所以我们需要单独在装一个新版本的OpenSSL,并且不能影响系统已有的旧版本openssl。 不影响系统现有 OpenSSL 1.0.x 的情况下,手动编译并安装一个 OpenSSL 1.1.1 的副本,然后强制 pyenv 使用这个新版本来编译 Python 3.10.12。
  • 切换到具体的用户下 去安装pyenv 这里采用git的方式 使用 Git 工具,将位于 https://github.com/pyenv/pyenv.git 的 pyenv 官方项目的所有文件,完整地下载并复制到你的 主目录 (~) 下的 .pyenv 隐藏文件夹 中
  • 1.为了确保 OpenSSL 和 Python 都能顺利编译,需要安装所有必需的编译工具和通用依赖。 # 1. 确保安装了基本的编译工具 (gcc, make) sudo yum install -y gcc make # 2. 确保安装了 Python 编译可能需要的所有通用开发依赖包 # 尽管我们隔离安装 OpenSSL,但其他 Python 模块可能需要这些系统的 devel 包 sudo yum install -y zlib-devel bzip2-devel readline-devel sqlite-devel libffi-devel xz-devel 2.安装OPENSSL # 定义安装目录(非常关键) INSTALL_PATH=/usr/local/custom_ssl/openssl-1.1.1w # 1. 切换到临时目录 cd /tmp # 2. 下载 OpenSSL 1.1.1w 源代码 (请确认这是最新的 1.1.1 版本) # 推荐使用: wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz # 3. 解压源代码 tar -xzf openssl-1.1.1w.tar.gz cd openssl-1.1.1w/ # 4. 配置 (使用 shared 选项和 –prefix 指定隔离路径) # **注意:以下命令需要 root 或 sudo 权限来执行 make install** ./config shared –prefix=$INSTALL_PATH # 5. 编译 make # 6. 安装 (使用 sudo 权限将编译结果安装到隔离目录) sudo make install # 7. 清理临时文件 (可选) cd /tmp rm -rf openssl-1.1.1w openssl-1.1.1w.tar.gz 3.使用上一步的openssl 编译python # 1. 定义 OpenSSL 的安装根目录 export OPENSSL_ROOT=/usr/local/custom_ssl/openssl-1.1.1w # 2. 确保之前失败的版本被清理(如果存在) pyenv uninstall 3.10.12 # 3. 设置环境变量并运行 pyenv install # PYTHON_CONFIGURE_OPTS 是最关键的,它告诉 Python 配置脚本 OpenSSL 的路径。 PYTHON_CONFIGURE_OPTS=”–with-openssl=$OPENSSL_ROOT” CFLAGS=”-I$OPENSSL_ROOT/include” LDFLAGS=”-L$OPENSSL_ROOT/lib” pyenv install 3.10.12 # 4. 验证安装 pyenv versions # 应该会看到 3.10.12 # 5. 激活并测试 Python pyenv local 3.10.12 # 或者 pyenv global 3.10.12 python -c “import ssl; print(ssl.OPENSSL_VERSION)” # 应该输出 OpenSSL 1.1.1w … 或类似的版本信息,而不是 1.0.x 安装过程 如下图: 安装python如果慢 就使用镜像,设置环境变量 export PYTHON_BUILD_MIRROR_URL=”https://mirrors.tuna.tsinghua.edu.cn/python/” export PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM=1 到此这篇关于pyenv管理多个版本python的完整指南的文章就介绍到这了,更多相关pyenv管理多个版本python内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python多版本管理工具pyenv安装及使用详解 python版本管理之pyenv使用超详细指南 Python超有用的多版本管理工具pyenv 一文读懂Python版本管理工具Pyenv使用 Python使用pyenv实现多环境管理 pyenv虚拟环境管理python多版本和软件库的方法 python pyenv多版本管理工具的使用 详解使用 pyenv 管理多个版本 python 环境 pyenv命令管理多个Python版本
  • 目录
    • 一.安装openssl
      • 1.安装openssl 具体步骤
      • 2.下载 openssl-1.1.1w.tar.gz
      • 3.配置编译和安装
      • 4.make install做了什么
      • 5.总结关键点
    • 二.安装pyenv
      • 1.下载pyenv
      • 2.pyenv常用命令
      • 3. 设置局部(Local)Python 版本
      • 4.pyenv local的工作原理
    • 完整步骤

      购买的阿里云服务器自带的 openssl版本太低了,1.0.2版本。但是python3.10版本需要的openssl至少是1.1.1版本

      [xpe@ilabx_ide ~]$ openssl version
      OpenSSL 1.0.2k-fips  26 Jan 2017
      

      所以我们需要单独在装一个新版本的OpenSSL,并且不能影响系统已有的旧版本openssl。

      不影响系统现有 OpenSSL 1.0.x 的情况下,手动编译并安装一个 OpenSSL 1.1.1 的副本,然后强制 pyenv 使用这个新版本来编译 Python 3.10.12。

      编译 OpenSSL 本身所必需的依赖,主要是 gccmake

      yum install -y gcc make
      
      sudo yum install -y 
          gcc make 
          openssl-devel 
          zlib-devel 
          bzip2-devel 
          readline-devel 
          sqlite-devel 
          libffi-devel 
          xz-devel # 针对 Python 3.10 的 lzma 模块
      

      我们将把 OpenSSL 1.1.1 安装到 /usr/local/custom_ssl/openssl-1.1.1

      # 切换到一个临时目录
      cd /tmp
      
      # 下载 OpenSSL 1.1.1 (这是一个 LTS 版本,非常适合 Python 3.10)
      # **注意:请检查最新的 1.1.1 版本,这里以 1.1.1w 为例**
      wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
      
      # 解压
      tar -xzf openssl-1.1.1w.tar.gz
      cd openssl-1.1.1w/
      

      # **使用 --prefix 指定安装到一个隔离的目录**
      # 建议您在 /usr/local 下创建一个非冲突目录
      INSTALL_PATH=/usr/local/custom_ssl/openssl-1.1.1w
      
      # 配置:使用 shared 选项以便于 Python 链接
      ./config shared --prefix=$INSTALL_PATH
      
      # 编译
      make
      
      # **安装 (这一步可能需要 sudo 权限)**
      sudo make install
      

      解释说明

      • config 阶段使用了 --prefix=$INSTALL_PATH,所以生成的 Makefile 才知道在您运行 make install 时,应该把编译好的 OpenSSL 文件复制到 /usr/local/custom_ssl/openssl-1.1.1w 这个目标目录中去
      • make 负责将原始的源代码(.c, .h 文件等)转换成机器可执行的二进制成品(可执行文件 .exe 或库文件 .so / .a)。这个过程是 “生产”
      • make install 负责将这些 “生产好的成品” 从源代码目录复制到您指定的最终安装位置(由 ./config --prefix 指定)。这个过程是 “部署”

      流程总结:

      • 配置 (./config) → 生产蓝图 (Makefile)
      • 构建 (make) → 按照蓝图生产成品 (.so, .a 文件)
      • 安装 (make install) → 将成品部署到最终位置 (--prefix 路径)

      在您执行了 ./config shared --prefix=/usr/local/custom_ssl/openssl-1.1.1w 之后,make install 会执行以下任务:

      • 读取安装规则: 它读取 Makefile 中定义的安装规则(通常是 install target)。
      • 创建目录结构: 它在 $INSTALL_PATH 下创建标准的子目录,例如 bin/lib/include/share/ 等。
      • 复制文件: 它将 make 编译好的所有文件,根据它们的类型,复制到 $INSTALL_PATH 下对应的子目录中。

      所有文件都是相对于设置的 --prefix 路径 $INSTALL_PATH (/usr/local/custom_ssl/openssl-1.1.1w) 进行安装的

      路径隔离: 由于您使用了 --prefix,所有这些文件都被安全地安装到了 /usr/local/custom_ssl/openssl-1.1.1w 这个隔离的沙盒中。它们不会覆盖或干扰您系统上任何依赖 OpenSSL 1.0.x 的现有 Python 2 或 Python 3.6 程序。

      编译目的: 通过 make install,我们确保了 OpenSSL 1.1.1w 的 库文件 (lib/)头文件 (include/) 结构完整地存在于一个确定的、非系统默认的路径下。

      验证:执行./openssl version

      [root@s71 bin]# ./openssl version
      ./openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
      

      发现报错,可以用 临时设置环境变量 LD_LIBRARY_PATH

      export LD_LIBRARY_PATH=/usr/local/custom_ssl/openssl-1.1.1w/lib:$LD_LIBRARY_PATH

      然后在执行

      [xpe@s71 bin]$ ./openssl version
      OpenSSL 1.1.1w  11 Sep 2023
      

      大概原理是:

      • 程序启动: 运行 ./openssl version
      • 链接器工作: 动态链接器启动,开始寻找 libssl.so.1.1
      • 命中 LD_LIBRARY_PATH 链接器发现 LD_LIBRARY_PATH 已经被设置为 /usr/local/custom_ssl/openssl-1.1.1w/lib:...
      • 加载成功: 链接器在 /usr/local/custom_ssl/openssl-1.1.1w/lib 目录中找到了 libssl.so.1.1,成功加载并允许您的 OpenSSL 1.1.1w 程序运行。

      切换到具体的用户下 去安装pyenv 这里采用git的方式

      使用 Git 工具,将位于 https://github.com/pyenv/pyenv.gitpyenv 官方项目的所有文件,完整地下载并复制到你的 主目录 (~) 下的 .pyenv 隐藏文件夹 中

      1.克隆 pyenv 仓库到你的主目录

      git clone https://github.com/pyenv/pyenv.git ~/.pyenv

      或者使用ssh方式,需要将你服务器的公钥复制到github中

      git clone git@github.com:pyenv/pyenv.git ~/.pyenv
      

      设置环境变量,将 pyenv 路径添加到环境变量

      2. 将 pyenv 路径添加到环境变量

      echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
      echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

      3. 初始化 pyenv 

      echo -e 'if command -v pyenv 1>/dev/null 2>&1; thenn  eval "$(pyenv init --path)"n  eval "$(pyenv init -)"nfi' >> ~/.bashrc

      4. 重新加载 shell 配置

      source ~/.bashrc

      然后就可以使用pyenv来管理多个python版本了

      # 查看所有可安装的版本
      pyenv install --list 
      
      # 安装你需要的版本,注意不要直接安装 需要配置指定的openssl
      pyenv install 3.10.12
      

      这是最关键的一步,它确保新安装的Python版本只对你的当前项目目录生效

      mkdir -p ~/my_new_project
      cd ~/my_new_project
      pyenv local 3.10.12
      

      这个命令会在你的项目目录下创建一个名为 .python-version 的文件,文件内容就是 3.10.12

      现在,当你在这个目录内时,你使用的就是局部安装的Python。

      验证: which python

      这个命令的作用是设置和绑定(set and bind)一个已经安装好的 Python 版本到当前的目录。

      1.查找版本: 它首先检查您指定的 <version> (例如 3.10.12) 是否已经存在于您的 ~/.pyenv/versions/ 目录下。

      如果不存在,它会报错,提示您需要先运行 pyenv install <version>

      2.创建文件: 如果版本已安装,它会在您当前所在的目录中创建一个名为 .python-version 的文件。

      3.写入版本号: 这个文件里只包含一行文本,就是您指定的版本号(例如 3.10.12)。

      4.运行时切换: 当您运行任何 Python 相关的命令(如 pythonpip)时:

      • pyenv 会通过其在 Shell 配置中注入的**垫片(shims)**机制拦截这个命令。
      • pyenv 会从当前目录开始,向上级目录逐级查找这个 .python-version 文件。
      • 找到文件后,pyenv 会读取里面的版本号,并修改您的 PATH,将命令执行重定向到 ~/.pyenv/versions/<version>/bin/python

      PYENV_ROOT 下有一个关键的子目录叫 versions。所有通过 pyenv install 命令安装的 Python 环境都会存放在这里。

      并且你的 PYENV_ROOT 是默认的 ~/.pyenv

      • 用户隔离: 所有安装都在你的用户主目录下,不影响系统的全局安装(通常在 /usr/bin/python/usr/local/bin/python)。
      • 环境独立: 每个版本都是一个完全独立、自包含的环境,互不干扰。

      列出所有的版本

      pyenv versions
      

      * 星号: 星号(*)标记当前 Shell 正在使用的 Python 版本。在上面的例子中,当前使用的是 system 版本(即系统自带的 Python)。

      显示当前用的哪个版本

      pyenv version
      

      1.为了确保 OpenSSL 和 Python 都能顺利编译,需要安装所有必需的编译工具和通用依赖。

      # 1. 确保安装了基本的编译工具 (gcc, make)
      sudo yum install -y gcc make
      
      # 2. 确保安装了 Python 编译可能需要的所有通用开发依赖包
      # 尽管我们隔离安装 OpenSSL,但其他 Python 模块可能需要这些系统的 devel 包
      sudo yum install -y 
          zlib-devel 
          bzip2-devel 
          readline-devel 
          sqlite-devel 
          libffi-devel 
          xz-devel
      

      2.安装OPENSSL

      # 定义安装目录(非常关键)
      INSTALL_PATH=/usr/local/custom_ssl/openssl-1.1.1w
      
      # 1. 切换到临时目录
      cd /tmp
      
      # 2. 下载 OpenSSL 1.1.1w 源代码 (请确认这是最新的 1.1.1 版本)
      # 推荐使用:
      wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
      
      # 3. 解压源代码
      tar -xzf openssl-1.1.1w.tar.gz
      cd openssl-1.1.1w/
      
      # 4. 配置 (使用 shared 选项和 --prefix 指定隔离路径)
      # **注意:以下命令需要 root 或 sudo 权限来执行 make install**
      ./config shared --prefix=$INSTALL_PATH
      
      # 5. 编译
      make
      
      # 6. 安装 (使用 sudo 权限将编译结果安装到隔离目录)
      sudo make install
      
      # 7. 清理临时文件 (可选)
      cd /tmp
      rm -rf openssl-1.1.1w openssl-1.1.1w.tar.gz
      

      3.使用上一步的openssl 编译python

      # 1. 定义 OpenSSL 的安装根目录
      export OPENSSL_ROOT=/usr/local/custom_ssl/openssl-1.1.1w
      
      # 2. 确保之前失败的版本被清理(如果存在)
      pyenv uninstall 3.10.12
      
      # 3. 设置环境变量并运行 pyenv install
      # PYTHON_CONFIGURE_OPTS 是最关键的,它告诉 Python 配置脚本 OpenSSL 的路径。
      PYTHON_CONFIGURE_OPTS="--with-openssl=$OPENSSL_ROOT" 
      CFLAGS="-I$OPENSSL_ROOT/include" 
      LDFLAGS="-L$OPENSSL_ROOT/lib" 
      pyenv install 3.10.12
      
      # 4. 验证安装
      pyenv versions
      # 应该会看到 3.10.12
      
      # 5. 激活并测试 Python
      pyenv local 3.10.12 # 或者 pyenv global 3.10.12
      python -c "import ssl; print(ssl.OPENSSL_VERSION)"
      # 应该输出 OpenSSL 1.1.1w ... 或类似的版本信息,而不是 1.0.x
      

      安装过程 如下图:

      安装python如果慢 就使用镜像,设置环境变量

      export PYTHON_BUILD_MIRROR_URL="https://mirrors.tuna.tsinghua.edu.cn/python/"
      export PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM=1
      

      到此这篇关于pyenv管理多个版本python的完整指南的文章就介绍到这了,更多相关pyenv管理多个版本python内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python多版本管理工具pyenv安装及使用详解
      • python版本管理之pyenv使用超详细指南
      • Python超有用的多版本管理工具pyenv
      • 一文读懂Python版本管理工具Pyenv使用
      • Python使用pyenv实现多环境管理
      • pyenv虚拟环境管理python多版本和软件库的方法
      • python pyenv多版本管理工具的使用
      • 详解使用 pyenv 管理多个版本 python 环境
      • pyenv命令管理多个Python版本

      站内搜索