Skip to main content
 首页 » 编程设计

python之删除 *.pyc 并重新运行 .py 脚本后的奇怪行为

2025年05月04日12birdshome

我有三个模块:

一个.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。我可以看到它,因为我延迟了 20 秒。执行语句 os.remove(filename) 后,它们将被删除。直到这里都很好。

再次在不关闭 IDLE 和脚本的情况下,我运行了 three.py。这次没有创建 .pyc 文件。为什么会这样?

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

  1. 为什么编译后的代码不能一次又一次地创建?

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

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

请您参考如下方法:

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

这就是为什么没有再次生成 .pyc,也是为什么您所做的额外更改没有运行的原因。

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

reload(three)