为什么我的jython“* $ py.class”文件在我将它们移动到不同的包后没有更新代码?

时间:2011-08-24 04:41:32

标签: python jython pydev

我最初将所有模块放在一个包中。我最近在原始包中创建了一个子包,并将一些模块移动到该包中。我的src文件夹和2个包文件夹都在我的PYTHONPATH中。

由于我重新定位了这些模块,我对其.py文件所做的更改似乎没有进入生成的* $ py.class文件,我认为这些文件最终会运行,基于print __FILE__吐出的是什么。

.class文件位于顶级包的目录中,我相信这是因为它们从第一个位置导入的是在该包中的模块中。所以我认为他们是在正确的地方。

将模块移回顶级软件包确实会使问题消失,但被迫将所有模块放在一个软件包中并不是一个解决方案。除了将模块放在包含__init__.py的文件夹中之外,我是否需要做一些事情来将“注册”模块作为包的一部分?

注意:这个问题的其余部分只是导致我在更改.py文件时得出结论我没有更新.class文件的症状。你可以跳过它,如果你是一个人;博士那样的人:P

我在函数的开头放了一堆空格,当我单步执行它时,光标会跟随代码所在的位置。

以下是IDE向我展示的代码:

enter image description here

以下是本地变量(注意self没有任何约束):

enter image description here

在我走几行后,这里是代码(注意光标位置): enter image description here 和当地人:

enter image description here

请注意,现在self已绑定idupdatePeriod,因此明确执行了空格后的前两行代码。

如果我完全删除.py文件(粘贴在桌面上或其他东西上),那么显然IDE无法找到它,所以我无法单步执行它,但程序会根据以下代码运行是(我可以告诉一些明显的变化没有效果)。

最后,相关的* $ py.class文件的修改日期大约是4.5个小时,尽管我在过去一小时或两小时内一直在处理最近的.py文件。

3 个答案:

答案 0 :(得分:4)

.py被删除时,编译的Python文件不会被自动删除。由于它们在您的子包之前位于$PYTHONPATH,因此它们会被执行,并且由于没有与它们对应的.py,它们将被使用并且它们将永远不会被更新。唯一的解决方案是手动删除它们。

PyDev通过实际解释来源显然增加了混乱。

答案 1 :(得分:1)

我认为这里有两个问题:

  • 移动文件时,不会重新生成$py.class

这可能是因为您正在将文件作为主条目运行...如果我没记错,$py.class仅在文件导入时生成(即:不适用于__main__模块)并且只有代码实际上已被更改(我不确定Jython如何决定它被更改 - 可能是文件的时间,但我可能在这里错了。)

最好的解决方案是在移动文件及其相应的$ py.class(比如移动文件夹)时删除$ py.class,这样你就可以100%确定Jython永远不会把它拿起来。

PyDev可以为您提供帮助:在PyDev Package Explorer > PyDev > Remove *.pyc, *.pyo and *$py.class Files

中选择一个文件夹
    没有相应.py文件的
  • $py.class个文件

PyDev实际上正确处理.pyc文件(即:.py文件不再可用时删除.pyc)。我正在改变PyDev以处理$py.class文件(因此,如果你在3-4小时内得到它,它应该正常工作 - 请参阅:http://pydev.org/download.html获取指示 - 在此之前,您可以按上述方法手动删除。

答案 2 :(得分:1)

我在这里有同样的问题,我做了一些测试。
我知道这个话题有点旧,但我还是想在这里添加一些东西。

只有在导入$py.class时才能创建和更新.py class个文件 某处。如果正在使用.py执行execfile()文件,则$py.class文件不会 创建或更新。