【问题标题】:Python modules not updating after restarting the main module重新启动主模块后 Python 模块未更新
【发布时间】:2011-02-15 07:31:51
【问题描述】:

我最近回到了一个不得不停止大约 6 个月的项目,在重新安装我的操作系统并回到它之后,我遇到了各种疯狂的事情。我确保安装了与我之前使用的相同版本(2.6)的 python。

它首先给我一个奇怪的 tkinter 错误,我以前没有遇到过问题,程序相对简单,我退出时留下的 2 或 3 个错误,我已经记录并且与界面无关.

即使在我删除了有问题的代码部分后仍会弹出相同的错误,事情变得更加奇怪。事实上,回溯指向了它所引用的模块中甚至不存在的行,例如:当模块只有 200 行时,第 262 行。

刚为主模块创建一个全新的文件并复制/粘贴后,它终于意识到有问题的代码已经消失了,我停止收到错误,只是发现我在另一个模块中对代码所做的任何更新都没有当我通过 shell 重新启动程序时出现。 (我没有忘记保存。)在摆弄这个之后,当然,旧的界面错误又回来了,只是在以前工作的不同代码段中。

事实上,如果我恢复到六个月前的文件,程序运行良好。但是,一旦我更改了主模块中的任何内容,界面错误就会回来。

这是原来的错误:

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

我猜这里除了我自己糟糕的编程之外还有其他事情发生。有人有什么想法吗?

编辑:回想起来,我相信我读过一些关于通过 IDLE 的 shell 运行 Tkinter 程序是一个坏主意的东西,至少如果我通过双击启动主模块,TclError 已经消失了.pyc 文件。也许我的问题只是 Chris Atlee 和 Vlad 下面提到的时间戳/PYTHONPATH 问题的结合?

【问题讨论】:

    标签: python interface tkinter


    【解决方案1】:

    我也遇到过类似的事情。我的问题的原因是我的源代码控制软件 (hg) 将文件的日期设置为过去的日期。因此,python 选择使用以前生成的具有较新时间戳的 .pyc 文件。

    解决方案是在测试代码之前删除所有 .pyc 文件。

    【讨论】:

    • 较旧的时间戳似乎不是我的问题,而且由于程序太小,除了经常备份我拥有的文件之外,我不使用任何东西来组织文件。
    【解决方案2】:

    检查你的 PYTHON_PATH 变量,你可能有一个旧版本的文件。

    同时启动你的 python 解释器并输入以下命令来检查路径:

    import sys
    print sys.path
    

    仔细查看输出并确保您没有任何旧目录。

    【讨论】:

    • 我没有设置 PYTHONPATH,设置 python 路径到目录会导致 tkinter 错误弹出,打印 sys.path 也是如此。需要明确的是:如果我将程序的旧(六个月前)版本(只是 .py 文件)复制到一个新目录中并从那里通过 shell 运行它,则程序可以正常工作。如果我将“Print 'hello'”添加到主模块的开头,那么我之前引用的 tkinter 错误肯定会在我单击程序界面上的按钮时立即显示。
    • 那么当你启动 python 解释器并打印出 sys.path 时会发生什么,你会得到任何类型的输出吗?
    • 哦,我明白了,对不起。但是,是的,那里的一切看起来都很好。只是当前目录加上 python26 目录。
    • 虽然,我应该指出,在我的主模块中将 pythonpath 设置为当前目录后,更新模块的问题已经消失,所以也许这些方面的事情正在发生。尽管如此,如果我通过 IDLE 的 shell 运行程序,我仍然会收到 TCL 错误,如果我只是双击 .py 或 .pyc 文件,我不会收到该错误。
    • 尝试从 IDLE shell 中打印出 sys.path。我相信它具有交互式外壳功能。还要在你的系统上搜索 .pyc 文件并删除旧文件,可能是这些编译文件的日期搞砸了。
    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2021-10-29
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多