У меня есть проблема с созданием исполняемого файла в 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
и знает, как это решить?
Заранее спасибо.