2016-01-28 1 views
0

Я создал систему распространения инструментов с использованием zip. Инструменты внутри zip, похоже, только любят бегать с pyc. Один из моих аниматоров использует Maya 2013, у которого более старая версия python (2.6.4). Я получаю ошибку Magic Numbers, когда он пытается запустить мои файлы.Maya Python компилируется для более ранней версии

Как скомпилировать мои скрипты в более ранней версии python?

+0

Связанный: [Что такое неправильная ошибка числа магов?] (Http://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error). Возможно, проверьте принятый ответ. Удалите все .pyc-файлы, а затем попробуйте выполнить свой код в Maya 2013. EDIT: у вас есть доступ к файлам .py? – DrHaze

+0

Magic Number - это ошибка, которую вы получаете при компиляции кода в более новой версии, чем запущенная программа. Таким образом, в этом случае он компилируется в Maya 2.7.3, но аниматор использует майю 2013, которая имеет 2.6.4. Я попробую только ру. Я попробовал py и pyc, но это не сработало. –

+0

Если удаление файлов .pyc устраняет вашу проблему, вы можете добавить 'sys.dont_write_bytecode = True' (добавленный в Python 2.6) в начале ваших скриптов, чтобы избежать генерации байт-кода. – DrHaze

ответ

0

Если вы распространяете файлы pyc, вам нужно «скомпилировать» их для основной версии python, на которую настроен таргетинг, запустив py_compile из интерпретатора, который находится в правильной версии. Вероятно, вы можете сделать это, используя встроенный интеллект 2.6.4, без фактического запуска майи, поэтому, если у вас нет той же версии майя, но вы можете захватить интерпретатор, он создаст совместимые с 2.6.4 пики.

Однако вы также должны иметь возможность распространять заархивированные файлы .py, которые должны быть независимыми от версии (основная проблема будет заключаться в том, что 2.7 поддерживает несколько функций, таких как распознавание dict и OrderedDict, которых нет в 2.6).

Самая большая морщина будет двоичной: любой код, который полагается на .so или .pyd модули, вероятно, не будет работать между версиями intepreter. Обычно мне приходится ставить бинарные файлы, зависящие от версии, в zip и извлекать их во время запуска.