构建python3.8的docker镜像,以便解决: dlopen: /lib64/libc.so.6: version `GLIBC_2.28‘

1、简介

在使用pyinstaller打包工具打包应用为二进制的时候,出现了一个“”: dlopen: /lib64/libc.so.6: version `GLIBC_2.28'”的问题

2、解决方案

2.1、问题原因

由于使用了官方提供的镜像,而官方提供的镜像编译的机器上、glibc的版本过高,完整报错如下:

[PYI-13721:ERROR] Failed to load Python shared library '/tmp/_MEIs9j8Ws/libpython3.8.so.1.0': dlopen: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /tmp/_MEIs9j8Ws/libpython3.8.so.1.0)

在排查时,可以通过以下命令查看glibc的版本

ldd --version

如果在glibc 2.28版本中构建的二进制,在glibc 2.17版本的机器中执行,那么就会出现问题,所以这个时候就需要自己构建python3版本的容器(python的版本,取决于自己编写代码的版本)

2.2、 解决方式

 2.2.1 宿主机中安装python
# 由于 centos中的源被禁了,下载阿里的源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理缓存、创建新的缓存
yum clean all
yum makecache
# 更新本机的库
yum -y update
# 安装python编译安装时候的依赖
yum -y install zlib-devel bzip2-devel openssl-devel openssl-static ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel lzma gcc wget make
# 进入 /usr/local 
cd /usr/local
# 下载python的版本
wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tar.xz
# 解压python的安装包
tar -xvJf Python-3.8.10.tar.xz
# 创建要安装python的目录
mkdir /usr/local/python3
# 进入解压出来的安装包
cd /usr/local/Python-3.8.10
# --prefix用来指定安装的目录,也就是上一步已创建的目录/usr/local/python3
./configure --prefix=/usr/local/python3 --enable-shared
# --enable-shared 是为了启用共享库的生成,如果不生成它,在使用pyinstaller的时候,会报错
# 源码安装
make && make install
# 创建软连接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
# 更新系统的共享库缓存,确保程序运行时能够正确找到所需的动态链接库
echo "/usr/local/python3/lib/" >> /etc/ld.so.conf
ldconfig

 执行上面的命令后,python3.8.10版本编译安装成功,接下来可以通过创建虚拟环境等命令使用python了

cd /myproject-code
python3 -m venv myvenv
# 激活python虚拟环境
source myvenv/bin/activate

#使用完成后,可以使用如下命令退出虚拟环境
deactivate
2.2.2 通过dockerfile、构建python容器

第一步:获取基础镜像

docker pull centos:centos7.9.2009
# 如果镜像无法下载,执行以下命令(注:如果daemon.json存在手动添加)
cat > /etc/docker/daemon.json << EOF
{
    "experimental": true,
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://hub.rat.dev",
        "https://docker.1panel.live"
        ]
}
EOF

systemctl restart docker

第二步:编写dockerfile 如下:

FROM centos:centos7.9.2009
LABEL author=ncjx
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
    yum clean all && \
    yum makecache && \
    yum -y update && \
    yum -y install zlib-devel bzip2-devel openssl-devel openssl-static ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel lzma gcc wget make && \
    cd /usr/local && \
    wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tar.xz && \
    tar -xvJf Python-3.8.10.tar.xz && \
    mkdir /usr/local/python3 && \
    cd /usr/local/Python-3.8.10 && \
    ./configure --prefix=/usr/local/python3 --enable-shared && \
    make && make install && \
    ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3 && \
    ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3 && \
    echo "/usr/local/python3/lib/" >> /etc/ld.so.conf && \
    ldconfig
WORKDIR /home
CMD ["/usr/sbin/init"]

第三步:构建镜像

docker build -f dockerfile -t ncjx-python3.8:latest .

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音频3A测试--AEC(回声消除)测试

一、测试前期准备 一台录制电脑:用于作为近段音源和收集远端处理后的数据; 一台测试设备B:用于测试AEC的设备; 一个高保真音响:用于播放设备B的讲话; 一台播放电脑:用于模拟设备A讲话,和模拟设备B讲话; 一台音频处理器(调音台):用于录制和播放数据; 测试使用转接线若…

MATLAB程序介绍,三维环境下的IMM(交互式多模型),使用CV和CT模型,EKF作为滤波

本文所述的MATLAB代码为三维的交互式多模型&#xff08;IMM&#xff09;滤波器&#xff0c;结合了匀速直线运动&#xff08;CV模型&#xff09;和匀速圆周运动&#xff08;CT模型&#xff09;的状态估计。使用扩展卡尔曼滤波&#xff08;EKF&#xff09;来处理状态更新与观测数…

upload-labs详解(1-12)文件上传分析

目录 uploa-labs-main upload-labs-main第一关 前端防御 绕过前端防御 禁用js Burpsuite抓包改包 upload-labs-main第二关 上传测试 错误类型 upload-labs-env upload-labs-env第三关 上传测试 查看源码 解决方法 重命名&#xff0c;上传 upload-labs-env第四关…

第一:goland安装

GOPROXY (会话临时性)&#xff0c;长久的可以在配置文件中配置 go env -w GOPROXYhttps://goproxy.cn,direct 长久的&#xff0c;在~/.bashrc文件中添加&#xff1a; export GOPROXYhttps://goproxy.cn,direct &#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d…

ASP使用EFCore和AutoMapper添加导航属性数据

目录 一、不使用自增主键 &#xff08;1&#xff09;下载AutoMapper的nuget包 &#xff08;2&#xff09;配置映射规则 &#xff08;3&#xff09;配置MappingProfile文件 &#xff08;4&#xff09;控制器编写添加控制器 &#xff08;5&#xff09;测试 二、使用自增主…

什么是Jmeter? Jmeter工作原理是什么?

第一篇 什么是 JMeter&#xff1f;JMeter 工作原理 1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源…

汽车零部件厂如何选择最适合的安灯系统解决方案

在现代制造业中&#xff0c;安灯系统作为一种重要的生产管理工具&#xff0c;能够有效提升生产线的异常处理效率&#xff0c;确保生产过程的顺畅进行。对于汽车零部件厂来说&#xff0c;选择一套适合自身生产需求的安灯系统解决方案尤为重要。 一、安灯系统的核心功能 安灯系统…

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装&#xff08;七&#xff09;&#xff1a;Anaconda3 打开Anaconda官网&#xff0c;在右侧处填写邮箱&#xff08;要真实有效&#xff01;&#xff09;&#xff0c;然后Submit。会出现如图示的Success界面。 进入填写的邮箱&#xff0c;有一封Ana…

为解决局域网IP、DNS切换的Windows BAT脚本

一、背景 为解决公司普通人员需要切换IP、DNS的情况&#xff0c;于是搞了个windows下的bat脚本&#xff0c;可以对有线网络、无线网络进行切换设置。 脚本内容 echo off title 多网络接口IP切换工具:menu cls echo echo 请选择要配置的网络接口: echo echo 1. 有线网络&am…

【OMCI实践】wireshark解析脚本omci.lua文件(独家分享)

引言 omci.lua文件是Wireshark的OMCI协议解析插件的核心组件。它配合BinDecHex.lua&#xff0c;可以解析OMCI协议的数据包&#xff0c;提取出消息类型、受管实体标识、受管实体属性等关键信息&#xff0c;并以人类可读的形式显示在Wireshark的解码视图中&#xff0c;方便研发人…

JPA编程,去重查询ES索引中的字段,对已有数据的去重过滤,而非全部字典数据

一、背景 课程管理界面&#xff0c;查询前&#xff0c;需要把查询元数据给出。 学科列表、学段列表和分类列表&#xff0c;我们把它定义为查询元数据。 一般的业务需求是&#xff1a; 系统维护好多个字典&#xff0c;比如学科、学段等等&#xff0c;相当于属性库。 但是&…

vue3与react、 react hooks

一、Vue3新特性&#xff1a;setup、ref、reactive、computed、watch、watchEffect函数、生命周期钩子、自定义hooks函数、toRef和toRefs、shallowReactive 与 shallowRef、readonly 与 shallowReadonly、toRaw 与 markRaw、customRef、provide 与 inject、Fragment、Teleport、…

LINUX网络基础 [二] - 网络编程套接字,UDP与TCP

目录 前言 一. 端口号的认识 1.1 端口号的作用 二. 初识TCP协议和UDP协议 2.1 TCP协议 TCP的特点 使用场景 2.2 UDP协议 UDP的特点 使用场景 2.3 TCP与UDP的对比 2.4 思考 2.5 总结 三. 网络字节序 3.1 网络字节序的介绍 3.2 网络字节序思考 四. socket接口 …

基于SpringBoot+Vue的校园美食分享平台的设计与实现

获取源码&#xff1a;SpringBootVue的校园美食分享平台: 系统角色上分为管理员以及普通用户进行实现&#xff0c; 管理员主要负责整个网站后台的维护管理&#xff0c;包括首页、学校管理、美食类型管理、餐厅管理、美食分享管理、美食评论管理、系统信息、用户管理、角色管理和…

WPS条件格式:B列的值大于800,并且E列的值大于B列乘以0.4时,这一行的背景标红

一、选择数据区域 选中需要应用条件格式的区域&#xff08;例如A2:E100 &#xff09;。 二、打开条件格式 点击“开始”选项卡&#xff0c;选择“条件格式” > “新建规则”。 三、选择规则类型 选择“使用公式确定要设置格式的单元格”。 四、输入公式 在公式框中输入以…

自由学习记录(42)

可能会出现到后面没有教程可以看&#xff0c;走不动&#xff0c;&#xff0c;但还是尝试吧 过程远比想象的要多 那连Live2d的这些脚本怎么控制的都要了解一下 ------------ 文件类型和扩展名 | 编辑手册 | Live2D Manuals & Tutorials 全部导入之后 在这下载SDK Live2D…

结构型模式---享元模式

概念 享元模式是一种结构型设计模式&#xff0c;他摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;让你能在有限的内存容量中载入更多对象。享元模式将原始类中的数据分为内在状态数据和外在状态数据。 内在状态&#xff1a;就…

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;SAM 文件 & Windows 本地认证流程 0x0101&#xff1a;SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的&#xff0c;在登录 Windows 的时候&am…

类和对象—多态—案例2—制作饮品

案例描述&#xff1a; 制作饮品的大致流程为&#xff1a;煮水-冲泡-倒入杯中-加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作产品基类&#xff0c;提供子类制作咖啡和茶叶 思路解析&#xff1a; 1. 定义抽象基类 - 创建 AbstractDrinking 抽象类&#xff0c;该类…

YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及

YOLOv12 是“你只看一次”&#xff08;You Only Look Once, YOLO&#xff09;系列的最新版本&#xff0c;于 2025 年 2 月发布。它引入了注意力机制&#xff0c;提升了检测精度&#xff0c;同时保持了高效的实时性能。在保持速度的同时&#xff0c;显著提升了检测精度。例如&am…