使用PyInstaller构建--onefile时与PyQt的错误

8 投票
3 回答
20865 浏览
提问于 2025-04-17 08:34

我正在尝试使用 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 个回答

0

我之前也遇到过同样的问题,使用的是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。

希望这些能帮到你!

6

对我来说一切正常(Windows 7 64位,Python 2.7 32位),只需将QT目录添加到你的系统路径中,或者在命令行中使用p选项添加它:

PyInstaller -y -F --distpath="." -p "C:\Python27\Lib\site-packages\PyQt4" test.py

如果你是通过可执行文件安装PyQt,它会自动为你完成这些步骤:

http://sourceforge.net/projects/pyqt/files/

3

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

撰写回答