Python не интерпретирует измененные файлы, используя устаревший .pyc - PullRequest
2 голосов
/ 12 апреля 2011

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

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

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

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

2 голосов
/ 12 апреля 2011

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

0 голосов
/ 31 мая 2011

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

  1. Удалите GoogleAppEngineLauncher из папки «Приложения».
  2. Переименование файла ~ / Библиотека / Поддержка приложений / 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
...