删除* .pyc

时间:2009-04-16 11:24:38

标签: python caching

我有三个模块:

one.py

def abc():
    print "Heeeeeeeeeeeiiiiiioooooooooo"

two.py

import one

def defg():
    one.abc()

three.py

import os
from time import sleep

import two
two.defg()

sleep(20)


directory = os.listdir('.')

for filename in directory:
    if filename[-3:] == 'pyc':
        print '- ' + filename
        os.remove(filename)

我有三个疑问。请帮助我

首次运行three.py one.pyc时,two.pyc将会创建os.remove(filename)。我可以看到它,因为我延迟了20秒。执行语句three.py后,它们将被删除。直到这里它的罚款。

再次没有关闭IDLE以及我运行.pyc的脚本。这次没有创建.pyc文件。 为什么会这样

如果我关闭IDLE以及脚本,将像以前一样创建one.py

为什么编译后的代码没有再次创建并且没有创建?

另外,如果我在.pyc进行更改,如果我在没有关闭shell的情况下运行则不会显示。 我也需要一个解决方案。

第三个疑问是如果编译的代码第一次被删除,那么第二次运行如何在没有{{1}}的情况下得到相同的结果?

希望找到解决方案......

3 个答案:

答案 0 :(得分:8)

.pyc不会再次创建,因为在代码中引用了导入的模块。重新运行时,使用此引用。

这就是为什么.pyc不会再生成的原因,也是为什么你所做的额外更改无法运行的原因。

您可以删除所有引用并调用垃圾回收,也可以使用模块上的内置reload()函数。 e.g:

reload(three)

答案 1 :(得分:1)

我认为IDLE在其自己的Python进程中缓存字节码,因此每次运行文件时都不需要重新生成它。

答案 2 :(得分:1)

  

编辑〜/ .bashrc并将此shell函数添加到其中

     
    

$ cd; pyclean

  
pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}