pioner
Июнь 11, 2010 16:53:26
Python 2.3 компилированные файлы в винде были перенесены на хостинг с юникс и Python 2.5 - ошибка:
ImportError: Bad magic number in ….путь…/mymod.pyc
В литературе четко об этом информации не видел, но общие слова про кроссплатформенность говорят что все должно работать без новой копиляции.
Прошу прокоментировать.
amigo
Июнь 11, 2010 17:54:49
говорят что все должно работать без новой копиляции.
установите python той же версии и всё будет работать
Андрей Светлов
Июнь 11, 2010 18:04:59
Верно. pyc файлы кроссплатформенные. Но в начале каждого файла идет заголовок. В нем указывается номер версии Питона, которым этот файл был создан.
Это важно, потому что байткод изменяется от версии к версии, добавляются новые инструкции а старые начинают работать немного иначе.
Чтобы избавить себя от головной боли обратной совместимости хотя бы для pyc файлов (которые разработчики предпочитают рассматривать только как кеш, основа - исходный py код - OpenSource и все такое) считается, что pyc совместимы только в пределах главной версии - 2.4, 2.5, 2.6, 3.1 и т.д
На самом деле может быть несовместимость между альфа и бета версией (разные magic code) - но после выхода в релиз ничего не поменяется, это гарантированно.
ZZZ
Июнь 12, 2010 00:21:12
Андрей Светлов
в начале каждого файла идет заголовок
Наверное стоит добавить, что это и есть “magic number”…
Андрей Светлов
Июнь 12, 2010 12:28:22
если быть точным, заголовок состоит из 8 байт - 4 на magic number и 4 на время создания pyc файла.