总结使用pyinstaller打包pyqt5以及pytorch的各种坑

python可以用于打包的库

pyinstaller是打包python的一个很好用的一个库。

下面总结下使用pyinstaller的经验,以及打包pyqt5做的界面和打包深度学习框架pytorch。

一.使用pyinstaller

 

  1. 使用pip installer pyinstaller 安装库即可(不是很好用有时候安装上去还是显示没)  也可以到官网上下载 https://www.pyinstaller.org/downloads.htm    下载tar.gz 格式的解压到一个文件夹,在该路径下打开命令行窗口,使用 pip setup.py install 即可。
  2. win7需要装pywin32,同样使用pip install 安装就行。
  3. 找到需要打包的py文件目录,shift+右键 点击 在此处打开命令行窗口(或者知道路径 使用cd 也可以),此时命令行窗口显示路径与py文件目录一致
  4. 使用命令 pyinstaller XXX.py       当然也有可以选的参数 参数加在两者中间 如打包成一个exe文件 pyinstaller -F XXX.py 以下是参数列表

   5.如果没有错误的话(错误怎么解决下面会讲),命令行窗口最后会显示一个successfully,同时文件同一目录下会生成build和dist文件夹 exe可执行文件在dist文件夹里面。

  6.一般情况下,打包好会发现特别大,原因是写代码是没有注意,有的库只用到了一个小模块,就直接调用一个大模块,这样会造成把一些不需要的也打包进来了。 用到YYY时 使用 from XXX import YYY 而不是直接使用import XXX  。这两种形式代码中调用也不一样。这里拿 sys模块演示 。使用import sys 代码中 调用 argv模块就是 os.argv  而from os import argv 代码中就直接argv就可以了。 如果想查看argv是否是sys中一个小模块可以这样查看

 二.打包pyqt5

1.好像是因为版本兼容性的问题使用pyinstaller打包pyqt5需要在同一目录下放入一些动态链接库。需要C:\ProgramData\Anaconda3\Lib\site-packages\PyQt5\Qt\plugins中的 platforms文件夹,放入到需要打包的同一目录下。

2.使用 pyinstaller -w XXX.py  可以在运行的时候不显示命令行框,只显示ui界面,但是如果出错的话也不会报错,建议先使用pyinstaller -c XXX.py  打包(会显示运行情况,出错会报错),在确定没错的情况下,再使用 -w

3.报错  AttributeError : 'str' object has no attribute 'items'    解决方式  重新安装setuptools (pip uninstall setuptools )

在anconda中卸载setuptools显示有一程序正在占用  解决方法:重启电脑再次尝试 

4报错 Cannot find existing PyQt5 plugin directories      解决办法:建立路径C:\Users\ray\qtb-3.5-64\_b_env\Library\plugins  在里面添加两个文件 pyqt5.dll  pyqt5qmlplugin.dll  (直接按名字搜 看大小跟我的一样应该就是了)

5报错 UnicodeDecodeError:  utf-8 code can't decod byte Oxce  in position x:      解决办法:在这句话上面有报错的py文件的名字路径报错误的位置  找到之后 把里面的decode给改成了  "utf8","ignore"

6.我的问题解决  (实际中只用qt 并没这么多的问题 ) 

三.打包深度学习框架pytorch

1.pytorch出来没多久,打包网上案例不是很多,我们使用pytorch做了一个目标检测的小demo,在打包过程中也是出现各种错误。

2.报错 Maximum recursion depth exceeded    解决方法: 处理太快了我们需要降降速。在同一文件夹下会有一个xxx.spec文件打开之后 在最上面添加两行代码   

import sys

 sys.setrecursionlimit(5000)

保存之后 再次进入命令行窗口  pyinstaller xxx.spec (注意要使用这个代码 不用再添加参数)

3.打包好之后生成了exe文件 并且在原电脑上可以运行另一台没有环境的电脑会报错   script pyi_rth_win32comgenpy 

解决办法:重装pywin32  。在这里如果使用anconda pywin32是很难卸掉的,需要先将pip降级到9.0(pip install "pip<10")再进行卸载pywin32再把pip升级到原版本(pip install pip --upgrade)再安装pywin32(如果pip没法降的话建议直接上官网找个9.0版本的whl格式或者压缩包进行安装,这样是强制性的安装 anconda阻止不了)

4.报错 This applicantion failed to start because it could not find or load the Qt platform plugin "windows"

解决方式: 重装pyqt5 

5.终于解决这些问题可以在其他电脑上打开ui界面了,但是问题还没结束 没法运行.....

遇到这种情况一定要使用 pyinstaller -c xxx.py 进行打包,不然的话是看不到错误在哪的 ,这样没法解决问题的。
错误 :UnicodeDecodeError:  utf-8 code can't decod byte Oxce  in position x:  (同上面的问题5不过这次需要改的文件没那么简单)

可以看出来这些文件都是些 “不能改” 的文件,但是为了解决问题,不管能不能改 都得改,直接找到源代码找到报错的那几行看到有 decode函数的里面直接改成 "utf8","ignore"

6. 报错 TypeError :pic should be PIL Image or ndarray .Got<class 'Nonetype'>

解决方式 :torch有一个transform函数中不接受从opencv打开的图片,只接受对象和PIL打开的照片。检查写的代码把使用opencv打开的图片换成 使用PIL的Images打开

7.终于成功,一天半的时间 盯着命令行窗口 看着各种错误,终于全部解决。

 

 

使用本文章请声明!

  • 15
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
PyInstaller是一个用于打包Python文件的库,可以将Python脚本转换成可执行文件。对于使用PyQt5编写的脚本进行打包,首先需要确保已经安装了PyInstallerPyQt5。然后,可以按照以下步骤进行打包: 1. 打开终端或命令提示符窗口,并切换到包含主函数文件的目录。 2. 运行以下命令:`pyinstaller your_script.py`,其中"your_script.py"是你要打包的脚本的文件名。 3. PyInstaller将开始分析脚本并创建.spec文件,该文件将包含有关打包过程的配置信息。 4. 在.spec文件中,你可以对打包过程进行更多的自定义配置。可以使用文本编辑器打开.spec文件并进行修改。 5. 对于PyQt5脚本,通常需要添加额外的参数来解决特定的问题。例如,如果脚本中使用了Qt的平台插件(例如QtWebEngine),可能需要使用`--add-data`参数来包含这些插件。具体的参数配置可以参考PyInstaller的文档。 6. 修改完.spec文件后,运行以下命令:`pyinstaller your_script.spec`,其中"your_script.spec"是你修改后的.spec文件的文件名。 7. PyInstaller将开始根据.spec文件进行打包。在打包完成后,你将在当前目录中看到一个名为"dist"的文件夹,里面包含了打包后的可执行文件。 需要注意的是,PyInstaller打包过程可能因为项目的复杂性而有所不同。建议在打包前仔细阅读PyInstaller的文档,并根据你的具体需求进行适当的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [pyinstaller打包pyqt5项目总结](https://blog.csdn.net/Sheleon1995/article/details/125041861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [pyinstaller打包pyqt5程序 全过程 超详细](https://blog.csdn.net/okfu_DL/article/details/84566545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值