python 中的“Bad magic number”ImportError 是什么,我该如何解决?
我唯一能在网上找到的东西表明这是由编译 .py -> .pyc 文件然后尝试将其与错误版本的 python 一起使用引起的。但是,就我而言,该文件有时似乎可以正常导入,但有时却不行,我不确定为什么。
python 在回溯中提供的信息并不是特别有用(这就是我在这里问的原因……),但这里是为了以防万一它有帮助:
Traceback (most recent call last):
File "run.py", line 7, in <module>
from Normalization import Normalizer
原文由 Noah 发布,翻译遵循 CC BY-SA 4.0 许可协议
幻数来自 UNIX 类型的系统,其中文件的前几个字节包含指示文件类型的标记。
Python 在创建文件时将类似的标记放入其
pyc
文件中。然后 python 解释器在加载它时确保这个数字是正确的。
任何破坏这个神奇数字的东西都会导致你的问题。这包括编辑
pyc
文件或尝试运行pyc
来自与您的解释器不同版本的 python(通常更高版本)。如果它们是 您的
pyc
文件,只需删除它们并让解释器重新编译py
文件。在 UNIX 类型系统上,这可能很简单:要么:
如果它们不是您的,则您必须获取
py
文件以进行重新编译,或者获取可以运行pyc
具有特定魔法值的文件的解释器。可能导致间歇性的一件事。导致问题的
pyc
只能在特定条件下导入。有时它不太可能导入。当导入失败时,您应该检查实际的完整堆栈跟踪吗?As an aside, the first word of all my
2.5.1(r251:54863)
pyc
files is62131
,2.6.1(r261:67517)
is62161
.可以在Python/import.c
中找到所有幻数的列表,为了完整起见在此处转载(截至发布答案时为当前版本,此后可能已更改):