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

Setuptools 文档只说明:

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

从实际的角度来看,性能收益是什么?是否值得调查我的项目是否是压缩安全的,或者它的好处通常是最小的?

26179 次浏览

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

除了上面提到的优点之外,还有几个优点。

读取 单身大码。Egg 文件(并解压缩它)可能比加载多个(可能很多)更小的文件要快得多。Py 文件,这取决于它所在的存储介质/文件系统。

有些文件系统的块大小很大(例如,1MB) ,这意味着处理小文件的代价可能很高。即使您的文件很小(比如10KB) ,在读取文件时,您实际上可能正在从磁盘加载1MB 的块。通常,文件系统将多个小文件组合在一个大块中以减轻这种影响。

在访问文件元数据比较慢的文件系统上(有时在共享文件系统(如 NFS)中会发生这种情况) ,访问大量文件可能也非常昂贵。

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

长话短说: 如果您的文件系统更适合于少量的大文件,那么这可能非常重要。