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

在打包Python项目时,将zip_safe设置为True有什么好处?,python,packaging,setuptools,Python,Packaging,Setuptools,setuptools文档仅说明: 为了获得最佳性能,最好将Python包安装为zip文件。然而,并不是所有的包都能够以压缩的形式运行,因为它们可能期望能够像正常的操作系统文件一样访问源代码或数据文件。因此,setuptools可以将项目安装为zipfile或目录,其默认选择由项目的zip_安全标志()决定 实际上,获得的性能优势是什么?是否值得调查我的项目是否是zip安全的,或者好处通常是最小的?zip文件占用磁盘空间更少,这也意味着它们可以更快地从磁盘读取。因为大多数东西都是I/O绑定的,所以

setuptools文档仅说明:

为了获得最佳性能,最好将Python包安装为zip文件。然而,并不是所有的包都能够以压缩的形式运行,因为它们可能期望能够像正常的操作系统文件一样访问源代码或数据文件。因此,setuptools可以将项目安装为zipfile或目录,其默认选择由项目的zip_安全标志()决定


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

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

除了前面提到的优点之外,还有一些优点

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

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

在文件系统上,访问文件元数据的速度很慢(共享文件系统有时会出现这种情况,如NFS),访问大量文件的成本也可能非常高

当然,压缩整组数据也有帮助,因为这意味着需要读取的数据总量将减少


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

请注意:如果您关心快速导入加载时间,最好再考虑一下。避免经常加载Python解释器!示例:一个Python解释器可以处理一个接一个的多个web请求。这个答案充其量是不完整的,因为它只提到了.egg文件可以产生更好性能的众多原因中的一小部分。