Сбой LSOpenURLsWithRole() с ошибкой -10810 для файла /Users/gb/myapp/dist/MyApplication.app

#python-3.x #macos #pyinstaller

#python-3.x #macos #pyinstaller

Вопрос:

Окружающая среда:

Python 3.8

Pyqt5

Mac OS X Catalina 10.15.6

Я пытаюсь скомпилировать свою программу на python в приложении Mac OS. Я получаю это сообщение об ошибке при открытии приложения:

 (base) gb@MacBookGB % open dist/MyApplication.app                           
LSOpenURLsWithRole() failed with error -10810 for the file /Users/gb/myapp/dist/MyApplication.app.
  

Я проверил, что файлы могут быть выполнены:

 ld -la dist/
drwxr-xr-x@   4 gb  staff   128 26 aoû 20:27 .
drwxr-xr-x@ 223 gb  staff  7136 26 aoû 20:44 ..
-rw-r--r--@   1 gb  staff  6148 26 aoû 21:04 .DS_Store
drwxr-xr-x@   3 gb  staff    96 26 aoû 20:18 MyApplication.app

ld -la dist/MyApplication.app/Contents/Mac OS/
total 7016
drwxr-xr-x@ 4 gauthierbtz  staff      128 26 aoû 20:18 .
drwxr-xr-x@ 7 gauthierbtz  staff      224 26 aoû 20:18 ..
-rwxr-xr-x@ 1 gauthierbtz  staff    30048 26 aoû 20:18 PhoneBot_small
-rwxr-xr-x@ 1 gauthierbtz  staff  3557260 26 aoû 20:18 python
  

Поэтому я искал везде в Интернете, чтобы найти решение, но ничего не сработало.
Поскольку я знаю, что Qt5 может создавать проблемы при компиляции, я выполнил поиск и нашел вашу статью:
[https://doc.qt.io/qtforpython/deployment-pyinstaller.html ] (URL ссылки)

Я решаю скомпилировать ваш код на python, показанный в этой статье.

 import sys
import random
from PySide2.QtWidgets import (QApplication, QLabel, QPushButton,
                               QVBoxLayout, QWidget)
from PySide2.QtCore import Slot, Qt

class MyWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
            "Hola Mundo", "Привет мир"]

        self.button = QPushButton("Click me!")
        self.text = QLabel("Hello World")
        self.text.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)
        self.setLayout(self.layout)

        # Connecting the signal
        self.button.clicked.connect(self.magic)

    @Slot()
    def magic(self):
        self.text.setText(random.choice(self.hello))

if __name__ == "__main__":
    app = QApplication(sys.argv)

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec_())
  

Затем я запускаю команду:

 pyinstaller --name="MyApplication" --windowed MyApp.py
  

И я получаю точно такую же проблему :

 LSOpenURLsWithRole() failed with error -10810 for the file /Users/gb/myapp/dist/MyApplication.app.
  

Интересно, кто-нибудь уже сталкивался с этой проблемой и нашел решение?

Ответ №1:

Сообщение об ошибке -10810, похоже, является исчерпывающим для ошибок в исполняемом файле внутри приложения. Например, у меня есть приложение под названием Hello.app, а внутри Hello.app/ Contents / macOS находится один исполняемый скрипт с именем Hello, состоящий из двух строк:

 #!/bin/sh
osascript -e "display dialog "Hello, world!""
  

Когда я выполняю команду:

 open Hello.app
  

или дважды щелкните значок папки в Finder. Я вижу ожидаемое диалоговое окно:

Диалоговое окно Hello World

Однако, когда я ввожу синтаксическую ошибку:

 osascript -e "display dialog "Hello, world!""
  

команда open завершается ошибкой с сообщением об ошибке:

 LSOpenURLsWithRole() failed with error -10810 for the file /full/path/name/of/Hello.app
  

Чтобы найти реальное сообщение об ошибке, запустите программу внутри вашего приложения непосредственно из командной строки. В моем случае команда:

 Hello.app/Contents/MacOS/Hello
  

и гораздо более информативное сообщение об ошибке:

 ./Hello: line 2: unexpected EOF while looking for matching `"'
  

Конечно, я понятия не имею, какова фактическая ошибка в вашей программе, но я надеюсь, что это поможет вам ее найти!