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

runpy.md

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

1> **Источник:** https://python-all.ru/3.1/library/runpy.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 29.5. `runpy` – Поиск и выполнение модулей Python89Модуль `runpy` используется для поиска и запуска модулей Python без их предварительного импорта. Основное его применение – реализация флага командной строки *-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(mod_name[, init_globals][, run_name][, alter_sys])`2122Выполняет код указанного модуля и возвращает результирующий словарь глобальных переменных модуля. Код модуля сначала находится с помощью стандартного механизма импорта (подробности см. в PEP 302), а затем выполняется в новом пространстве имён модуля.2324Если указанное имя модуля ссылается на пакет, а не на обычный модуль, то этот пакет импортируется, а затем выполняется подмодуль `__main__` внутри этого пакета, и возвращается результирующий словарь глобальных переменных модуля.2526Необязательный аргумент-словарь *init\_globals* может использоваться для предварительного заполнения словаря глобальных переменных перед выполнением кода. Переданный словарь не будет изменён. Если в переданном словаре определены какие-либо из перечисленных ниже специальных глобальных переменных, эти определения переопределяются функцией `run_module`.2728Специальные глобальные переменные `__name__`, `__file__`, `__loader__`, `__builtins__` и `__package__` устанавливаются в словаре глобальных переменных перед выполнением кода модуля.2930`__name__` устанавливается в *run\_name*, если передан этот необязательный аргумент, в `mod_name + '.__main__'`, если именованный модуль является пакетом, и в аргумент *mod\_name* в противном случае.3132`__loader__` устанавливается в загрузчик модуля PEP 302, используемый для получения кода модуля (этот загрузчик может быть обёрткой вокруг стандартного механизма импорта).3334`__file__` устанавливается в имя, предоставленное загрузчиком модуля. Если загрузчик не предоставляет информацию об имени файла, эта переменная устанавливается в `None`.3536`__builtins__` автоматически инициализируется ссылкой на пространство имён верхнего уровня модуля [`builtins`](https://python-all.ru/3.1/library/builtins.html#module-builtins).3738`__package__` устанавливается в *mod\_name*, если именованный модуль является пакетом, и в `mod_name.rpartition('.')[0]` в противном случае.3940Если аргумент *alter\_sys* передан и равен `True`, то `sys.argv[0]` обновляется значением `__file__`, а `sys.modules[__name__]` обновляется временным объектом модуля для выполняемого модуля. Оба значения `sys.argv[0]` и `sys.modules[__name__]` восстанавливаются до исходных перед возвратом из функции.4142Обратите внимание, что такие манипуляции с [`sys`](https://python-all.ru/3.1/library/sys.html#module-sys) не являются потокобезопасными. Другие потоки могут увидеть частично инициализированный модуль, а также изменённый список аргументов. Рекомендуется не трогать модуль [`sys`](https://python-all.ru/3.1/library/sys.html#module-sys) при вызове этой функции из многопоточного кода.4344Изменено в версии 3.1: Добавлена возможность выполнять пакеты путём поиска подмодуля `__main__`.4546> **См. также**47>48> **[**PEP 338**](https://python-all.ru/3.1/library/runpy.html) – Выполнение модулей как сценариев**49>50> PEP написан и реализован Ником Когланом.51>52> **[**PEP 366**](https://python-all.ru/3.1/library/runpy.html) – Явные относительные импорты главного модуля**53>54> PEP написан и реализован Ником Когланом.55