在打包Python项目时将zip_safe设置为True有什么好处?

时间:2013-04-08 00:21:51

标签: python packaging setuptools

setuptools文档仅指出:

  

为了获得最佳性能,最好将Python软件包安装为zip文件。但是,并非所有软件包都能够以压缩格式运行,因为它们可能希望能够像普通操作系统文件一样访问源代码或数据文件。因此,setuptools可以将您的项目安装为zipfile或目录,其默认选项由项目的zip_safe标志(reference)决定。

实际上,获得的性能优势是什么?如果我的项目是拉链安全的,或者通常是最小的好处,是否值得调查?

2 个答案:

答案 0 :(得分:22)

Zip文件在磁盘上占用的空间更少,这也意味着它们可以更快地从磁盘读取。由于大多数东西是I / O绑定的,因此解压缩打包的开销可能小于从磁盘读取更大文件的开销。此外,一个小的zip文件可能会顺序存储在磁盘上,而较小的文件集可能会更加分散。在旋转介质上,这也通过减少搜索次数来提高读取性能。因此,您通常会以一些CPU时间为代价来优化磁盘使用,这可能会显着提高import和加载时间。

答案 1 :(得分:11)

除了已经提到的优点之外,还有几个优点。

读取单个大型.egg文件(并解压缩)可能比加载多个(可能很多)较小的.py文件快得多,具体取决于它所在的存储介质/文件系统驻留。

某些文件系统具有较大的块大小(例如,1MB),这意味着处理小文件可能很昂贵。即使您的文件很小(例如,10KB),您实际上可能在读取时从磁盘加载1MB块。通常,文件系统将大块中的多个小文件组合在一起以缓解这种情况。

在文件系统中,对文件元数据的访问速度很慢(有时会发生共享文件系统,如NFS),访问大量文件也可能非常昂贵。

当然,压缩整个群体也有帮助,因为这意味着总共需要读取更少的数据。

长话短说:如果您的文件系统更适合少量的大型文件,它可能会很重要。