问题描述
我正在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')