-5

作为这个问题的后续,我有一个新问题:

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

4

3 回答 3

4

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

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

如果该.pyc文件不存在,或者该文件在创建后.py已更改,则加载该文件并创建一个新文件。(值得注意的是,简单地运行一个 Python 文件,say不会导致 a创建。只有ing 模块会导致这种情况发生。).pyc.py.pyctest.pytest.pycimport

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

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

于 2009-04-20T12:25:28.413 回答
2

我启动了很多这样的应用程序

import os

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

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

于 2010-10-19T13:11:54.893 回答
1

我的oneliner为这份工作:

find . -name *.pyc |xargs rm

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

于 2010-10-05T00:14:46.500 回答