結論
それはライセンス関係で解凍できない。Pythonのzipfileで圧縮しなおせばok
現象
こんなエラーが発生した。
raise NotImplementedError("compression type %d (%s)" % (compress_type, descr)) NotImplementedError: compression type 9 (deflate64)
zipが解凍できないとは何事だ…?
別のzipは解凍できるのに、1.6GBあるファイルは解凍できない、なぜだ。
deflate64の闇
このissueに全てが書いてある.
github.com
要するに、この圧縮方式 (type 9, deflate64) はプロプライエタリな圧縮方式であり、python公式モジュールは意図的に対応していない。
そしてWindowsでは大容量ファイルの圧縮にdeflate64を利用するらしい。
すなわち、Windowsで圧縮した巨大zipファイルはPython非対応圧縮方式なためにPythonで解凍できない。omg...
解決方法
一度Windowsで解凍し、Pythonのライブラリを使ってzipにし直す。
1. モジュールを直接呼び出す
Pythonはコマンドラインの-mを利用して、ライブラリを直接利用できる。なので
python -m zipfile -c "new_zip_name.zip" source_dir_path
を叩けばおk
ただし、ディレクトリごと圧縮されるので、zipファイル内にsource_dir_pathディレクトリが1階層挟まることにはなる
2. ziplib
1.のディレクトリ挟まる現象を避けたい場合は、zipfileを使って圧縮し直す。
コマンドラインからPython REPL起動して以下を実行すればいい
import zipfile zip = zipfile.ZipFile("new_zip_name.zip", mode="a", compression=zipfile.ZIP_DEFLATED) for f in files: zip.write(f)