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

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

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

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

Как я могу найти основную причину проблемы?

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

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

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

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

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

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

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

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

dev_appserver.py testproject/ -p 8082 --debug