setuptools 文档仅说明:
为了获得最佳性能,最好将 Python 包安装为 zip 文件。然而,并不是所有的包都能够以压缩形式运行,因为它们可能期望能够像普通操作系统文件一样访问源代码或数据文件。因此,setuptools 可以将您的项目安装为 zip 文件或目录,其默认选择由项目的 zip_safe 标志(参考)确定。
实际上,获得的性能优势是什么?是否值得调查我的项目是否安全,或者收益通常很小?
setuptools 文档仅说明:
为了获得最佳性能,最好将 Python 包安装为 zip 文件。然而,并不是所有的包都能够以压缩形式运行,因为它们可能期望能够像普通操作系统文件一样访问源代码或数据文件。因此,setuptools 可以将您的项目安装为 zip 文件或目录,其默认选择由项目的 zip_safe 标志(参考)确定。
实际上,获得的性能优势是什么?是否值得调查我的项目是否安全,或者收益通常很小?
Zip 文件占用的磁盘空间更少,这也意味着从磁盘读取它们的速度更快。由于大多数东西都受 I/O 限制,解压缩包的开销可能小于从磁盘读取较大文件的开销。此外,一个单一的、小型的 zip 文件可能会按顺序存储在磁盘上,而一组较小的文件可能会更加分散。在旋转介质上,这还通过减少寻道次数来提高读取性能。因此,您通常会以一些 CPU 时间为代价来优化磁盘使用率,这可能会大大缩短您的import
加载时间。
除了已经提到的优点之外,还有几个优点。
读取单个大型 .egg 文件(并解压缩)可能比加载多个(可能很多)较小的 .py 文件要快得多,具体取决于它所在的存储介质/文件系统。
某些文件系统具有较大的块大小(例如,1MB),这意味着处理小文件可能会很昂贵。即使您的文件很小(例如 10KB),您在读取它时实际上可能正在从磁盘加载一个 1MB 的块。通常,文件系统将多个小文件组合在一个大块中以减轻这种情况。
在访问文件元数据很慢的文件系统上(有时会发生在共享文件系统,如 NFS)上,访问大量文件也可能非常昂贵。
当然,压缩整个数据包也有帮助,因为这意味着总共需要读取的数据更少。
长话短说:如果您的文件系统更适合少量大文件,这可能很重要。