Python не интерпретирует измененные файлы, используя устаревший .pyc

Вчера при использовании Google App Engine для разработки на python остановилась текущая версия скрипта. Вместо выполнения самой последней версии он, кажется, запускает ранее предварительно скомпилированный .pyc, даже если источник .py был изменен.

Сообщения об ошибках фактически цитируют правильную строку из самого последнего источника. Кроме того, если положение строки изменилось, то он заключает в кавычки строку, которая находится в том месте, где ранее произошла ошибка.

Удаление файлов .pyc приводит к их воссозданию из текущей версии. Удаление всех файлов .pycs на данный момент является плохим решением.

Как добраться до первопричины проблемы?


person Riley    schedule 12.04.2011    source источник


Ответы (3)


Вы проверили системные часы? Я считаю, что python определяет, использовать ли .pyc или .py на основе временных меток. Если ваши системные часы были переведены назад, то файлы .pyc будут восприниматься как более новые, пока системные часы не сравняются с последним временем их сборки.

person Aaron Dufour    schedule 12.04.2011
comment
Спасибо за совет. Проверяя системное время нахожу все в порядке, как и даты на файлах. Они верны для всех .pyc и для .py. Также, если я изменяю .py, время обновляется правильно. - person Riley; 14.04.2011

Редактируете ли вы файлы .py в системе, отличной от той, в которой они компилируются?

Компилятор перекомпилирует файлы .py, если дата его изменения новее, чем дата изменения файла .pyc.

Тот факт, что он выбирает файл .pyc для использования, указывает на то, что ваш файл .py имеет более старую дату модификации. Это возможно только в том случае, если ваш файл .py модифицируется в другой системе, а затем копируется в ту, где он будет использоваться, а время редактирования/системные часы установлены позади среды выполнения/системных часов.

person euphoria83    schedule 12.04.2011
comment
Это все в одной системе. Я проверил временные метки, и они корректно обновляются при редактировании файлов. Не уверен, что я могу проверить дальше :( - person Riley; 14.04.2011

Следующие шаги временно решили проблему:

  1. Удалите GoogleAppEngineLauncher из папки «Приложения».
  2. Переименуйте файл ~/Library/Application Support/GoogleAppEngineLauncher/Projects.plist (например, Project.plist.backup
  3. Переименуйте файл ~/Library/Preferences/com.google.GoogleAppEngineLauncher.plist (например, com.google.GoogleAppEngineLauncher.plist.backup)
  4. Загрузите и снова установите Google App Engine Launcher.
  5. Используйте «Файл», «Добавить существующее приложение…», чтобы снова добавить свои проекты, не забудьте установить все флаги, которые вы установили ранее.

В качестве альтернативы это может даже сработать, запустив GAEL один раз, закрыв его и вернув резервные копии файлов настроек на место, чтобы избежать повторной настройки.

Редактировать: Оказывается, это исправляет это… временно. Не совсем простая проблема для отладки. Как ни странно, это работает при запуске сервера приложений из командной строки, например

dev_appserver.py testproject/ -p 8082 --debug
person Riley    schedule 31.05.2011