首先,由于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
缓存检查器,该检查器处理检查路径,比较文件时间戳记,写出字节码等等的详细信息。
答案 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