Python未识别已更改的文件,使用过时的.pyc

2 投票
3 回答
1723 浏览
提问于 2025-04-16 15:32

昨天我在使用Google App Engine用Python开发时,发现它不再运行我最新版本的脚本了。它似乎还是在执行之前编译好的.pyc文件,即使我已经修改了.py源文件。

错误信息实际上引用了最新源代码中的正确行。但是如果那行的位置发生了变化,它就会引用之前出错时的那一行。

删除.pyc文件会让它们从当前版本重新生成。不过,删除所有.pyc文件现在并不是个好办法。

我该如何找到问题的根本原因呢?

3 个回答

2

你是在一个和编译不一样的系统上编辑.py文件吗?

编译器会重新编译.py文件,如果这个文件的修改时间比.pyc文件的新。

如果它选择使用.pyc文件,说明你的.py文件的修改时间比较旧。这种情况通常发生在你在另一个系统上修改.py文件,然后把它复制到要使用的系统上,而编辑的系统时间比运行的系统时间要慢。

2

你检查过你的系统时钟吗?我觉得Python是根据时间戳来决定使用.pyc文件还是.py文件的。如果你的系统时钟被调回了,那么它会把.pyc文件当作更新的文件,直到系统时钟恢复到它们最后一次被创建的时间。

0

以下步骤暂时解决了这个问题:

  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 一次,然后关闭它,再把你备份的偏好设置文件放回原处,这样就不用重新配置了。

补充:结果发现这确实能解决问题……但只是暂时的。这不是一个很容易调试的问题。奇怪的是,当从命令行运行应用服务器时,它是可以正常工作的,比如:

dev_appserver.py testproject/ -p 8082 --debug

撰写回答