我有大约700个大小为几千字节的Python源文件(.py
)(平均文件大小为12 kB,但也有很多1 kB文件),我想创建一个压缩存档包含所有这些存档。我的要求:
.zip
文件给我的压缩比为3.816,我需要的东西比那个小。用.rar
创建的rar -s -m5 a
文件给我压缩比为6.177,我更喜欢7或者更。)zlib
慢,最好更快。.tar
文件已经输出,并且固定的.rar
文件已经用完了。).py
文件都很小(只有几千字节),我不需要流式解压缩器或在文件中寻求支持。.py
文件的并集生成的上下文字典初始化解压缩,以节省更多空间。您推荐哪种压缩算法和C解压缩库?
我知道代码缩小的概念(例如删除注释和额外的空格,将局部变量重命名为单个字母),我会考虑将这种技术用于我的一些.py
文件,但是在这个问题中我对它不感兴趣。 (参见Python缩小器here。)
我知道字节码编译的概念(.pyc
文件),但在这个问题中,我对此并不感兴趣。 (我不想在归档中使用字节码的原因是字节码依赖于架构和版本,因此它的可移植性较差。.pyc
文件往往比缩小.py
文件大一点。文件。)
查看我的答案,其中包含计划B和计划C.我仍在寻找计划A,它比ZIP小(但最有可能大于.tar.xz
),并且它的开销小于{ {1}}。
答案 0 :(得分:3)
我知道你已经拒绝了.zip,但是如果你意识到Python已经能够直接从zip文件中导入包,那么它可能会改变你的决定。除了setuptools配置文件外,不需要额外的代码。
答案 1 :(得分:2)
答案 2 :(得分:0)
FYI Plan B只是使用ZIP文件。这就是我目前正在做的事情。在ZIP存档中存储.py
文件对于Python非常方便,因为Python可以直接从ZIP存档加载.py
个文件。但我需要比ZIP文件小的东西,这就是我问这个问题的原因。
FYI C计划使用.tar.xz
。这是分析。 Linux内核和Busybox 1.8.5包含一个.xz
解压缩器,它编译为18 kB的x86代码,满足了我对小型解压缩库的要求。 .tar.xz
xz -6 -C crc32
与.tar
文件的压缩比为6.648。为x86编译的Busybox 1.8.5的.xz
解压缩器的开销是代码大小为17840字节(将可执行文件与.tar.xz
文件进行比较)。所以这是计划C:当可执行文件启动时,将整个存档提取到内存中。 (这在我的机器上大约需要0.35秒,输出是9MB内存块。)要从存档中读取文件,请使用其内存中的未压缩表示。这将非常快。此备份计划不是我的问题的解决方案,因为它在执行开始时涉及0.35秒的开销,并且它需要9MB的额外内存。