当前位置: 首页 > news >正文

centos找不到apt-get命令_Centos 使用 pyinstaller 打包踩坑分享

点击上方"可乐python说"关注公众号,点击右上角 "..." 选择"设为星标"第一时间获取最新分享! 249ac0d1030681728eda10caccdac5c6.png

前言

最近,在 Centos 7 虚拟机上面搭建了 Python3 环境、以及虚拟环境,以后需要在此环境中进行打包。

f289ba3db3ba83021f5c06d86e89d1a5.png

今天尝试安装 Pyinstaller ,并进行打包,安装过程非常顺利,执行以下命令即可。
pip3 install pyinstaller
准备测试文件 demo.py ,内容如下:
print("hello python")
但使用以下命令打包测试代码时会报错
pyinstaller -F demo.py
现将具体处理过程记录下来。

报错提示信息

执行打包命令后,报错信息如下:
...前面内容已经省略
 * On Debian/Ubuntu, you would need to install Python development packages
 * apt-get install python3-dev
 * apt-get install python-dev
 * If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)
 * (demo) [root@group demo]# This would mean your Python installation doesn't come with proper library fi                                                                                             les.
>     This usually happens by missing development package, or unsuitable build par                                                                                             ameters of Python installation.
提示的信息大致说,缺少相关动态库 1、如果在 Debian/Ubuntu  环境中,你需要安装 Python 开发包
  • apt get 安装 python3 dev
  • apt get 安装  python dev
2、如果你是自己构建 Python ,请使用 “-enable shared” 重新构建 Python(或者在 Darwin 上使用 --enable framework ) 3、这意味着你的 Python 安装没有正确的库文件,这通常是由于缺少开发包,或者 Python 安装的构建参数不合适而导致的。

第一处报错处理

1、进入 Python 编译目录
cd Python-3.7.2/
2、带上参数 --enable-shared 重新编译
./configure --prefix=/usr/local/python3 --enable-shared  --with-ssl
3、重新安装
make && make install
编译、安装过程非常顺利,很开心,下面检验一下 Python 是否能正常使用 4、运行 python3 ,出现一个新的报错 - error while loading shared libraries
python3
具体报错信息如下:
python3 :error while loading shared libraries :libpython3.7m.so.1.0:cannot open shared object file:No such file or directory.

d91a6c14a00e1396ff706d51d1f434eb.png

第二处报错处理

分析报错信息,运行时链接动态库失败导致的报错 1、查看编译时安装 libpython3.7m.so.1.0 动态库的目录
find /usr -name 'libpython3.6m.so.1.0'
输出如下信息
/usr/local/python3/lib/libpython3.7m.so.1.0
则安装该动态库的目录为 /usr/local/python3/lib 2、使用链接器查看可搜索范围,并没有发现 libpython3.7m.so.1.0
 ldconfig -v | grep python3
执行以下命令也可发现,这个库的指向为 not found
ldd $(which python3)
根据相关文献可知,链接器默认的动态库搜索范围包括  /lib/usr/lib 以及 /etc/ld.so.conf 配置文件中包含的目录,这是我们处理问题的突破口。 3、手动将该库的安装目录 -   /usr/local/python3/lib/ , 添加到 /etc/ld.so.conf
vi /etc/ld.so.conf

编辑后的内容如下:

include ld.so.conf.d/*.conf
/opt/openssl1.0.2r/lib
/usr/local/python3/lib
4、执行 ldconfig 刷新缓存
ldconfig
5、检验命令 python3 ,可正常使用
python3
6、再次使用 pyinstaller 打包测试代码
pyinstaller -F demo.py

果然,打包成功,开心.png

... 以上打包提示信息已省略
20945 INFO: Building EXE from EXE-00.toc completed successfully.
7、进入当前目录下的 dist 目录中,执行刚刚生成的打包文件 demo
cd dist/
./demo
成功输出 hello python ,至此所有报错问题已全部处理,下面可开心愉快地对项目进行打包咯。

总结

  1. 之前我们编译的方式,没有加上 --enable-shared  参数,为 静态编译,而打包时又需要使用到一些动态库,所以我们调整为使用 动态编译 的方式,重新编译了 Python3 环境,成功处理了第一处报错。
  2. 编译后,运行 python3 命令时找不到我们安装的相关动态库,因为系统只会在默认的范围中寻找,我们手动将动态库的安装目录添加到 /etc/ld.so.conf 文件中,成功处理了第二处报错。
  3. 添加动态库安装目录后,记得刷新一下缓存。
  4. 原创文章已全部更新至 Github :https://github.com/kelepython/kelepython
  5. 本文永久博客地址:https://kelepython.readthedocs.io/zh/latest/c02/c02_01.html
  6. 环境的安装,往往会遇到一些坑,不过只要我们脚踏实地,认真记录好自己工作、学习中遇到的一些小问题,积累下来,将会变成一笔宝贵的财富。
历史文章推荐阅读 集合 (Set) | 一山不容二虎的 Python 数据类型 数字(Number) | 最贴近生活的 Python 数据类型 如果 (If) | Python 中的条件控制语句详解 基础 | Python 循环语句详解 不限次数网课查题平台分享,支持语音查题 Python 中的可迭代对象、迭代器与生成器 扫码关注公众号 获取更多分享 51b67beeb575cdbbf8677ec7d41414eb.png 如果觉得还不错,点个"在看"鼓励一下!

相关文章:

  • python cv2 imshow_Python-OpenCV 2. 图像基本操作
  • wild magic3 渲染状态更新和scene绘制
  • 跨域获取后台数据undefined_拨号跨域问题
  • 软件文档归类汇总
  • java aes加密_行走江湖,安全第一 | 尚硅谷Java安全密码学教程发布!
  • 今天是最后的悠闲。
  • kernel编译 openwrt_OpenWRT实践3:Click Modular Router
  • 关于Mercurial(Hg)
  • python异常处理机制_错误处理
  • 十进制浮点数的表示方法
  • python工作可以做什么菜_python3 特色菜
  • Evolution3D 的svn搬迁。
  • python网络自动化实例_python 自动化之路 day 08_2 网络编程
  • 新年了。今年Evolution3D要做的事
  • python组合数计算cmnn_求计算机大佬解答python题
  • 2019年如何成为全栈工程师?
  • E-HPC支持多队列管理和自动伸缩
  • Fabric架构演变之路
  • PaddlePaddle-GitHub的正确打开姿势
  • Python 反序列化安全问题(二)
  • Python学习之路16-使用API
  • Python语法速览与机器学习开发环境搭建
  • SOFAMosn配置模型
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 复杂数据处理
  • 微服务入门【系列视频课程】
  • 微信开放平台全网发布【失败】的几点排查方法
  • 以太坊客户端Geth命令参数详解
  • 找一份好的前端工作,起点很重要
  • 智能合约开发环境搭建及Hello World合约
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 1.Ext JS 建立web开发工程
  • mysql面试题分组并合并列
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​虚拟化系列介绍(十)
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (九)信息融合方式简介
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (轉貼) UML中文FAQ (OO) (UML)
  • .net 4.0发布后不能正常显示图片问题
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core 6 redis操作类
  • .NET Core中Emit的使用
  • .Net6 Api Swagger配置
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件