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

runpy.md

45 строк · 5.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.0/library/runpy.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `runpy` – Поиск и выполнение модулей Python89Модуль `runpy` используется для поиска и выполнения модулей Python без их предварительного импорта. Основное его применение – реализация [*-m*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-m) параметра командной строки который позволяет находить скрипты по пространству имён модулей Python а не по файловой системе.1011При запуске в качестве скрипта модуль работает следующим образом:1213```python14del sys.argv[0]  # Удалить модуль runpy из аргументов15run_module(sys.argv[0], run_name="__main__", alter_sys=True)16```1718Модуль `runpy` предоставляет одну функцию:1920#### `[runpy.run_module]runpy.run_module(mod_name[, init_globals][, run_name][, alter_sys])`2122Выполняет код указанного модуля и возвращает результирующий словарь глобальных переменных модуля. Код модуля сначала находится с помощью стандартного механизма импорта (подробности см. в PEP 302), а затем выполняется в новом пространстве имён модуля.2324Необязательный аргумент-словарь *init\_globals* может использоваться для предварительного заполнения словаря глобальных переменных перед выполнением кода. Переданный словарь не будет изменён. Если в переданном словаре определены какие-либо из перечисленных ниже специальных глобальных переменных, эти определения переопределяются функцией `run_module`.2526Специальные глобальные переменные `__name__`, `__file__`, `__loader__` и `__builtins__` устанавливаются в словаре globals перед выполнением кода модуля.2728`__name__` устанавливается в значение *run\_name*, если этот необязательный аргумент задан, и в значение аргумента *mod\_name* в противном случае.2930`__loader__` устанавливается в загрузчик модуля PEP 302, используемый для получения кода модуля (этот загрузчик может быть обёрткой вокруг стандартного механизма импорта).3132`__file__` устанавливается в имя, предоставленное загрузчиком модуля. Если загрузчик не предоставляет информацию об имени файла, эта переменная устанавливается в `None`.3334`__builtins__` автоматически инициализируется ссылкой на пространство имён верхнего уровня модуля [`builtins`](https://python-all.ru/3.0/library/builtins.html#module-builtins).3536Если аргумент *alter\_sys* передан и равен `True`, то `sys.argv[0]` обновляется значением `__file__`, а `sys.modules[__name__]` обновляется временным объектом модуля для выполняемого модуля. Оба значения `sys.argv[0]` и `sys.modules[__name__]` восстанавливаются до исходных перед возвратом из функции.3738Обратите внимание, что такие манипуляции с [`sys`](https://python-all.ru/3.0/library/sys.html#module-sys) не являются потокобезопасными. Другие потоки могут увидеть частично инициализированный модуль, а также изменённый список аргументов. Рекомендуется не трогать модуль [`sys`](https://python-all.ru/3.0/library/sys.html#module-sys) при вызове этой функции из многопоточного кода.3940> **См. также**41>42> **[**PEP 338**](https://python-all.ru/3.0/library/runpy.html) – Выполнение модулей как сценариев**43>44> PEP написан и реализован Ником Когленом.45