Ответ 1
2to3
script (также тот, что находится в Python 3.2) заменяет
execfile(filename, globals, locals)
по
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
Это, по-видимому, официальная рекомендация.
У Python 2 была встроенная функция execfile
, которая была удалена в Python 3.0. Этот вопрос обсуждает альтернативы для Python 3.0, но некоторые значительные изменения были сделаны с Python 3.0.
Какая наилучшая альтернатива execfile
для Python 3.2 и будущие версии Python 3.x?
2to3
script (также тот, что находится в Python 3.2) заменяет
execfile(filename, globals, locals)
по
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
Это, по-видимому, официальная рекомендация.
execfile(filename)
можно заменить на
exec(open(filename).read())
который работает во всех версиях Python
В Python3.x это самая близкая вещь, которую я мог бы придумать для непосредственного выполнения файла, который соответствует запуску python /path/to/somefile.py
.
Примечания:
__main__
, некоторые сценарии зависят от этого, чтобы проверить, загружаются ли они как модуль или нет, например. if __name__ == "__main__"
__file__
лучше для сообщений об исключениях, а некоторые скрипты используют __file__
для получения путей к другим файлам по отношению к ним.def exec_full(filepath):
import os
global_namespace = {
"__file__": filepath,
"__name__": "__main__",
}
with open(filepath, 'rb') as file:
exec(compile(file.read(), filepath, 'exec'), global_namespace)
# execute the file
exec_full("/path/to/somefile.py")
Стандартная runpy.run_path является альтернативой.