Существует еще одна проблема при извлечении .app из zip-файла в Python (чего не происходит с обычной утилитой zip). Никто другой, кажется, не упомянул об этом ...
.app может перестать функционировать после извлечения таким образом в результате потери бита разрешения на выполнение во вложенном двоичном файле. Вы можете исправить это, просто предоставив это снова.
Вот свободный фрагмент кода, который я использую. Пересмотрите это по мере необходимости для ваших целей (или напишите более общую функцию для более универсального решения этой ситуации):
import os, zipfile
...
ZIP_PATH = APP_PATH + ".zip"
APP_BIN_DIR = os.path.join( APP_PATH, "Contents/MacOS" )
zipfile.ZipFile( ZIP_PATH, 'r' ).extractall( WORK_DIR )
BIN_PATH = os.path.join( APP_BIN_DIR, os.listdir( APP_BIN_DIR )[0] )
os.chmod( BIN_PATH, 0o777 )
Моя программа уже знала, где ожидать, что будет найдено APP_PATH
(то есть в пределах WORK_DIR
). Я должен был застегнуть это, хотя, и заносить эту деталь после факта. Я называю свой почтовый индекс как XXXXX.app.zip
. Я разрешаю BIN_PATH
здесь довольно просто, без необходимости знать имя двоичного файла внутри .app, потому что я знаю, что в моем случае будет только один файл Я даю ему полные (777) разрешения, потому что я все равно просто удаляю .app в конце своего скрипта.