解决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文件可以正常运行。
在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
当使用PyInstaller打包Python脚本时,有时会出现"ImportError: numpy.core.multiarray failed to import"错误。这个错误通常是由于PyInstaller打包过程中无法正确导入NumPy库的multiarray模块引起的。这可能是由于PyInstaller没有正确处理NumPy库的依赖关系导致的。 解决这个问题有几种方法可以尝试: 方法1: 在.spec文件中添加对NumPy库的引用 通过编辑生成的.spec文件,可以手动添加对NumPy库的引用。在.spec文件的"hiddenimports"部分,添加一行"numpy.core.multiarray",然后重新运行PyInstaller命令进行打包。 方法2: 使用--hidden-import参数指定隐藏的导入 在运行PyInstaller命令时,可以使用--hidden-import参数来指定隐藏的导入。例如,可以运行以下命令: ``` pyinstaller --hidden-import=numpy.core.multiarray your_script.py ``` 方法3: 更新NumPy库 尝试更新NumPy库到最新版本,有时这可以解决导入错误的问题。可以使用以下命令升级NumPy库: ``` pip install --upgrade numpy ``` 方法4: 检查环境变量和路径设置 确保您的环境变量和路径设置正确,以便Python可以找到正确的NumPy库。检查您的Python环境变量和路径设置,并确保它们指向正确的NumPy库的位置。 根据您的具体情况,尝试以上几种方法中的一种或多种,应该可以解决"ImportError: numpy.core.multiarray failed to import"错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]](https://blog.csdn.net/zhongkeyuanchongqing/article/details/126217893)[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_1"}}] [.reference_item style="max-width: 50%"] - *2* [报错ImportError: numpy.core.multiarray failed to import in cv2 / matplotlib / pyinstaller / pytorch](https://blog.csdn.net/weixin_46378710/article/details/127336185)[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_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值