使用-F选项时pyinstaller打包的exe失败,不使用该选项正常
我在用pyinstaller把一个导入了matplotlib.pyplot的Python脚本打包成exe文件。用pyinstaller生成的exe文件在生成一个包含多个文件的目录时运行得很好。但是,当我使用pyinstaller的-F选项来创建一个单独的exe文件时,程序就出错了。出错时报告了两个问题:
警告:文件已经存在,但不应该存在:C:\Users\Vern\AppData\Local\Temp_MEI33442\Include\pyconfig.h
最后两行的错误追踪信息是:
文件 "C:\Users\Vern\Documents\Python\testplot\build\testplot\out00-PYZ.pyz\matplotlib.pyplot",第80行,在 _backend_selection
文件 "C:\PyInstaller\PyInstaller\loader\pyi_importers.py",第409行,在 load_module module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
导入错误:无法导入模块 'PySide.QtCore'
这个导入错误是exe停止运行的地方。
我在一台Windows 7的机器上使用的是Python 2.7.6和pyinstaller 2.1。
当运行pyinstaller时,会生成一些警告信息。它们看起来像这样:
警告:找不到库:QtGui4.dll,这是C:/WinPython/python-2.7.6/Lib/sitepackages/PyQt4/plugins\iconengines\qsvgicon4.dll的依赖项
警告:找不到库:QtSvg4.dll,这是C:/WinPython/python-2.7.6/Lib/sitepackages/PyQt4/plugins\iconengines\qsvgicon4.dll的依赖项
警告:找不到库:QtCore4.dll,这是C:/WinPython/python-2.7.6/Lib/sitepackages/PyQt4/plugins\iconengines\qsvgicon4.dll的依赖项
...还有更多类似的警告,但这里省略了。
这些警告是在使用或不使用-F选项时都生成的,所以我不知道它们是否相关,但看起来很可疑。对于这些问题我不是很懂,请多多包涵。总之,当不使用-F选项时,exe文件运行得很好,即使有这些警告。只有在使用-F选项时才会出错。
我在StackOverflow和谷歌上搜索过,但没有找到解决办法。我希望能使用-F选项生成一个单独的exe文件以便分发。我没有使用pyinstaller的其他选项,也没有对自动生成的spec文件做任何修改。我的其他不导入matplotlib的Python脚本在使用-F选项转换成单个exe文件时运行得很好。
2 个回答
这个问题在这里得到了回答:Pyinstaller QtCore模块导入错误
简单来说,PyInstaller 2.1版本在处理QT时有个小问题,但在开发版本中已经修复了。所以你可以去下载那个版本,或者等到PyInstaller 2.2发布。
我在使用 PyInstaller
打包我的程序时,遇到了 ImportError: could not import module 'PySide.QtCore'
的错误,特别是在使用 --onefile
选项的时候。不过,当我使用 --onedir
选项时就没有问题。尽管在运行时,PySide.QtCore
确实出现在临时目录里。在我的代码中,我是直接导入了 PyQt4,而 PySide 是通过其他模块导入的。从你发的内容来看,你的代码中似乎也同时使用了这两个模块。
在阅读了 这篇文章 后,我尝试在我的配置文件中将 'PySide' 加入排除列表,这样就强制只使用 PyQt4,结果生成的 exe 文件现在运行得很好。排除 PySide 或 PyQt4 可能也对你有帮助。