pyinstaller打包出错记录
创始人
2024-01-16 21:22:36
0

稍微记录一下最近在liunx上pyinstaller打包出错

目录

  • 稍微记录一下最近在liunx上pyinstaller打包出错
    • 1 号坑 Python3.7.0安装
    • 2号坑 成功打包但是执行失败
  • 小结

后面代码的环境是在Windows子系统下的Ubuntu 20.04下进行的。vscode可以通过,配置WSL来进入环境(如下图)。

在这里插入图片描述

最近有一个需求是要把一个系统部署到某公司服务器上去。要部署的两台服务器分别是Centos、Ubuntu的,里面就是有一些模型使用python写的嘛。模型的调用是通过java的后端项目触发的,这个模型的python环境不好搞,所以要打包成liunx下的可执行文件。本来想着用wine直接也可以触发exe的但是实际上发现还是挺麻烦的,不是很适配总是出现…not found。

我拿到的模型,用的tensorflow的版本是1点几的是比较老的。先来看一下大致用到的哪些包和对应的版本,(注意其中的numpy的版本也不能太高)

image-20221024141520006

为了适应这个tensorflow的版本,需要的python版本不能大于3.8,我自己测试的话3.8的是不行的,3.7和3.6是ok的。然后这个需要对应的pyinstaller的版本是3.4的,版本不对应也会出错。

1 号坑 Python3.7.0安装

安装步骤直接参照这篇 https://blog.csdn.net/zckui/article/details/89821101 步骤还是挺详细的,不过坑也在其中。(这里要注意的是,里面说的创建软连接的时候不要直接修改liunx自带的最好自己创建一个)

关键在那篇博客中的第五步

image-20221024142527124

这里只指定了python编译安装的路径,没有指定别的。本以为是没是的,然后每次执行pyisntaller ...打包的时候到下图所示时
在这里插入图片描述

的时候就报错

在这里插入图片描述

报错的意思差不多是说,自己下的python没有直接跟系统上自带的一些os链接在一起(跟自带的这些so文件版本不匹配)。

这个时候可以依次参考下面两篇博客:

  • 博客1

    这篇的话是针对我们编译时指定的参数的,跟前面的报错信息提示一样,博客中加的参数如下图

在这里插入图片描述

个人建议是

./configure --prefix= $pythonDownloadLocation --enable-shared --enable-ssl   ## 记得要一次性输完,刚开始以为这个直接改里面配置信息的,分#两次输入就不能解决问题

然后再make && make install

  • 博客2

    经过上一步之后,我们就可以在python安装的路径里面找到缺少的那几个文件,然后根据博客2都添加到系统的lib里面去

    在这里插入图片描述

2号坑 成功打包但是执行失败

跨过一号坑后,我们可以成功打包的流程:

Building EXE from EXE-00.toc completed successfully.

看到这个是非常激动的,但是当执行的时候又出了点问题。

astor 报错

错误信息

FileNotFoundError: [Errno 2] No such file or directory: '/tmp/_MEIu22u7n/astor/VERSION'

image-20221024144948056

看了网上别人的一些解决方案和分析。这个其实是astor包里面的问题。

可以按照我下图的标注解决

image-20221024145314439

新增的这个__version__等于多少应该问题不大,保险的话,可以在修改前通过pip list看看这个astor是什么版本的。

编辑之后保存修改,并且重新执行pyisntaller的打包命令。

tensorflow 包中报错

然后出现了tensorflow包里面的报错:

tensorflow.python.framework.errors_impl.NotFoundError: /tmp/_MEIOH1ebc/tensorflow/contrib/bigtable/python/ops/_bigtable.so: cannot open shared object file: No such file or directory

这个其实是,跟前面报错的原因是类似的。应该是包里面引用某个文件的时候用错了路径,pyinstaller在打包的时候会有一个虚拟路径,一般有/tmp ....里面的东西找不到的都是这个问题。然后可以跟着下面这篇文章解决这个问题 文章。

主要参考的回答:

在这里插入图片描述

翻译一下文章中的解决方案,一是要找到所有类似的.so文件,可以通过以下代码进行查看:

import ostsLocation = "/usr/local/python3.7/lib/python3.7/site-packages/tensorflow"tensorflow_binaries = []for dir_name, sub_dir_list, fileList in os.walk(tsLocation): for file in fileList:if file.endswith(".so"):full_file = dir_name + '/' + fileprint(full_file)tensorflow_binaries.append((full_file, '.'))print(*tensorflow_binaries)

输出大致如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MScUFoN0-1666597606845)(https://raw.githubusercontent.com/yuyuyu258963/pic-go-picStore/main/image-20221024152038101.png)]

可以把这些文件路径添加到对应的.spec文件中

image-20221024152154712

添加路径的注意和技巧:

  • 注意添加的格式 ("$path", ".")
  • 注意前面的 /usr/local/python3.7这段路径要换成自己python所在的路径
  • 技巧 可以同vscode上快捷编辑的方式,把前面代码中的输出复制进去然后按住鼠标滚动轮子,选中多行同时进行编辑。

下面我们去修改 tensorflow包中导入这些文件的代码

image-20221024152935124

根据上图的标注,然后修改保存。

然后执行pyinstaller ××××.spec去打包文件。

到这里这个问题应该就解决了,

继续尝试运行打包后的可执行文件,结果出现了:

ModuleNotFoundError: No module named 'sklearn.utils._typedefs'

这个与前面的错误原因不太一样,下面给出一种简单的解决方法。在.spec文件中的hiddenimports中添加缺少的module.

在这里插入图片描述

添加后直接执行pyinstaller ./×××.spec重新执行打包。

小结

之前就打包过多次python,除了系统缺少dll文件外的大部分报错都在这次任务中碰到了。现在想来想学学虚拟环境技术还是很必要的,后面还得学一下docker这样在后面部署的过程中也不必大费周折了。

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...