魔数来自于类UNIX系统,文件的前几个字节保存了标记,指示文件类型。
当Python创建pyc
文件时,会将类似的标记放入其中。
然后,Python解释器在加载文件时确保该数字正确。
任何损坏此魔数的操作都会导致问题。这包括编辑pyc
文件或尝试从比您的解释器版本(通常是更新版本)更高的Python版本运行pyc
文件。
如果它们是您的pyc
文件(或者您有它们的py
文件),只需删除它们,让解释器重新编译py
文件即可。在类UNIX系统上,这可能只需要执行以下简单命令:
rm *.pyc
或者:
find . -name '*.pyc' -delete
如果它们不是你的,而且原始的py
文件没有提供,那么你就必须要么获取py
文件进行重新编译,要么使用一个可以运行具有特定魔术值的pyc
文件的解释器。
可能会导致间歇性问题的一件事是,引起问题的pyc
文件只能在某些条件下被导入。它很难只是有时候导入。当导入失败时,应该检查实际的完整堆栈跟踪。
另外,我所有的2.5.1(r251:54863)
pyc
文件的第一个单词都是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