Приложение OSX, созданное на python, немедленно завершает работу, если комплект приложений выполняется из поиска, но работает нормально из командной строки.

Итак, у меня есть проект pyqt, и я хочу собрать dmg osx.app с помощью pyinstaller

pyinstaller создал вывод в

dist/MyApplication.app

Я могу запустить его прямо из терминала

cd dist
./MyApplication.app/Contents/MacOS/MyApplication

Однако, если я попытаюсь запустить пакет приложений напрямую либо с

open -a MyApplication.app

или же

open .
# double click on MyApplication.app folder (appears just as MyApplication from finder)

Начинается и сразу выходит

Теперь, если я перейду к

$ cd ./Contents/MacOS/

и открыть искатель

$ open .
#then double click on MyApplication

он работает нормально, но с терминальными окнами, открытыми в фоновом режиме

Last login: Fri Mar 14 18:01:13 on ttys005
MyApplication/dist/MyApplication.app/Contents/MacOS/MyApplication ; exit;
MyApplication/dist/MyApplication.app/Contents/MacOS/MyApplication ; exit;

Я использую аналогичные шаги для создания Windows EXE без каких-либо проблем (хотя в Windows нет концепции MyApplication.app)

Как мне диагностировать эту проблему?

Спасибо

3 ответа

Решение

Поэтому я следовал этому уроку по py2app, чтобы посмотреть, работает ли он лучше, чем pyinstaller, с этим кодом

if __name__=="__main__":
    print "Hello"

и получил аналогичные результаты

т.е. приложение закрывается, когда я

open -a HelloTest.app

пока он работает нормально с

./HelloTest.app/Contents/MacOS/HelloTest

но тогда этот кусок в учебнике объясняет это

When run normally, your application’s stdout 
and stderr output will go to the Console logs. 
To see them, open the Console application:

$ open -a Console

После изучения журналов консоли кажется, что я запускаю

open -a MyApplication.app

приложение работает в песочнице, и если вы откроете какой-либо файл для записи без указания абсолютного пути, оно не сможет создать файл

если я бегу

./MyApplication.app/Contents/MacOS/MyApplication

непосредственно приложение может создавать файлы в текущем каталоге

Поэтому я должен вернуться назад и указать полный путь при создании файлов, а не просто предполагать, что он будет создан в рабочем каталоге.

Когда вы создаете пакет приложений OSX с помощью pyinstaller, он вылетает, если вы используете относительные пути и пытаетесь записать файлы в рабочий каталог.

Чтобы записать файлы в рабочий каталог без использования абсолютных путей, сделайте ваши пути такими:

путь = os.path.join(os.path.dirname(sys.argv[0]), "файл")

У меня было что-то очень похожее, за исключением того, что я мог запустить его с помощьюopen -a AppName- он просто разбился при запуске из Finder.

В моем случае это был импорт с участиемffmpegкто был виновником:

      from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
Другие вопросы по тегам