<p>这个神奇的数字来自UNIX类型的系统,其中文件的前几个字节包含一个指示文件类型的标记。</p>
<p>Python在创建文件时将类似的标记放入其<code>pyc</code>文件中。</p>
<p>然后,python解释器在加载时确保这个数字是正确的。</p>
<p>任何破坏这个魔法数字的东西都会引起你的问题。这包括编辑<code>pyc</code>文件,或者尝试从与解释器不同的python版本(通常更晚)运行<code>pyc</code>。</p>
<p>如果它们是<em>您的</em><code>pyc</code>文件,只需删除它们并让解释器重新编译<code>py</code>文件。在UNIX类型的系统上,这可能很简单,例如:</p>
<pre><code>rm *.pyc
</code></pre>
<p>或:</p>
<pre><code>find . -name '*.pyc' -delete
</code></pre>
<p>如果它们不是您的,您将必须获得重新编译的<code>py</code>文件,或者需要一个可以运行具有特定魔法值的<code>pyc</code>文件的解释器。</p>
<p>有一件事可能是导致间歇性的。导致问题的<code>pyc</code>只能在特定条件下导入。有时它不大可能进口。当导入失败时,您应该检查实际的完整堆栈跟踪吗?</p>
<p>顺便说一下,我所有文件的第一个字是<code>2.5.1(r251:54863)</code><code>pyc</code>,<code>2.6.1(r261:67517)</code>是<code>62161</code>。所有神奇数字的列表都可以在<code>Python/import.c</code>中找到,为了完整起见,在这里复制(在发布答案时是最新的,此后可能发生了变化):</p>
<pre><code>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
</code></pre>