Документация Python неофициальный перевод

runpy – Поиск и выполнение модулей Pythonrunpy – Locating and executing Python modules

Модуль runpy используется для поиска и выполнения модулей Python без их предварительного импорта. Основное его применение – реализация -m параметра командной строки который позволяет находить скрипты по пространству имён модулей Python а не по файловой системе.

При запуске в качестве скрипта модуль работает следующим образом:

del sys.argv[0]  # Удалить модуль runpy из аргументов
run_module(sys.argv[0], run_name="__main__", alter_sys=True)

Модуль runpy предоставляет одну функцию:

runpy.run_module(mod_name[, init_globals][, run_name][, alter_sys])

Выполняет код указанного модуля и возвращает результирующий словарь глобальных переменных модуля. Код модуля сначала находится с помощью стандартного механизма импорта (подробности см. в PEP 302), а затем выполняется в новом пространстве имён модуля.

Необязательный аргумент-словарь init_globals может использоваться для предварительного заполнения словаря глобальных переменных перед выполнением кода. Переданный словарь не будет изменён. Если в переданном словаре определены какие-либо из перечисленных ниже специальных глобальных переменных, эти определения переопределяются функцией run_module.

Специальные глобальные переменные __name__, __file__, __loader__ и __builtins__ устанавливаются в словаре globals перед выполнением кода модуля.

__name__ устанавливается в значение run_name, если этот необязательный аргумент задан, и в значение аргумента mod_name в противном случае.

__loader__ устанавливается в загрузчик модуля PEP 302, используемый для получения кода модуля (этот загрузчик может быть обёрткой вокруг стандартного механизма импорта).

__file__ устанавливается в имя, предоставленное загрузчиком модуля. Если загрузчик не предоставляет информацию об имени файла, эта переменная устанавливается в None.

__builtins__ автоматически инициализируется ссылкой на пространство имён верхнего уровня модуля builtins.

Если аргумент alter_sys передан и равен True, то sys.argv[0] обновляется значением __file__, а sys.modules[__name__] обновляется временным объектом модуля для выполняемого модуля. Оба значения sys.argv[0] и sys.modules[__name__] восстанавливаются до исходных перед возвратом из функции.

Обратите внимание, что такие манипуляции с sys не являются потокобезопасными. Другие потоки могут увидеть частично инициализированный модуль, а также изменённый список аргументов. Рекомендуется не трогать модуль sys при вызове этой функции из многопоточного кода.

См. также

PEP 338 – Выполнение модулей как сценариев
PEP написан и реализован Ником Когленом.