python中的“坏幻数” ImportError 是什么,我该如何解决?
我可以在网上找到的唯一内容表明这是由编译 .py -> .pyc 文件然后尝试将其与错误版本的 python 一起使用引起的。但是,就我而言,该文件有时似乎可以正常导入,但有时却不行,我不确定为什么。
python在回溯中提供的信息并不是特别有用(这就是我在这里问的原因......),但如果它有帮助的话:
Traceback (most recent call last): File "run.py", line 7, in <module> from Normalization import Normalizer
幻数来自 UNIX 类型的系统,其中文件的前几个字节包含一个指示文件类型的标记。
pycPython在创建文件时会在其文件中放置一个类似的标记。
pyc
然后python解释器在加载它时确保这个数字是正确的。
任何破坏这个幻数的东西都会导致你的问题。这包括编辑pyc文件或尝试pyc从与解释器不同的 python 版本(通常较晚)运行。
如果它们是 您的 pyc文件,只需删除它们并让解释器重新编译py文件。在 UNIX 类型系统上,这可能很简单:
py
rm *.pyc
要么:
find . -name '*.pyc' -delete
如果它们不是您的,您将不得不获取py文件以进行重新编译,或者使用可以运行pyc具有该特定魔法值的文件的解释器。
一件事可能导致间歇性。pyc导致问题的可能仅在某些条件下导入。有时它不太可能导入。当导入失败时,您应该检查实际的完整堆栈跟踪吗?
顺便说一句,我所有2.5.1(r251:54863) pyc文件的第一个字是62131, 2.6.1(r261:67517)is 62161。所有幻数的列表可以在 中找到Python/import.c,为了完整起见,在此处复制(当前为发布答案时,此后可能已更改):
2.5.1(r251:54863)
62131
2.6.1(r261:67517)
62161
Python/import.c
1.5: 20121 1.5.1: 20121 1.5.2: 20121 1.6: 50428 2.0: 50823 2.0.1: 50823 2.1: 60202 2.1.1: 60202 2.1.2: 60202 2.2: 60717 2.3a0: 62011 2.3a0: 62021 2.3a0: 62011 2.4a0: 62041 2.4a3: 62051 2.4b1: 62061 2.5a0: 62071 2.5a0: 62081 2.5a0: 62091 2.5a0: 62092 2.5b3: 62101 2.5b3: 62111 2.5c1: 62121 2.5c2: 62131 2.6a0: 62151 2.6a1: 62161 2.7a0: 62171