作为这个问题的后续,我有一个新问题:
os.remove(module_name)
和内部发生了什么del sys.modules["module_name"]
?
作为这个问题的后续,我有一个新问题:
os.remove(module_name)
和内部发生了什么del sys.modules["module_name"]
?
简短的回答是这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
.pyc
test.py
test.pyc
import
sys.modules
完全是另一回事。为了加速两次导入相同模块的代码,Python 维护了在当前解释器会话期间已导入的模块列表。如果要导入的模块在 中sys.modules
,则将读取缓存的版本(也.py
不会.pyc
检查磁盘上的文件)。Python 提供了一个内置函数reload()
,允许您绕过模块缓存并强制从磁盘重新加载。
要获取有关 Python 模块系统的更多信息,请参阅有关模块的文档。
我启动了很多这样的应用程序
import os
os.system('attrib +H *.pyc /S')
在 Windows 上,这会在应用程序启动时隐藏任何可见的编译文件——它们给了我点数。
我的oneliner为这份工作:
find . -name *.pyc |xargs rm
注意:您需要 Linux(或类 Unix 操作系统)