Python3 execfile в том, что использует модульный PyC кэш?
Во-первых, поскольку Python3 удалил execfile, необходимо написать, что вы сами, это нормально, однако я бы хотел использовать pyc-кеш для будущих выполнений.
Импорт модуля в Python может автоматически сгенерировать pyc
файл, который будет использоваться, чтобы избежать синтаксического анализа файла, когда новый процесс Python должен снова импортировать модуль.
Есть ли способ использовать pyc
механизм кэширования, который запускает код напрямую (поэтому он не должен быть в sys.path
или добавить себя в 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
когда возможно?
Или мне нужно написать свой pyc
проверка кэша, которая обрабатывает детали проверки пути, сравнения меток времени файла, выписывает байт-код... и т. д.
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