使用PyInstaller打包Python3.5项目时触发six.moves递归深度超限错误
解决PyInstaller打包时six.moves触发的最大递归深度错误
我之前也碰到过PyInstaller处理six.moves模块时的递归深度问题,尤其是在Python3.5环境下,给你几个可行的解决办法:
1. 临时提升Python递归深度阈值
在你的.spec文件最顶部添加代码,手动调高递归限制,PyInstaller在处理模块导入时就不容易触发阈值了:
import sys sys.setrecursionlimit(5000) # 可以根据情况调整到8000左右,不要设置得过于极端 # 原有的spec代码 block_cipher = None a = Analysis(['SegTool.py'], pathex=['consts.py', 'FetalMRI_about.py', 'FetalMRI_mainwindow.py', 'FetalMRI_workspace.py', 'image_label.py', 'main_window.py', 'scan_file.py', 'segment3d_itk.py', 'Shapes.py', 'workspace.py', 'C:\\Users\\Keren Meron\\Documents\\School Work\\Fetal MRI\\FetalSegBrainTool'], binaries=[], datas=[], # ... 保留你原有的其他参数 )
2. 手动指定six.moves为隐藏导入
PyInstaller自动扫描依赖时,对six.moves的动态导入逻辑处理容易出问题,我们直接把它加入hiddenimports,让PyInstaller明确处理这个模块:
修改Analysis部分的参数,添加hiddenimports=['six.moves']:
a = Analysis(['SegTool.py'], pathex=['consts.py', 'FetalMRI_about.py', 'FetalMRI_mainwindow.py', 'FetalMRI_workspace.py', 'image_label.py', 'main_window.py', 'scan_file.py', 'segment3d_itk.py', 'Shapes.py', 'workspace.py', 'C:\\Users\\Keren Meron\\Documents\\School Work\\Fetal MRI\\FetalSegBrainTool'], binaries=[], datas=[], hiddenimports=['six.moves'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False)
3. 升级到兼容Python3.5的PyInstaller版本
如果你用的是较旧的PyInstaller版本,可能存在six.moves处理的bug。Python3.5对应的最后一个稳定PyInstaller版本是3.6,你可以执行以下命令升级:
pip install pyinstaller==3.6
升级完成后,用修改后的.spec文件重新打包尝试。
4. 最后手段:禁用six的自动hook
如果前面的方法都无效,可以尝试排除PyInstaller对six的默认hook,手动管理依赖。打包时添加命令行参数:
pyinstaller --exclude-hook=six SegTool.spec
不过这个方法需要你手动确认所有six相关的依赖都被正确导入,所以优先尝试前面的方案。
内容的提问来源于stack exchange,提问作者Keren Meron
相关产品推荐
相关产品推荐

