删除 *.pyc 继续操作
接着之前的一个问题,我有了一个新问题:
os.remove(module_name)
和 del sys.modules["module_name"]
这两个操作内部到底发生了什么呢?
3 个回答
这是我为这个任务写的简洁代码:
find . -name *.pyc |xargs rm
注意:你需要使用Linux(或类似Unix的操作系统)
我通常这样启动很多应用程序
import os
os.system('attrib +H *.pyc /S')
在Windows系统上,这样做可以在应用程序启动时隐藏任何可见的编译文件——这些文件让我感到烦恼。
简单来说,os.remove(module_name)
是用来从文件系统中删除一个文件的。而 del sys.modules["module_name"]
则是从当前 Python 解释器维护的已加载模块缓存中删除一个模块。
在 Python 中,当你导入一个模块时,解释器会检查是否存在一个与要导入的 .py
文件同名的 .pyc
文件。如果存在,并且自从这个 .pyc
文件被导入后,.py
文件没有变化,那么 Python 会加载这个 .pyc
文件(这样会快很多)。
如果 .pyc
文件不存在,或者自从 .pyc
文件创建后,.py
文件有了变化,那么就会加载 .py
文件,并创建一个新的 .pyc
文件。(值得注意的是,单纯运行一个 Python 文件,比如 test.py
并不会导致生成 test.pyc
文件。只有在导入模块时,才会发生这种情况。)
sys.modules
则是另一个话题。为了加快多次导入同一个模块的代码执行,Python 会在当前解释器会话中维护一个已导入模块的列表。如果要导入的模块在 sys.modules
中,那么就会直接读取缓存中的版本(不会去检查磁盘上的 .py
或 .pyc
文件)。Python 提供了一个内置函数 reload()
,可以让你绕过模块缓存,强制从磁盘重新加载模块。
想要了解更多关于 Python 模块系统的信息,可以查看关于 模块 的文档。