В соответствии с документацией pyInstaller, предлагаемый метод восстановления пути к приложению следующий:
#!/usr/bin/python3
import sys, os
if getattr(sys, 'frozen', False):
# If the application is run as a bundle, the pyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
application_path = sys._MEIPASS
else:
application_path = os.path.dirname(os.path.abspath(__file__))
Протестировано для pyInstaller v3.2, но это, безусловно, работало и для более ранних версий.
Решение Совиута не работает, по крайней мере, вообще не для последних версий pyInstaller (обратите внимание, что ОП уже много лет). Например, в MacOS при объединении приложения в пакет из одного файла sys.executable
указывает только на местоположение встроенного архива, а это , а не место, где приложение фактически выполняется после pyInstaller загрузчик создал временную среду приложения. Только sys._MEIPASS
правильно указывает на это место. Обратитесь к этой странице документа для получения дополнительной информации о том, как работает pyInstaller.