我最初将所有模块放在一个包中。我最近在原始包中创建了一个子包,并将一些模块移动到该包中。我的src文件夹和2个包文件夹都在我的PYTHONPATH中。
由于我重新定位了这些模块,我对其.py文件所做的更改似乎没有进入生成的* $ py.class文件,我认为这些文件最终会运行,基于print __FILE__
吐出的是什么。
.class文件位于顶级包的目录中,我相信这是因为它们从第一个位置导入的是在该包中的模块中。所以我认为他们是在正确的地方。
将模块移回顶级软件包确实会使问题消失,但被迫将所有模块放在一个软件包中并不是一个解决方案。除了将模块放在包含__init__.py
的文件夹中之外,我是否需要做一些事情来将“注册”模块作为包的一部分?
注意:这个问题的其余部分只是导致我在更改.py文件时得出结论我没有更新.class文件的症状。你可以跳过它,如果你是一个人;博士那样的人:P
我在函数的开头放了一堆空格,当我单步执行它时,光标会跟随代码所在的位置。
以下是IDE向我展示的代码:
以下是本地变量(注意self
没有任何约束):
在我走几行后,这里是代码(注意光标位置): 和当地人:
请注意,现在self
已绑定id
和updatePeriod
,因此明确执行了空格后的前两行代码。
如果我完全删除.py文件(粘贴在桌面上或其他东西上),那么显然IDE无法找到它,所以我无法单步执行它,但程序会根据以下代码运行是(我可以告诉一些明显的变化没有效果)。
最后,相关的* $ py.class文件的修改日期大约是4.5个小时,尽管我在过去一小时或两小时内一直在处理最近的.py文件。
答案 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.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
文件不会
创建或更新。