删除*.pyc

use*_*646 1 python caching

我有三个模块:

one.py:

def abc():
    print "Heeeeeeeeeeeiiiiiioooooooooo"
Run Code Online (Sandbox Code Playgroud)

two.py:

import one

def defg():
    one.abc()
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我有三个疑问.请帮助我.

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

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

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

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

此外,如果我进行更改,one.py如果我在没有关闭shell的情况下运行它将不会显示.我也需要一个解决方案.

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

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

Nat*_*ell 8

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

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

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

reload(three)
Run Code Online (Sandbox Code Playgroud)

  • sys.modules总是保留一个引用,所以你不能让模块像这样消失,缺少手动摆弄sys.modules,这很困难.请参见http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module (3认同)