使用类似模块的pyc缓存的Python3 execfile?

时间:2018-07-08 08:43:29

标签: python-3.x pyc

首先,由于Python3删除了execfile,所以有必要write you're own,这很好,但是我想在以后的执行中使用pyc缓存。

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

有没有一种方法可以利用pyc缓存机制,该机制可以直接运行代码(因此不需要将其放在sys.path中或将其自身添加到{{1} }。

例如:

sys.modules

是否有某种方法可以近似此功能,并运行一个文件-在可能的情况下会创建/使用def my_execfile(filepath): globals = {'__name__': '__main__', '__file__': filepath} locals = {} with open(filepath, 'rb') as file: exec(compile(file.read(), filepath, 'exec'), globals, locals)

还是我需要编写自己的pyc缓存检查器,该检查器处理检查路径,比较文件时间戳记,写出字节码等等的详细信息。

1 个答案:

答案 0 :(得分:0)

这可以使用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