pyinstaller: отсутствует модуль с именем PyQt4 только при создании исполняемого файла на MacOS - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть проблема с созданием исполняемого файла в MacOSX с использованием pyinstaller, когда дело доходит до связывания окна, созданного с помощью PySide.Файл минимального примера с именем 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() 

Это создает небольшое окно с одной кнопкой, которая помечена как «привет».Я создаю исполняемый файл с помощью pyinstaller после того, как cd'ed в папку, в которой находится файл myapp.py:

pyinstaller --onefile myapp.py

Это создает исполняемый файл, который работает на моем MacBook Pro (Yosemite 10.10.5).Выполнение той же команды в Ubuntu через виртуальную машину создает исполняемый файл, который успешно выполняется, и я также могу запустить команду на виртуальной машине Windows в Windows 10, которая успешно работает с 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кажется, всегда требуется.

Я также исключил модули PyQt4 в файле myapp.spec и использовал аргумент --exclude-module, но каждый раз, когда PyQt4 требуется при сборке исполняемого файла.

На этомна этапе я не уверен, почему исполняемый файл запускается на одном MacBook, но не на другом MacBook.Кто-нибудь когда-нибудь получал такое же сообщение об ошибке ImportError и знает, как это решить?

Заранее спасибо.

...