Модули Python не обновляются после перезапуска основного модуля - PullRequest
2 голосов
/ 04 мая 2010

Я недавно вернулся к проекту, который должен был остановиться примерно на 6 месяцев, и после переустановки моей операционной системы и возвращения к ней у меня происходят разные сумасшедшие вещи. Я удостоверился, что установил ту же версию (2.6) python, которую использовал ранее.

Все началось с того, что я выдал странную ошибку tkinter, с которой у меня раньше не было проблем, программа относительно проста, и 2 или 3 ошибки, которые остались при выходе, я задокументировал и не имел отношения к интерфейсу. .

Ситуация стала еще более странной, когда всплыла та же ошибка, даже после того, как я удалил поврежденный раздел кода. На самом деле, трассировка указала на строку, которой даже не было в модуле, на который она ссылалась, например: строка 262, когда модуль имел длину всего 200 строк.

После запуска совершенно нового файла для основного модуля и копирования / вставки он, наконец, обнаружил, что код, вызывающий сбой, исчез, и я перестал получать сообщение об ошибке только для того, чтобы обнаружить, что любые обновления кода, которые я сделал в другом модуле, не появляются, когда я перезапускаю программу через оболочку. (Я не забыл сохранить.) После возни с этим, конечно, старая ошибка интерфейса вернулась, только в другом разделе кода, который работал ранее.

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

Вот оригинальная ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
  File "C:\PyStuff\interface.py", line 202, in dispOne
__main__.top.destroy()
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1938, in destroy
    self.tk.call('destroy', self._w)
TclError: can't invoke "destroy" command:  application has been destroyed

Я предполагаю, что здесь происходит что-то еще, кроме моего собственного плохого программирования. У кого-нибудь есть идеи?

Редактировать: Вспоминая, я думаю, что прочитал кое-что о плохой идее запуска программ Tkinter через оболочку IDLE, и, по крайней мере, кажется, что TclError исчез, если я вместо этого запускаю основной модуль, дважды щелкнув по Файл .pyc. Возможно, мои проблемы были просто комбинацией этого плюс проблемы с отметкой времени / PYTHONPATH, упомянутые ниже Крисом Атли и Владом?

Ответы [ 2 ]

2 голосов
/ 04 мая 2010

У меня было что-то подобное случиться. Причиной моих проблем было то, что мое программное обеспечение для управления версиями (hg) устанавливало дату файлов на дату в прошлом. По этой причине python решил использовать ранее созданные файлы .pyc, которые имели более новые временные метки.

Решением было удаление всех файлов .pyc перед тестированием кода.

0 голосов
/ 04 мая 2010

Проверьте переменную PYTHON_PATH, возможно, у вас более старая версия файла.

Также запустите интерпретатор Python и введите следующие команды для проверки пути:

import sys
print sys.path

Внимательно посмотрите на вывод и убедитесь, что у вас нет старых каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...