python - 让 Python 忽略 .pyc 文件

标签 python pyc

有没有办法让 Python 忽略任何存在的 .pyc 文件并始终直接解释所有代码(包括导入的模块)?谷歌没有找到任何答案,所以我怀疑没有,但似乎值得一问以防万一。

(我为什么要这样做?我有大量 Python 脚本,它们在几百台计算机的集群上重复运行。Python 脚本本身存在于共享的 NFS 文件系统上。不知何故,很少,在在几个小时内运行了数百次,它们会突然开始崩溃,并出现无法导入模块的错误。强制重新生成 .pyc 文件可以解决问题。当然,我想解决根本原因,但与此同时,我们还需要系统继续运行,因此如果可能的话,忽略 .pyc 文件似乎是一个合理的解决方法)。

附:我使用的是 Python 2.5,所以不能使用 -B。

最佳答案

可以使用标准 Python 库的 imp 模块重新实现 __builtins__.__import__ ,即import调用的钩子(Hook)函数和 from陈述。特别是 imp.load_module函数可用于加载 .py即使对应的.pyc存在。请务必仔细研究我所指向的页面中的所有文档,以及 import 的文档。 ,因为这是一项微妙的工作。文档本身建议改用导入钩子(Hook)(根据 PEP 302),但对于这个特定任务,我怀疑这会更难。

顺便说一句,您观察到的问题的可能原因包括尝试写入 .pyc 的不同计算机之间的竞争条件同时文件——NFS 锁定是出了名的不稳定,而且一直都是;-)。只要您使用的每个 Python 编译器都处于同一版本(如果不是,那么您无论如何都会遇到大麻烦;-),我宁愿预编译所有这些 .py文件到 .pyc并使他们的目录只读;无论如何,后者似乎是最简单的方法(而不是破解 __import__ ),即使由于某种原因您无法预编译。

关于python - 让 Python 忽略 .pyc 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503970/

相关文章:

java - 在Java中执行python编译脚本(.pyc)

android - kivy buildozer 无法编译针对 python3 的应用程序

python - user32.SwitchDesktop 仅在 Debug模式下工作 - Python Windows 服务

Python - 如何使所有按钮每行对齐,看起来像按钮墙

python - Django 或 python 与 Mercurial 一起使用时如何处理 pyc 文件?

pytest - 在pypy下比较pytest中的unicode在第一次运行时失败

python - Python 的解释器如何打印文本? - 源代码

python - 使用Python分离模糊图像

python - 本应无限循环的 While 循环在第一个循环后卡住

Python:以编程方式将 Python 包编译为 pyc 或 pyo 文件