manylinux_2_17_x86_64是什么东西?如何升级到manylinux_2_28_x86_64?

news/2025/3/4 15:46:16/

一、什么是manylinux_2_17_x86_64?

manylinux_2_17_x86_64是Python生态中用于标识Linux平台二进制兼容性的标准标签,其核心目标是确保编译生成的Python扩展包(如.whl文件)能够在多种Linux发行版上运行。它的命名规则与底层系统库版本密切相关:

  1. 核心依赖
    manylinux_2_17对应的是glibc 2.17的最低兼容要求。这意味着使用该标签的二进制包,必须兼容基于glibc 2.17及以上版本的Linux系统(例如CentOS 7、Ubuntu 16.04等)。

  2. 应用场景
    当开发者通过auditwheel工具打包Python扩展时,若系统依赖库版本未超出glibc 2.17的支持范围,生成的包会被标记为manylinux_2_17_x86_64。这类包可兼容绝大多数主流Linux发行版,避免用户因环境差异导致安装失败。

  3. 与旧标准的区别
    相比早期manylinux1(基于glibc 2.5)和manylinux2010(glibc 2.12),manylinux_2_17支持更高版本的系统库,同时通过动态链接库的向下兼容性保障跨发行版运行能力。


二、为何需要升级到manylinux_2_28_x86_64?

随着Linux系统库的更新,若Python扩展依赖更高版本的库(例如glibc 2.28),原有的manylinux_2_17标签将无法满足需求。典型的升级场景包括:

  • 需要支持新硬件特性(如AVX-512指令集)
  • 依赖新版系统库功能(如OpenSSL 3.0)
  • 兼容基于glibc 2.28的系统(如Ubuntu 20.04、CentOS 8 Stream等)

三、升级到manylinux_2_28_x86_64的步骤

步骤1:升级系统基础库

升级的核心是更新glibc到2.28版本。以下是关键操作流程(以CentOS为例):

  1. 安装依赖工具链

    yum install -y bison make gcc
    
  2. 编译安装gcc 8.2
    glibc 2.28要求编译器支持C11标准,需升级gcc:

    tar xf gcc-8.2.0.tar.gz
    cd gcc-8.2.0
    ./contrib/download_prerequisites  # 下载依赖库
    mkdir build && cd build
    ../configure --prefix=/usr/local/gcc-8.2.0 --enable-languages=c,c++
    make -j8 && make install
    export PATH=/usr/local/gcc-8.2.0/bin:$PATH  # 更新环境变量
    
  3. 编译安装glibc 2.28

    tar xf glibc-2.28.tar.gz
    mkdir build && cd build
    ../configure --prefix=/usr --disable-profile --enable-add-ons
    make -j8 && make install
    strings /lib64/libc.so.6 | grep GLIBC  # 验证版本
    

步骤2:构建Python扩展包

在升级系统库后,需通过工具链生成符合新标准的包:

# 使用auditwheel重新打包
auditwheel repair --plat manylinux_2_28_x86_64 your_package.whl# 检查输出标签
unzip -l repaired_package.whl | grep manylinux

步骤3:验证兼容性

通过Docker容器测试兼容性:

docker run --rm -v $(pwd):/data quay.io/pypa/manylinux_2_28_x86_64 \/bin/bash -c "pip install /data/repaired_package.whl && pytest"

四、注意事项

  1. 系统稳定性
    glibc是Linux核心库,升级后需全面测试系统服务(如网络、文件操作)的兼容性。
  2. 依赖链管理
    若使用Conda或虚拟环境,需确保所有依赖库(如GDAL、OpenCV)同步升级至支持glibc 2.28的版本。
  3. 多平台兼容性
    若需同时支持旧系统,可采用分发包策略,为不同manylinux标准生成多个.whl文件。

通过上述步骤,开发者既能利用新系统库的特性,又能确保Python扩展包在广泛Linux环境中的兼容性。如需更详细的构建脚本示例,可参考GDAL多平台编译实践。


http://www.ppmy.cn/news/1576572.html

相关文章

双指针刷题和总结

文章目录 双指针LeetCode反转字符串题目题解代码 删除有序数组中的重复项 II题目题解代码 除字符串中的所有相邻重复项题目题解代码 删除有序数组中的重复项题目题解代码 蓝桥杯拔河题解代码 双指针 1. 同向双指针:两个指针从同一侧开始,按照相同的方向移动。通常用…

字符串--子串匹配

下面给出了子串匹配问题的模板,预处理结束后的代码根据题意编写 dp 预处理目的:得到26个字母在字符串t中首次出现的位置 数组元素表示从从位置 i 开始往后字符 j 第一次出现的位置 class Solution {public boolean isSubsequence(String s, String t)…

【Python】使用库

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:能使用Python一些相关的库。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:P…

rust基础-宏与方法之间的区别

宏(Macros) vs 方法(Methods) 区别方法(Methods)宏(Macros)定义方式在 impl 块中定义,绑定到具体类型。通过 macro_rules! 或过程宏定义,生成代码。调用时机…

算法--贪心

贪心 原理经典例题[860. 柠檬水找零](https://leetcode.cn/problems/lemonade-change/description/)[2208. 将数组和减半的最少操作次数](https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/description/)[179. 最大数](https://leetcode.cn/problems/large…

Python 如何实现烟花效果的完整代码

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

萤石云+DeepSeek,云边融合助力音视频AI新突破

​过去几周,全世界的人们短时间内感受到了DeepSeek卷起的AI风暴力量,在迎接大模型无所不能的震撼时,各行各业也进入“深度思考”模式,以期点亮自身行业的智慧树。 DeepSeek已在教育、金融、家居等海量场景展现出广泛的应用潜力…

deepseek+mermaid【自动生成流程图】

成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…