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

#python #google-app-engine #bytecode #pyc

#python #google-app-engine #байт-код #pyc

Вопрос:

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

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

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

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

Комментарии:

1. Теперь я подозреваю, что это может быть связано с Google App Engine, использующим UTC вместо местного времени ( timezones.appspot.com ). Тем не менее, я не нахожу никаких ссылок на эту проблему в Интернете. Остановка приложения с помощью программы запуска Google App Engine и его повторный запуск также являются функциональным, но громоздким обходным путем.

Ответ №1:

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

Комментарии:

1. Спасибо за совет. Проверяя системное время, я нахожу все в порядке, а также даты в файлах. Они верны для всех . pyc и на .py. Также, если я изменяю .py, время обновляется правильно.

Ответ №2:

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

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

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

Комментарии:

1. Все это в одной системе. Я проверил временные метки, и они правильно обновляются при редактировании файлов. Не уверен, что я могу проверить дальше: (

Ответ №3:

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

  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 один раз, закрыв его и вернув ваши резервные копии файлов настроек на место, чтобы избежать необходимости перенастройки.

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

 dev_appserver.py testproject/ -p 8082 --debug