【发布时间】:2011-01-04 13:29:09
【问题描述】:
Python 可以在优化模式 (-O) 下运行脚本,该模式会关闭诸如断言之类的调试,如果我记得的话,还可以删除文档字符串。我没有看到它真正使用过,也许它只是过去的产物。是否被使用?做什么的?
为什么 Python 3 中没有删除这个无用的东西?
【问题讨论】:
-
好问题,但不知道为什么要删除它!
标签: python
Python 可以在优化模式 (-O) 下运行脚本,该模式会关闭诸如断言之类的调试,如果我记得的话,还可以删除文档字符串。我没有看到它真正使用过,也许它只是过去的产物。是否被使用?做什么的?
为什么 Python 3 中没有删除这个无用的东西?
【问题讨论】:
标签: python
python -O 当前执行以下操作:
__debug__ 设置为 False(默认为 True)当被称为 python -OO
不知道为什么大家都忘了提__debug__这个问题;也许是因为我是唯一一个使用它的人 :) if __debug__ 构造在 -O 下运行时根本不会创建字节码,我发现这非常有用。
【讨论】:
如果您分发任何仅包含.pyo 文件的存档表单,它会节省少量内存和少量磁盘空间。 (如果您经常使用assert,并且可能在复杂的情况下,节省的费用可能不小,也可以扩展到运行时间。
所以,它绝对不是无用——当然它正在被使用(如果你将一个 Python 编码的服务器程序部署到大量 N 台服务器机器上,为什么永远 em> 您是否想浪费 N * X 个字节来保留任何人都无法访问的文档字符串?!)。当然,如果它节省更多会更好,但是,嘿-不要浪费,不要!-)
因此,在 Python 3 中保留此功能(无论如何提供都非常简单,你知道;-)几乎是不费吹灰之力——为什么还要在后者的采用困难中添加“epsilon”?-)
【讨论】:
不同 Linux 发行版中的预打包软件通常使用 -O 进行字节编译。例如,对于 python 应用程序,如果来自 Fedora packaging guidelines:
过去,%ghost .pyo 文件的常见做法是为了节省用户文件系统上的少量空间。但是,这有两个问题: 1. 对于 SELinux,如果用户正在运行 python -O [APP],它会在 .pyos 不存在时尝试编写它们。这会导致日志中出现 AVC 拒绝记录。 2. 如果系统管理员运行 python -OO [APP] 将创建没有文档字符串的 .pyos。有些程序需要文档字符串才能运行。在随后使用 python -O [APP] 运行时,即使请求了不同的优化级别,python 也会使用缓存的 .pyos。解决此问题的唯一方法是找出 .pyos 的位置并删除它们。
当前处理 pyo 文件的方法是按原样包含它们,没有 %ghosting。
【讨论】:
删除断言意味着小的性能优势,因此您可以将其用于“发布”代码。无论如何,没有人使用它,因为许多 Python 库都是开源的,因此 help() 函数应该可以工作。
所以,只要这个模式下没有任何真正的优化,你可以忽略它。
【讨论】: