解决pyinstaller打包mayavi出现unhandled exception:traitsui.toolkits的问题

折腾过程

经过一个多星期的反复折腾,尝试过使用pyinstaller、cx_freeze等不同的打包方式,也尝试过安装旧版的Mayavi、traits等,打包后的exe文件仍然不停的报错,始终运行不起来
错误1:

RuntimeError: No pyface.toolkits plugin found for toolkit null

错误2:
在这里插入图片描述

解决方案:

最终还是使用pyinstaller打包成功,包的版本也都是当前的最新版本,不需要回退到旧版本。

1.我的环境

win10 64位
python 3.8.0
mayavi-4.7.4
numpy-1.22.2
pyface-7.4.0
traits-6.3.2
vtk-9.1.0
pyinstaller-4.9

2.关键步骤
尝试打包之后,都会存在一个xxx.spec的文件,将自己的脚本文件与该spec文件都移动到python的安装目录下的Lib\site-packages,如图,我的python是安装在C盘的,红框框起来的分别为我的脚本文件和spec文件。
在这里插入图片描述
spec文件具体内容如下:

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['ball4.py'],
             pathex=[],
             binaries=[
			 ('traitsui', 'traitsui'),('traitsui-7.2.1.dist-info','traitsui-7.2.1.dist-info'),
			 ('pyface', 'pyface'),('pyface-7.4.0.dist-info','pyface-7.4.0.dist-info'),
			 ('wx', 'wx'),('wxPython-4.1.1.dist-info','wxPython-4.1.1.dist-info'),
			 ('traits', 'traits'),('traits-6.3.2.dist-info','traits-6.3.2.dist-info'),
			 ('numpy', 'numpy'),('numpy-1.22.2.dist-info','numpy-1.22.2.dist-info'),
			 ('mayavi', 'mayavi'),('mayavi-4.7.4.dist-info','mayavi-4.7.4.dist-info'),
			 ('apptools', 'apptools'),('apptools-5.1.0.dist-info','apptools-5.1.0.dist-info'),
			 ('vtk-9.1.0.dist-info','vtk-9.1.0.dist-info'),
			 ('tvtk','tvtk'),
			 ('vtkmodules','vtkmodules'),
			 ],
             datas=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='ball4',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

关键部分就是在binaries[]中将主要的几个包手动引入进来,注:我是将所有的包都直接安装在了python主体目录下,没有安装在virtualenv虚拟环境中,所以这几个主要的包都在当前和脚本同一目录下,可以直接引入。
如果是需要在虚拟环境中打包的话,可以尝试在pathex中把自己电脑上python目录下的Lib\site-packages加进入,例pathex=[‘C:\Python\Python38\Lib\site-packages’],binaries[]中引入的包改成对应的目录,但是本人未验证过该方式,不确定是否可行。

最后在当前目录使用打包命令,直接使用spec文件进行打包
pyinstaller -F -w xxx.spec

打包成功后,在当前目录dist文件中,点击exe文件可以正常运行。
在这里插入图片描述

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值