使用zipfile解压缩档案会将exe转换为文本文件MacOS

问题描述

我正在Mac上使用zipfile(Python 3.6)来解压缩包含文件文件夹和可执行文件的zip存档。该可执行文件由PyInstaller制作,并在Mac上压缩。当我解压缩存档文件时,它将可执行文件从Unix可执行文件类型转换为TextEdit文件类型。当我手动解压缩时,一切正常,并产生所需的Unix可执行文件。在Windows上一切正常。

我不确定如何用一个zip示例发布它,因为我敢肯定人们会犹豫使用未签名的exe文件,但是我的代码在下面。

请注意,我尝试通过使用os.chmod来更改权限来解决此问题,但这不起作用:

import zipfile
import os
zip_path = '/Applications/testzip/example.zip'
zip_dir = '/Applications/testzip'

zf = zipfile.ZipFile(zip_path)

for file in zf.infolist():
    path = os.path.join(file.filename,zip_dir)
    os.chmod(path,0o0755)
    zf.extract(file.filename,zip_dir)

zf.close()
print('done')

解决方法

不确定这是否是执行此操作的最佳方法,但是我能够通过提取后使用子进程更改权限来使其正常工作。似乎很慢,但是可以。

import zipfile
import subprocess
import os
zip_path = '/Applications/testzip/armada_pipeline.zip'
zip_dir = '/Applications/testzip'

zf = zipfile.ZipFile(zip_path)

for file in zf.infolist():
    path = os.path.join(zip_dir,file.filename)
    zf.extract(file,zip_dir)
    subprocess.call(['chmod','u+x',path])

zf.close()
print('done')