Python 3.x Python3中的execfile是否使用pyc缓存之类的模块?

Python 3.x Python3中的execfile是否使用pyc缓存之类的模块?,python-3.x,pyc,Python 3.x,Pyc,首先,由于Python3已经删除了execfile,所以有必要,这很好,但是我希望在将来的执行中使用pyc缓存 在Python中导入模块可以自动生成pyc文件,当新的Python进程需要再次导入模块时,该文件将用于避免解析文件 有没有一种方法可以使用直接运行代码的pyc缓存机制(因此它不需要位于sys.path中,也不需要将其自身添加到sys.modules) 例如: 有没有一种方法可以让这个函数运行一个文件,在可能的情况下创建/使用一个pyc 或者我需要编写自己的pyccache checke

首先,由于Python3已经删除了execfile,所以有必要,这很好,但是我希望在将来的执行中使用pyc缓存

在Python中导入模块可以自动生成
pyc
文件,当新的Python进程需要再次导入模块时,该文件将用于避免解析文件

有没有一种方法可以使用直接运行代码的
pyc
缓存机制(因此它不需要位于
sys.path
中,也不需要将其自身添加到
sys.modules

例如:

有没有一种方法可以让这个函数运行一个文件,在可能的情况下创建/使用一个
pyc


或者我需要编写自己的
pyc
cache checker来处理检查路径、比较文件时间戳、写出字节码的详细信息。。等等。

这可以使用importlib完成, 尽管它使用导入逻辑,但它的工作原理与常规文件执行类似

def execfile_cached(filepath, mod=None):
    # module name isn't used or added to 'sys.modules'.
    # passing in 'mod' allows re-execution
    # without having to reload.

    import importlib.util
    mod_spec = importlib.util.spec_from_file_location("__main__", filepath)
    if mod is None:
        mod = importlib.util.module_from_spec(mod_spec)
    mod_spec.loader.exec_module(mod)
    return mod
def execfile_cached(filepath, mod=None):
    # module name isn't used or added to 'sys.modules'.
    # passing in 'mod' allows re-execution
    # without having to reload.

    import importlib.util
    mod_spec = importlib.util.spec_from_file_location("__main__", filepath)
    if mod is None:
        mod = importlib.util.module_from_spec(mod_spec)
    mod_spec.loader.exec_module(mod)
    return mod