Python 删除*.pyc

Python 删除*.pyc,python,caching,Python,Caching,我有三个模块: one.py: def abc(): print "Heeeeeeeeeeeiiiiiioooooooooo" import one def defg(): one.abc() import os from time import sleep import two two.defg() sleep(20) directory = os.listdir('.') for filename in directory: if filename[-

我有三个模块:

one.py

def abc():
    print "Heeeeeeeeeeeiiiiiioooooooooo"
import one

def defg():
    one.abc()
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)
two.py

def abc():
    print "Heeeeeeeeeeeiiiiiioooooooooo"
import one

def defg():
    one.abc()
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

def abc():
    print "Heeeeeeeeeeeiiiiiioooooooooo"
import one

def defg():
    one.abc()
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)
后,它们将被删除。在这里之前,一切都很好

再次在不关闭空闲和脚本的情况下运行
three.py
。这次没有创建
.pyc
文件为什么如此

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

为什么编译后的代码不会再次创建并重新生成?

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

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


希望有一个解决方案…

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

我认为IDLE在自己的Python进程中缓存字节码,因此,它不需要在每次运行文件时重新生成.pyc。不会再次创建.pyc,因为代码中引用了导入的模块。重新运行时,将使用此引用

这就是不再生成.pyc的原因,也是您所做的额外更改无法运行的原因

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

reload(three)

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

这就是不再生成.pyc的原因,也是您所做的额外更改无法运行的原因

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

reload(three)
编辑~/.bashrc并将此shell函数添加到其中

$cd;皮克林

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

$cd;皮克林


请把你的帖子编排得更好一点,把你的观点说得更清楚。你需要更清楚你想要什么样的“解决方案”,你的问题是什么?您要删除的文件未创建?我认为这是一件好事,意味着你要做的工作更少了…@ejinacm:我不认为“不关闭shell”是一个有效的标签。你是唯一一个使用它的人这一事实可能是一个很好的提示。k先生……缓存是合适的标记。请将你的帖子格式设置得更好一点,并使你的观点更清楚。你需要更清楚地了解你想要什么样的“解决方案”,你的问题是什么?您要删除的文件未创建?我认为这是一件好事,意味着你要做的工作更少了…@ejinacm:我不认为“不关闭shell”是一个有效的标签。你是唯一一个使用它的人这一事实可能是一个很好的暗示。k先生……缓存是合适的。嗯,是的,内森说的:)嗯,是的,内森说的:)谢谢。那么,当外壳关闭时,新的引用将起作用?无论如何,我想避免重载()如何删除所有引用并调用垃圾收集?sys.modules始终保留一个引用,因此,除了手动修改sys.modules之外,您不能让一个模块像那样消失,这是非常困难的。看看我以前是如何做的,而不是声称最好的实现。进口三台;导入系统,gc;del three#删除本地引用;删除系统模块[“三”]#删除导入;gc.collect()#确保所有东西都收拾好;输入三个新的。谢谢。那么,当外壳关闭时,新的引用将起作用?无论如何,我想避免重载()如何删除所有引用并调用垃圾收集?sys.modules始终保留一个引用,因此,除了手动修改sys.modules之外,您不能让一个模块像那样消失,这是非常困难的。看看我以前是如何做的,而不是声称最好的实现。进口三台;导入系统,gc;del three#删除本地引用;删除系统模块[“三”]#删除导入;gc.collect()#确保所有东西都收拾好;导入三个#new.pyc