【问题标题】:What is the advantage of setting zip_safe to True when packaging a Python project?打包 Python 项目时将 zip_safe 设置为 True 有什么好处?
【发布时间】:2013-03-29 23:12:00
【问题描述】:

setuptools 文档仅说明:

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

实际上,获得的性能优势是什么?如果我的项目是 zip-safe 的,或者收益通常很小,是否值得调查?

【问题讨论】:

    标签: python packaging setuptools


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      Zip 文件占用的磁盘空间更少,这也意味着从磁盘读取它们的速度更快。由于大多数东西都受 I/O 限制,解压缩包的开销可能小于从磁盘读取较大文件的开销。此外,一个单一的、小型的 zip 文件可能会按顺序存储在磁盘上,而一组较小的文件可能会更加分散。在旋转介质上,这还通过减少寻道次数来提高读取性能。因此,您通常会以一些 CPU 时间为代价来优化磁盘使用率,这可能会显着改善您的import 和加载时间。

      【讨论】:

      • 请注意:如果您关心快速导入加载时间,最好再考虑一下。避免经常加载 Python 解释器!示例:一个 Python 解释器可以一个接一个地处理多个 Web 请求。
      • 这个答案充其量是不完整的,因为它只提到了 .egg 文件可以带来更好性能的众多原因中的一小部分。
      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2021-08-03
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多