Приложение 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