Магическое число происходит от систем типа UNIX, где первые несколько байтов файла содержат маркер, указывающий тип файла.
Python помещает аналогичный маркер в свои pyc
файлы при создании.
Затем интерпретатор python проверяет правильность этого числа при загрузке.
Все, что повредит это магическое число, вызовет вашу проблему. Это включает в себя редактирование файла pyc
или попытку запуска pyc
из другой версии python (обычно позже), чем ваш интерпретатор.
Если они ваши pyc
файлы, просто удалите их и дайте интерпретатору пересобрать файлы py
. В системах типа UNIX это может быть что-то простое:
rm *.pyc
или
find . -name '*.pyc' -delete
Если они не ваши, вам придется либо получить файлы 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