在 AlmaLinux 上将默认的 Python 3.6 升级或切换到 Python 3.11 是一个常见的需求。

请注意,直接替换系统自带的 Python 3.6 是非常危险的,因为许多系统工具(如 yum/dnf 包管理器)都依赖于它,盲目删除或修改可能会导致系统崩溃。

推荐的做法是: 保留系统原有的 Python 3.6,同时安装 Python 3.11,并通过配置 alternatives 工具或使用虚拟环境 (venv) 来管理默认版本。

以下是两种最安全、最常用的方法。

1. 方法一:使用 Software Collections (SCL) 仓库(推荐且简单)

Red Hat 及其衍生版(如 AlmaLinux)提供了 SCL 仓库,它可以让你安装和维护多个版本的软件而不会影响系统默认版本。

  1. 启用 SCL 仓库
    AlmaLinux 可能已经预装了 scl 工具。首先安装 SCL 仓库配置。

    sudo dnf install almalinux-release-scl
  2. 安装 Python 3.11
    搜索可用的 Python 版本,然后安装 3.11 及其开发工具包。

    sudo dnf search rh-python
    sudo dnf install rh-python311 rh-python311-python-devel
  3. 启用 Python 3.11
    安装后,它不会自动成为默认版本。你需要在每次需要时通过 scl enable 命令来启动一个包含 Python 3.11 环境的 shell。

    scl enable rh-python311 bash

    现在,在这个新的 shell 中,python --version 和 pip --version 都会指向 3.11。

    $ python --version
    

    Python 3.11.x

  4. (可选)永久为您的用户启用
    如果您希望每次登录都默认使用 Python 3.11,可以将它添加到您的 shell 配置文件中。

    echo "source scl_source enable rh-python311" >> ~/.bashrc

    然后重新加载配置:

    source ~/.bashrc

优点:非常安全,与系统环境完全隔离,管理简单。
缺点:需要额外的命令来启用环境(但可以配置为自动启用)。

2. 方法二:从源码编译安装并配置 alternatives

这种方法更灵活,可以安装任何版本,但步骤稍复杂。

  1. 安装编译依赖

    sudo dnf groupinstall "Development Tools"
    sudo dnf install openssl-devel bzip2-devel libffi-devel sqlite-devel readline-devel
  2. 下载并编译 Python 3.11

    # 下载源码包
    wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
    # 解压
    tar xvf Python-3.11.9.tgz
    # 进入目录
    cd Python-3.11.9
    # 配置编译选项(--prefix=/usr/local 是标准位置)
    ./configure --enable-optimizations --prefix=/usr/local
    # 编译并安装 (使用 -j 参数加速编译,数字为CPU核心数)
    sudo make -j 4
    sudo make altinstall

    重要:使用 make altinstall 而不是 make install,以避免覆盖系统默认的 python3 二进制文件。

  3. 验证安装
    此时,系统会同时存在两个版本:

    • /usr/bin/python3 (系统自带的 3.6)

    • /usr/local/bin/python3.11 (新安装的 3.11)

    直接运行 python3.11 和 pip3.11 来使用新版本。

    python3.11 --version
  4. (可选)使用 alternatives 配置默认版本
    如果你想将系统范围的 python3 命令指向 3.11(有一定风险,请确保你的关键系统工具不依赖 3.6),可以使用 alternatives 工具。

    # 将 python3.11 加入 alternatives 列表
    sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 311
    # 交互式选择默认版本
    sudo alternatives --config python3

    运行 sudo alternatives --config python3 后,会列出所有可用的版本,输入对应的选择编号即可切换。

    警告:执行此操作后,请务必测试 sudo dnf update 等命令是否正常。因为 DNF 是用 Python 写的,如果与新版 Python 不兼容会出错。如果出现问题,只需再次运行 sudo alternatives --config python3 并选择回原来的 Python 3.6 即可。

3. 方法三:使用虚拟环境(Venv) - 最安全的方法

这其实不是切换系统版本,而是为每个项目单独指定 Python 版本。这是 Python 开发的最佳实践。

  1. 首先,按照方法二安装 python3.11 和 pip3.11

  2. 为你的项目创建虚拟环境,并直接指定使用 Python 3.11:

    # 直接使用 python3.11 解释器创建虚拟环境
    python3.11 -m venv my_project_venv
  3. 激活虚拟环境:

    source my_project_venv/bin/activate
  4. 激活后,命令行提示符会变化,所有 python 和 pip 命令都会指向虚拟环境内的 3.11 版本,与系统完全隔离。

    (my_project_venv) $ python --version
    Python 3.11.9
  5. 退出虚拟环境:

    deactivate

优点:绝对安全,项目之间环境隔离,无任何冲突。
缺点:需要为每个项目单独设置。

4. 总结与建议

方法优点缺点适用场景
SCL (方法一)安全、简单、官方支持需要手动启用环境大多数情况下的首选,尤其是服务器环境
源码编译 (方法二)灵活,可安装任意版本步骤复杂,有潜在风险需要高度定制化或特定版本的高级用户
虚拟环境 (方法三)最安全,项目隔离每个项目都需配置Python 开发的最佳实践,强烈推荐

最终建议:

    <1> 如果你只是想运行一些需要 Python 3.11 的应用或脚本,使用方法一 (SCL)

    <2> 如果你是一名开发者,请务必使用方法三 (虚拟环境) 来管理你的项目,并使用方法二来安装你需要的 Python 版本作为虚拟环境的基础解释器。

    <3> 尽量避免使用方法二中的 alternatives 来更改全局 python3 命令,除非非常清楚自己在做什么并且能承担后果。

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

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

相关文章

基于RBF-GA的铝/镁异材FSLW工艺参数优化研究

课题&#xff1a;基于RBF-GA的铝/镁异材FSLW工艺参数优化研究 1. 引言 (Introduction) 研究背景与意义&#xff1a; 轻量化需求&#xff1a;铝&#xff08;Al&#xff09;和镁&#xff08;Mg&#xff09;合金是航空航天、新能源汽车等领域实现轻量化的关键材料。实现二者的可靠…

【Prometheus】Prometheus监控Docker实战

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年8月23日 &#x1f47b;擅长领域&#xff1a;运维 目录前言什么是Prometheus和cAdvisorPrometheuscAdvisor部署操作部署cAdvisor部署Prometheus指标说明cpu相关指标内存相关指标磁盘相关指标网络…

2.7 提示词调优编码实战(二)

目录 四,提示词模版优化 - 格式化 4.1 代码示例 4.2 任务描述 4.3 模型输出格式化 4.4 用户输入 4.5 输出结果 四,提示词模版优化 - 格式化 在简单提示词的基础上,我们对提示词模版中各部分进行格式化。包括任务描述增加了相应的字段。 同时对输出增加了更多的定义和…

Kafka如何保证「消息不丢失」,「顺序传输」,「不重复消费」,以及为什么会发生重平衡(reblanace)

前言 上一篇文章总结了kafka为什么快&#xff0c;下面来总结一下&#xff0c;kafka高频的常见的问题。内容有点多&#xff0c;全部看完需要有一定的耐心。 kafka如何保证消息不丢失 Producer端 要保证消息不丢失&#xff0c;第一点要做的就是要保证消息从producer端发送到了…

原子操作汇编实现:原理、流程与代码解析

&#x1f52c; 原子操作汇编实现&#xff1a;原理、流程与代码解析 引用&#xff1a;VC/C Intel x86 内联汇编实现 “Interlocked” 原子变量各种操作 &#x1f31f; 引言&#xff1a;原子操作的重要性 在多线程编程中&#xff0c;原子操作是确保数据一致性的关键机制。本文…

【WRF理论第十九期】内陆湖泊、水体的处理方式

目录 WRF 模型中湖泊模拟概述 湖泊模型(Lake Model)集成 新增湖泊数据支持(如 WUDAPT + MODIS) LAKE_DEPTH Noah-MP + 湖泊模型联合使用 namelist.input 配置说明 WRF 代码更新 参考 论坛-WRF 湖泊模型(WRF-Lake model)与 SST 更新 WRF 模型中湖泊模拟概述 湖泊模型(La…

【渗透测试】SQLmap实战:一键获取MySQL数据库权限

注&#xff1a;所有技术仅用于合法安全测试与防御研究&#xff0c;未经授权的攻击行为属违法犯罪&#xff0c;将承担法律责任。一、SQLmap常规用法注意存放路径&#xff1a;C:\Users\neo\AppData\Local\sqlmap\output1、列出详细过程和数据库列表sqlmap -u http://192.168.61.2…

LeetCode 第464场周赛 第三天

1. 3658 奇数和与偶数和的最大公约数&#xff08;欧几里得&#xff09; 链接&#xff1a;题目链接 题解&#xff1a; 题解时间复杂度O(logmin(a, b))&#xff1a; 获得前n个奇、偶数的总和&#xff0c;由于数列为等差数列&#xff0c;等差数列和公式&#xff1a;(a1 an) * n …

IntelliJ IDEA 集成 ApiFox 操作与注解规范指南

一、IDEA装入Apifox 1.安装Apifox Helper 说明:在 IntelliJ IDEA 中安装 ApiFox Helper 插件。 2.打开Apifox 说明:点击 设置,在菜单中选择 API访问令牌。在弹出的窗口中输入任意名称,并选择令牌的有效期(为了方便,我这里选择了 无期限)。生成令牌后,由于 令牌只能复…

C++---双指针

在C编程中&#xff0c;双指针算法是一种高效的解题思路&#xff0c;其核心是通过设置两个指针&#xff08;或索引&#xff09;遍历数据结构&#xff08;如数组、链表、字符串等&#xff09;&#xff0c;利用指针的移动规则减少无效操作&#xff0c;从而将时间复杂度从暴力解法的…

【LLM】GLM-4.5模型架构和原理

note 文章目录note一、GLM-4.5模型二、Slime RL强化学习训练架构Reference一、GLM-4.5模型 大模型进展&#xff0c;GLM-4.5技术报告,https://arxiv.org/pdf/2508.06471&#xff0c;https://github.com/zai-org/GLM-4.5&#xff0c;包括GLM-4.5&#xff08;355B总参数&#xff…

LLM 中增量解码与模型推理解读

在【LLM】LLM 中 token 简介与 bert 实操解读一文中对 LLM 基础定义进行了介绍&#xff0c;本文会对 LLM 中增量解码与模型推理进行解读。 一、LLM 中增量解码定义 增量解码&#xff08;Incremental Decoding&#xff09;是指在自回归文本生成过程中&#xff0c;模型每次只计…

1.Spring Boot:超越配置地狱,重塑Java开发体验

目录 一、Spring框架&#xff1a;伟大的基石 历史背景与挑战 Spring的革命性贡献 新的挑战&#xff1a;配置地狱 二、Spring Boot&#xff1a;约定大于配置的革命 四大核心特性 1. 快速创建独立应用 2. 自动配置&#xff1a;智能化的魔法 3. 起步依赖&#xff1a;依赖管…

assert使用方法

assert 是 Python 中用来进行 调试 和 验证 的一个关键字&#xff0c;它用于测试一个 条件表达式 是否为真。如果条件为假&#xff0c;assert 会抛出一个 AssertionError 异常&#xff0c;通常带有错误信息。语法&#xff1a;assert condition, "Error message"condi…

【实习总结】快速上手Git:关键命令整理

目录 git的四大工作区域 git首次配置 克隆远程仓库 提交代码到远程仓库 查看文件状态&#xff08;可选&#xff09; 添加文件到暂存区 将暂存区的内容提交到本地仓库 将本地的提交上传到远程仓库 拉取并合并代码 第一种方式 第二种方式 分支管理 查看与创建分支 …

02-开发环境搭建与工具链

第2课&#xff1a;开发环境搭建与工具链 &#x1f4da; 课程目标 掌握DevEco Studio的下载、安装和配置熟悉HMS Core&#xff08;华为移动服务&#xff09;的使用了解鸿蒙模拟器与真机调试环境掌握必备开发工具的使用 &#x1f6e0;️ DevEco Studio环境搭建 2.1 下载与安装…

删掉一个元素以后全为1的最长子数组-滑动窗口

1493. 删掉一个元素以后全为 1 的最长子数组 - 力扣&#xff08;LeetCode&#xff09; Solution #include<iostream> #include<vector> using namespace std;class Solution { public://滑动窗口//动态维护一个窗口&#xff0c;窗口内只能有1个0&#xff0c;记录窗…

【计算机网络 | 第8篇】编码与调制

文章目录通信系统中的编码与调制&#xff1a;从信道基础到信号传输技术一、信道与通信电路&#x1f342;二、三种基本通信方式&#x1f4d6;1. 单向通信&#xff08;单工通信&#xff09;2. 双向交替通信&#xff08;半双工通信&#xff09;3. 双向同时通信&#xff08;全双工通…

当AI遇上终端:Gemini CLI的技术魔法与架构奥秘

"代码不仅仅是指令的集合&#xff0c;更是思想的载体。当AI与终端相遇&#xff0c;会碰撞出怎样的火花&#xff1f;" 在这个AI技术日新月异的时代&#xff0c;Google推出的Gemini CLI无疑是一颗璀璨的明星。它不仅仅是一个命令行工具&#xff0c;更是一个将人工智能无…

ViLU: Learning Vision-Language Uncertainties for Failure Prediction

研究方向&#xff1a;Image Captioning1. 论文介绍本文提出ViLU&#xff08;Vision-Language Uncertainties&#xff09;&#xff0c;一个用于学习视觉语言不确定性量化&#xff08;UQ&#xff09;和检测视觉语言模型故障的事后框架。使用VLMs进行量化&#xff08;UQ&#xff0…