我有三个模块:
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}}的情况下得到相同的结果?
希望找到解决方案......
答案 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
}