受老师委托,写一个表格转换word文档的小程序,并打包发布,前期业务实现倒未遇到太多问题,基本上 可以满足需求,只是最后使用Pyinstaller打包生成exe可执行文件的时候遇到了众多问题,下面主要把这次遇到的问题以及踩到的坑记录一下,免得下次继续踩坑
安装好pyinstaller就可以在打包的目录下面执行下面命令
pyinstaller options XXX.py
常用参数介绍 options
原因是pandas是c源码,而pyInstaller找不到pandas的代码,就算你是-p /lib/site-packages还是不行。
解决方法:
在./Lib/site-packages/PyInstaller/hooks下,新建一个文件名为hook-pandas.py。写入以下内容并保存。
hiddenimports = ['pandas._libs.tslibs.timedeltas',
'pandas._libs.tslibs.nattype',
'pandas._libs.tslibs.np_datetime',
'pandas._libs.skiplist']
然后这样可能还是不会成功
在打包的时候再修改下命令
pyinstaller --clean --win-private-assemblies -F -w main.py --hiddenimport=pandas._libs.tslibs.timedeltas
生成后修改spec文件
在specs中修改,然后重新用specs生成exe
hiddenimport=[
"pandas","pandas._libs.tslibs.np_datetime"]
然后pyinstaller -F main.spec就行
具体解决方案参考
此篇博文
即可解决此问题
如果要打包那种操作word的文件代码,用pyinstaller工具把使用到python-docx库的脚本打包成exe可执行文件后,双击运行生成的exe文件,报错:
ocx.opc.exceptions.PackageNotFoundError:
解决方案
找到python-docx包安装路径下的一个名为default.docx的文件,
把找到的default.docx文件复制到我的py脚本文件所在的目录下。
修改脚本中创建Document对象的方式:
从原来的创建方式:
document = Document()
修改 为
document = Document(docx=os.path.join(os.getcwd(), 'default.docx'))
再次用pyinstaller工具打包脚本为exe文件
把default.docx文件复制到与生成的exe文件相同的路径下,再次运行exe文件,顺利运行通过,没有再出现之前的报错,问题得到解决。
本解决方案原博文请见
解决word文件打包问题
在生成的spec文件中 添加
a.datas += [('bg_image.gif','E:\\excel_to_doc\\image\\bg_image.gif','DATA')]
即可解决
若运行还报错找不到相关依赖资源文件的话,多半是相对路径的问题,将相关 的资源文件放到与exe文件同级目录下即可。
基本上 解决此次打包软件所遇到的问题。