有没有办法让 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/