在捆绑使用PySide创建的窗口时,使用pyinstaller使用MacOSX创建可执行文件时遇到一些问题。名为myapp.py
的最小示例文件:
from PySide import QtGui as QtWidgets
from PySide import QtCore
import sys
class Simple(QtWidgets.QWidget):
def __init__(self):
super(Simple, self).__init__()
button = QtWidgets.QPushButton("Hello")
layout = QtWidgets.QHBoxLayout()
layout.addWidget(button)
self.setLayout(layout)
def create():
app = QtWidgets.QApplication.instance()
if not app:
app = QtWidgets.QApplication(sys.argv)
simple = Simple()
simple.raise_()
simple.show()
app.exec_()
create()
这将创建一个带有标记为“ hello”的按钮的小窗口。
将cd插入myapp.py
文件所在的文件夹后,我使用pyinstaller创建了一个可执行文件:
pyinstaller --onefile myapp.py
这将创建一个可在我的MacBook Pro(Yosemite 10.10.5)上运行的可执行文件。通过虚拟机在ubuntu中运行相同的命令会创建一个成功运行的可执行文件,我也可以在Windows 10中的虚拟Windows机器上运行该命令,该计算机可与Windows10和Windows7成功运行。表达式“成功运行”在这里意味着我可以双击pyinstaller创建的可执行文件,然后使用按钮启动窗口。到目前为止一切顺利。
我在这里不明白的是,用pyinstaller创建的可执行文件在其他Macbook(macOS Sierra 10.12.6)上执行时不会启动窗口。每次我尝试运行可执行文件时,终端错误都会出现以下错误:
ImportError: No module named PyQt4.QtCore
[2794] Failed to execute script pyi_rth_qt4plugins
我已经从头到尾阅读了pyinstaller的手册,并进行了数小时的搜索,但不知道为什么会这样。我的代码不使用PyQt4。实际上,在两台Macbook机器上,我都没有安装PyQt4。在一台机器上,窗口仍然会启动,而在第二台机器上,我得到了所述错误。
warn-myapp.txt读取以下内容:
missing module named PyQt4 - imported by /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyInstaller/loader/rthooks/pyi_rth_qt4plugins.py (optional)
我已经尝试排除该文件并更改该文件中的代码(我知道我不应该这样做,而只是为了在此处解决此问题),但是我仍然遇到在创建文件时遇到的问题可以从PySide窗口执行PyQt4。
我还排除了myapp.spec
文件中并使用--exclude-module
参数的PyQt4模块,但是每次构建可执行文件时都需要PyQt4。
在此阶段,我不确定为什么可执行程序会在一台Macbook上启动,而不在另一台Macbook上启动。有没有人收到关于ImportError
的相同错误消息,并且知道如何解决此问题?
谢谢。