pyinstaller:仅在MacOS上创建可执行文件时

时间:2018-12-10 20:33:09

标签: pyqt4 pyinstaller importerror

在捆绑使用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的相同错误消息,并且知道如何解决此问题?

谢谢。

0 个答案:

没有答案