我们在网络驱动器上有一个python脚本+相关模块。我们同时从多台计算机上运行这个脚本。在
有时其中一个随机失败,错误如下:
Traceback (most recent call last):
File "\\chifs02.int.tt.local\group\Development\Server Products\Automation\repos\mksutils\fetch.py", line 16, in <module>
from scripts import write_set_environment
NameError: Can't find file for module scripts
(filename \\chifs02.int.tt.local\group\Development\Server Products\Automation\repos\mksutils\scripts.pyc)
我注意到的一个奇怪之处是.py文件最后一次修改是在几个月前,但是.pyc只有几个小时的历史,尽管从那时起至少每天都在运行。在
我以前从未见过这个NameError: Can't find file for module scripts
错误,而且Google也帮不上什么忙。在
所有涉及的计算机都在运行Windows。在
不要这样做,这里的“that”是指有多台计算机尝试使用同一个.pyc(s)。在
修改pyc的可能原因是在不同的计算机上可能有稍微不同的Python版本。一个编写它的.pyc版本,另一个出现时发现它不是它所期望的,并编写自己的版本。在
当不同的计算机同时尝试处理相同的.pyc文件时,奇怪的错误是可能的,这一点也不会让我感到惊讶。这是一个竞争条件的邀请,因为没有使用锁定机制。在
在运行脚本之前,让每个系统将脚本复制到本地,或者禁用.pyc生成(-B命令行标志或设置PYTHONDONTWRITEBYTECODE环境变量)。在
这是个奇怪的错误(我在野外从未见过)。在
我的假设是,它与一个节点重新生成
pyc
文件有关,而另一个节点试图查看它。尝试删除pyc
文件并在Python命令行上指定-B
:相关问题 更多 >
编程相关推荐