删除* .pyc继续

时间:2009-04-20 11:46:10

标签: python operating-system sys

作为this question的后续行动,我有一个新问题:

os.remove(module_name)del sys.modules["module_name"]内部发生了什么?

3 个答案:

答案 0 :(得分:4)

简短的回答是os.remove(module_name)将从文件系统中删除文件。 del sys.modules["module_name"]将从当前Python解释器正在维护的先前加载的模块的缓存中删除一个模块。

在Python中,当您导入模块时,解释器会检查是否存在与您尝试导入的.pyc文件同名的.py文件。如果存在,并且.py文件自导入.pyc文件后未发生更改,则Python将加载.pyc文件(速度明显加快)。

如果.pyc文件不存在,或者自创建.py文件后.pyc文件已更改,则会加载.py文件并添加新文件.pyc文件已创建。 (值得注意的是,只需运行一个Python文件,比如test.py而不是会导致test.pyc被创建。只有import个模块会导致这种情况发生。)

sys.modules完全是另一回事。为了加速两次导入相同模块的代码,Python维护了在当前解释器会话期间导入的模块列表。如果要导入的模块位于sys.modules中,则将读取缓存版本(磁盘上将不会检查.py.pyc文件。 Python提供了一个内置函数reload(),它允许您绕过模块缓存并强制从磁盘重新加载。

要获得有关Python模块系统的更多信息,请参阅modules上的文档。

答案 1 :(得分:2)

我开了很多这样的应用

import os

os.system('attrib +H *.pyc /S')

在Windows上,这会在应用程序启动时隐藏任何可见的编译文件 - 它们会给我点数。

答案 2 :(得分:1)

我为这份工作准备了一个班轮:

find . -name *.pyc |xargs rm

注意:您需要Linux(或类Unix操作系统)