PyCharm打包Python为.exe时出现ImportError: cannot import name _remove_dead_weakref
ImportError: cannot import name _remove_dead_weakref的问题 我之前也碰到过完全一样的报错!这个问题几乎都是因为py2exe版本与Python版本不兼容导致的,尤其是在使用Python 2.7系列版本时更容易出现。先把你遇到的错误贴出来方便大家对照:
Traceback (most recent call last):
File "E2Tools.py", line 17, in
File "E2Tools.py", line 17, in
File "zipextimporter.pyc", line 82, in load_module
File "zipextimporter.pyc", line 82, in load_module
File "logging_init_.pyc", line 26, in
File "zipextimporter.pyc", line 82, in load_module
File "weakref.pyc", line 14, in
ImportError: cannot import name _remove_dead_weakref
下面是几个经过验证的解决方法,按顺序尝试:
安装兼容版本的py2exe
如果你用的是Python 2.7,不要安装最新版的py2exe,而是安装专门适配Python2.7的稳定版本:pip uninstall py2exe pip install py2exe==0.6.9这个版本是目前已知对Python2.7支持最完善的,能避免很多内置模块的导入问题。
调整setup.py的打包配置
如果升级py2exe后还是报错,可以在你的打包配置文件setup.py中添加模块排除/包含规则,强制py2exe正确处理weakref相关模块:from distutils.core import setup import py2exe setup( console=['E2Tools.py'], # 若是GUI程序则替换为windows=['E2Tools.py'] options={ "py2exe": { "excludes": ["_remove_dead_weakref"], "includes": ["weakref", "logging"] } } )清理打包缓存后重新构建
有时候之前打包生成的build和dist文件夹里的缓存文件会干扰新的打包过程,先删除这两个文件夹,再重新运行打包命令:# Linux/macOS rm -rf build dist # Windows命令行 rmdir /s /q build dist # 重新打包 python setup.py py2exe确认Python版本一致性
确保你在PyCharm中使用的Python解释器是Python2.7(这个错误基本只出现在Python2.7+py2exe的场景),不要不小心切换到Python3环境,否则会出现各种奇怪的导入错误。
内容的提问来源于stack exchange,提问作者py2exe

