使用PyInstaller构建--onefile时与PyQt的错误
我正在尝试使用 PyInstaller 1.5 来编译一个 PyQt 程序。使用 --onedir(默认选项)时,下面这两个程序都能正常运行,但这样生成的程序文件比较大。我想使用 --onefile 选项,但当我运行生成的单文件应用程序时,出现了以下错误:
Traceback (most recent call last):
File "<string>", line 11, in <module>
File "pyinstaller/PyInstaller/loader/iu.py", line 468, in importHook
raise ImportError("No module named %s" % fqname)
ImportError: No module named PyQt4.QtCore
这个错误在这两种情况下都会出现:
import sys
from PyQt4 import QtCore, QtGui
app =QtGui.QApplication(sys.argv)
window =QtGui.QMainWindow()
window.setCentralWidget(QtGui.QLabel("Hello"))
window.show()
sys.exit(app.exec_())
还有这个:
import sys
import PyQt4.QtCore, PyQt4.QtGui
app = PyQt4.QtGui.QApplication(sys.argv)
window = PyQt4.QtGui.QMainWindow()
window.setCentralWidget(PyQt4.QtGui.QLabel("Hello"))
window.show()
sys.exit(app.exec_())
有没有人知道该怎么解决?
3 个回答
我之前也遇到过同样的问题,使用的是pyinstaller 3.4(python 3.6,PyQt5),最后通过调整一些解决方案成功解决了这个问题,具体可以参考这里和这里。
方法总结如下:
1) 运行“pip install pip==18.1”。一定要使用18.1这个版本,虽然还有更新的版本,但这个版本是关键。完成后可以通过“pip install pip --upgrade”来升级pip。
2) 安装pyinstaller的开发版本:运行“pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz”。
3) 正常运行pyinstaller。
希望这些能帮到你!
对我来说一切正常(Windows 7 64位,Python 2.7 32位),只需将QT目录添加到你的系统路径中,或者在命令行中使用p
选项添加它:
PyInstaller -y -F --distpath="." -p "C:\Python27\Lib\site-packages\PyQt4" test.py
如果你是通过可执行文件安装PyQt,它会自动为你完成这些步骤:
1. 用Pyinstaller打包的时候,--onefile选项生成的文件并不会比--onedir选项小。其实,当你使用--onefile时,它只是创建了一个包装文件,这个文件会把所有内容提取到一个临时文件夹里,然后再运行。
2. Pyinstaller不支持直接用import PyQt4.QtCore, PyQt4.QtGui
这种方式导入,正确的方式是用from PyQt4 import QtCore, QtGui
,这是唯一被支持的方法,具体可以参考这里。
3. 你用的PyQt4版本是什么?是Riverbank的安装包里的GPL版本吗?
4. 你按照步骤操作了吗?比如先运行Makespec.py
,然后再运行Build.py
?