cmdline.md · Markdown – Документация Python
Документация Python неофициальный перевод

cmdline.md

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

1> **Источник:** https://python-all.ru/3.7/using/cmdline.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 1. Командная строка и окружение89Интерпретатор CPython сканирует командную строку и окружение на предмет различных настроек.1011**Особенности реализации CPython:** схемы командной строки других реализаций могут отличаться. Для получения дополнительных сведений см. [Альтернативные реализации](https://python-all.ru/3.7/reference/introduction.html#implementations).1213## 1.1. Командная строка1415При запуске Python можно указать любые из этих опций:1617```sh18python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]19```2021Наиболее распространённый вариант использования – это простой запуск скрипта:2223```sh24python myscript.py25```2627### 1.1.1. Опции интерфейса2829Интерфейс интерпретатора напоминает интерфейс командной оболочки UNIX, но предоставляет дополнительные способы запуска:3031- При вызове с подключённым к tty-устройству стандартным вводом интерпретатор выводит приглашение для команд и выполняет их, пока не будет прочитан EOF (символ конца файла; в UNIX его можно ввести с помощью `Ctrl-D`, а в Windows – с помощью `Ctrl-Z, Enter`).32- При вызове с именем файла в качестве аргумента или с файлом в качестве стандартного ввода он читает и выполняет скрипт из этого файла.33- При вызове с именем каталога в качестве аргумента он читает и выполняет соответствующий скрипт из этого каталога.34- При вызове с `-c command` выполняется инструкция(и) Python, переданная как *command*. Здесь *command* может содержать несколько инструкций, разделённых переводами строк. Начальные пробелы в инструкциях Python значимы!35- При вызове с `-m module-name` указанный модуль находится в пути поиска модулей Python и выполняется как скрипт.3637В неинтерактивном режиме весь ввод анализируется до его выполнения.3839При указании опции интерфейса список параметров, обрабатываемых интерпретатором, завершается, и все последующие аргументы попадают в [`sys.argv`](https://python-all.ru/3.7/library/sys.html#sys.argv) – первый элемент (индекс ноль, `sys.argv[0]`) является строкой, указывающей на источник программы.4041#### `-c <command>`4243Выполняет код Python, указанный в *command*. *command* может содержать одну или несколько инструкций, разделённых переводами строк; начальные пробелы, как и в обычном коде модуля, имеют значение.4445Если указана эта опция, первый элемент [`sys.argv`](https://python-all.ru/3.7/library/sys.html#sys.argv) будет равен `"-c"`, а текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path) (что позволяет импортировать модули из этого каталога как модули верхнего уровня).4647#### `-m <module-name>`4849Ищет [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path) указанный модуль и выполняет его содержимое как модуль [`__main__`](https://python-all.ru/3.7/library/__main__.html#module-__main__).5051Поскольку аргумент является именем *модуля*, не следует указывать расширение файла (`.py`). Имя модуля должно быть допустимым абсолютным именем модуля Python, но реализация может не всегда это проверять (например, может позволить использовать имя, содержащее дефис).5253Имена пакетов (включая пакеты пространств имён) также допускаются. Если вместо обычного модуля указано имя пакета, интерпретатор выполнит `<pkg>.__main__` в качестве главного модуля. Это поведение намеренно аналогично обработке каталогов и zip-файлов, которые передаются интерпретатору в качестве аргумента скрипта.5455> **Примечание**56>57> Эту опцию нельзя использовать со встроенными модулями и модулями расширения, написанными на C, поскольку у них нет файлов модулей Python. Однако её можно использовать для предварительно скомпилированных модулей, даже если исходный файл недоступен.5859Если эта опция указана, первый элемент [`sys.argv`](https://python-all.ru/3.7/library/sys.html#sys.argv) будет содержать полный путь к файлу модуля (пока файл модуля находится, первый элемент будет установлен в `"-m"`). Как и в случае с опцией [`-c`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-c), текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path).6061[`-I`](https://python-all.ru/3.7/using/cmdline.html#id2) можно использовать для запуска скрипта в изолированном режиме, где [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path) не содержит ни текущего каталога, ни каталога site-packages пользователя. Все переменные окружения `PYTHON*` также игнорируются.6263Многие модули стандартной библиотеки содержат код, который вызывается при их выполнении в качестве скрипта. Примером может служить модуль [`timeit`](https://python-all.ru/3.7/library/timeit.html#module-timeit):6465```sh66python -m timeit -s 'setup here' 'benchmarked code here'67python -m timeit -h # подробнее68```6970> **См. также**71>72> **[`runpy.run_module()`](https://python-all.ru/3.7/library/runpy.html#runpy.run_module)**73>74> Эквивалентная функциональность, доступная напрямую из кода Python75>76> [**PEP 338**](https://python-all.ru/3.7/using/cmdline.html) – Выполнение модулей как сценариев7778Изменено в версии 3.1: Укажите имя пакета, чтобы запустить подмодуль `__main__`.7980Изменено в версии 3.4: также поддерживаются пространственные пакеты8182#### `-`8384Читает команды из стандартного ввода ([`sys.stdin`](https://python-all.ru/3.7/library/sys.html#sys.stdin)). Если стандартный ввод является терминалом, подразумевается [`-i`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-i).8586Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.7/library/sys.html#sys.argv) будет `"-"`, а текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path).8788#### `<script>`8990Выполняет код Python, содержащийся в *скрипте*, который должен быть файловым путем (абсолютным или относительным), указывающим на файл Python, каталог с файлом `__main__.py` или ZIP-файл, содержащий файл `__main__.py`.9192Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.7/library/sys.html#sys.argv) будет имя скрипта, заданное в командной строке.9394Если имя скрипта указывает непосредственно на файл Python, каталог, содержащий этот файл, добавляется в начало [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path), а сам файл выполняется как модуль [`__main__`](https://python-all.ru/3.7/library/__main__.html#module-__main__).9596Если имя скрипта ссылается на каталог или ZIP-файл, имя скрипта добавляется в начало [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path), а файл `__main__.py` в этом расположении выполняется как модуль [`__main__`](https://python-all.ru/3.7/library/__main__.html#module-__main__).9798[`-I`](https://python-all.ru/3.7/using/cmdline.html#id2) можно использовать для запуска скрипта в изолированном режиме, где [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path) не содержит ни каталога скрипта, ни каталога site-packages пользователя. Все переменные окружения `PYTHON*` также игнорируются.99100> **См. также**101>102> **[`runpy.run_path()`](https://python-all.ru/3.7/library/runpy.html#runpy.run_path)**103>104> Эквивалентная функциональность, доступная напрямую из кода Python105106Если не указана опция интерфейса, подразумевается [`-i`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-i), `sys.argv[0]` является пустой строкой (`""`), а текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path). Кроме того, автодополнение по табуляции и редактирование истории автоматически включаются, если это доступно на вашей платформе (см. [конфигурацию Readline](https://python-all.ru/3.7/library/site.html#rlcompleter-config)).107108> **См. также**109>110> [Запуск интерпретатора](https://python-all.ru/3.7/tutorial/interpreter.html#tut-invoking)111112Изменено в версии 3.4: Автоматическое включение автодополнения по табуляции и редактирования истории.113114### 1.1.2. Общие опции115116#### `-?`117118#### `-h`119120#### `--help`121122Выводит краткое описание всех параметров командной строки.123124#### `-V`125126#### `--version`127128Выводит номер версии Python и завершает работу. Пример вывода:129130```text131Python 3.7.0b2+132```133134При указании дважды выводит более подробную информацию о сборке, например:135136```text137Python 3.7.0b2+ (3.7:0c076caaa8, Sep 22 2018, 12:04:24)138[GCC 6.2.0 20161005]139```140141Новое в версии 3.6: Опция `-VV`.142143### 1.1.3. Прочие опции144145#### `-b`146147Выдаёт предупреждение при сравнении [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.7/library/stdtypes.html#bytearray) с [`str`](https://python-all.ru/3.7/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) с [`int`](https://python-all.ru/3.7/library/functions.html#int). Выдаёт ошибку, если параметр указан дважды (`-bb`).148149Изменено в версии 3.5: Влияет на сравнения [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) с [`int`](https://python-all.ru/3.7/library/functions.html#int).150151#### `-B`152153Если указан, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей. См. также [`PYTHONDONTWRITEBYTECODE`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE).154155#### `--check-hash-based-pycs default|always|never`156157Управляет проверкой файлов `.pyc` на основе хэша. См. [Инвалидация кэшированного байт-кода](https://python-all.ru/3.7/reference/import.html#pyc-invalidation). Если установлено в `default`, проверенные и непроверенные кэш-файлы байт-кода на основе хэша проверяются в соответствии с их стандартной семантикой. Если установлено в `always`, все файлы `.pyc` на основе хэша, как проверенные, так и непроверенные, проверяются на соответствие соответствующему исходному файлу. Если установлено в `never`, файлы `.pyc` на основе хэша не проверяются на соответствие соответствующим исходным файлам.158159На семантику файлов `.pyc` на основе временных меток эта опция не влияет.160161#### `-d`162163Включает отладочный вывод парсера (только для экспертов, зависит от опций компиляции). См. также [`PYTHONDEBUG`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONDEBUG).164165#### `-E`166167Игнорировать все переменные окружения `PYTHON*`, например [`PYTHONPATH`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONPATH) и [`PYTHONHOME`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHOME), которые могут быть установлены.168169#### `-i`170171Когда в качестве первого аргумента передан сценарий или используется опция [`-c`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-c), интерактивный режим запускается после выполнения сценария или команды, даже если [`sys.stdin`](https://python-all.ru/3.7/library/sys.html#sys.stdin) не выглядит как терминал. Файл [`PYTHONSTARTUP`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONSTARTUP) при этом не читается.172173Это может быть полезно для проверки глобальных переменных или трассировки стека, когда скрипт вызывает исключение. См. также [`PYTHONINSPECT`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONINSPECT).174175#### `-I`176177Запускает Python в изолированном режиме. Это также подразумевает -E и -s. В изолированном режиме [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path) не содержит ни каталога скрипта, ни каталога site-packages пользователя. Все переменные окружения `PYTHON*` также игнорируются. Могут быть наложены дополнительные ограничения, чтобы предотвратить внедрение пользователем вредоносного кода.178179Новое в версии 3.4.180181#### `-O`182183Удаляет операторы assert и любой код, зависящий от значения [`__debug__`](https://python-all.ru/3.7/library/constants.html#__debug__). Дополняет имя файла для скомпилированных ([байт-код](https://python-all.ru/3.7/glossary.html#term-bytecode)) файлов, добавляя `.opt-1` перед расширением `.pyc` (см. [**PEP 488**](https://python-all.ru/3.7/using/cmdline.html)). См. также [`PYTHONOPTIMIZE`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONOPTIMIZE).184185Изменено в версии 3.5: Изменяет имена файлов `.pyc` в соответствии с [**PEP 488**](https://python-all.ru/3.7/using/cmdline.html).186187#### `-OO`188189Выполняет [`-O`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-o), а также отбрасывает строки документации. Дополняет имя файла для скомпилированных ([байт-код](https://python-all.ru/3.7/glossary.html#term-bytecode)) файлов, добавляя `.opt-2` перед расширением `.pyc` (см. [**PEP 488**](https://python-all.ru/3.7/using/cmdline.html)).190191Изменено в версии 3.5: Изменяет имена файлов `.pyc` в соответствии с [**PEP 488**](https://python-all.ru/3.7/using/cmdline.html).192193#### `-q`194195Не выводить сообщения об авторских правах и версии, даже в интерактивном режиме.196197Новое в версии 3.2.198199#### `-R`200201Включает рандомизацию хешей. Этот параметр действует только в том случае, если переменная окружения [`PYTHONHASHSEED`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHASHSEED) установлена в `0`, так как рандомизация хешей включена по умолчанию.202203В предыдущих версиях Python этот параметр включает рандомизацию хэшей, так что значения [`__hash__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__hash__) для str, bytes и datetime «солятся» непредсказуемым случайным значением. Хотя они остаются постоянными в пределах одного процесса Python, они непредсказуемы при повторных запусках Python.204205Хэш-рандомизация предназначена для защиты от отказа в обслуживании, вызванного тщательно подобранными входными данными, которые используют наихудшую производительность построения словаря (сложность O(n²)). Подробнее см. [http://www.ocert.org/advisories/ocert-2011-003.html](https://python-all.ru/3.7/using/cmdline.html).206207[`PYTHONHASHSEED`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHASHSEED) позволяет задать фиксированное значение для секрета начального значения хеша.208209Изменено в версии 3.7: Опция больше не игнорируется.210211Новое в версии 3.2.3.212213#### `-s`214215Не добавляет [`user site-packages directory`](https://python-all.ru/3.7/library/site.html#site.USER_SITE) в [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path).216217> **См. также**218>219> [**PEP 370**](https://python-all.ru/3.7/using/cmdline.html) – Каталог site-packages для каждого пользователя220221#### `-S`222223Отключает импорт модуля [`site`](https://python-all.ru/3.7/library/site.html#module-site) и связанные с ним site-зависимые манипуляции с [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path). Также отключает эти манипуляции, если [`site`](https://python-all.ru/3.7/library/site.html#module-site) явно импортирован позже (для их выполнения следует вызвать [`site.main()`](https://python-all.ru/3.7/library/site.html#site.main)).224225#### `-u`226227Принудительно отключает буферизацию для потоков stdout и stderr. Эта опция не влияет на поток stdin.228229См. также [`PYTHONUNBUFFERED`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONUNBUFFERED).230231Изменено в версии 3.7: Текстовый слой потоков stdout и stderr теперь не буферизуется.232233#### `-v`234235Выводит сообщение при каждой инициализации модуля, показывая место (имя файла или встроенный модуль), из которого он загружается. При указании дважды (`-vv`) выводит сообщение для каждого файла, проверяемого при поиске модуля. Также предоставляет информацию об очистке модуля при завершении. См. также [`PYTHONVERBOSE`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONVERBOSE).236237#### `-W arg`238239Управление предупреждениями. Механизм предупреждений Python по умолчанию выводит предупреждения в [`sys.stderr`](https://python-all.ru/3.7/library/sys.html#sys.stderr). Типичное предупреждение имеет следующий вид:240241```text242file:line: category: message243```244245По умолчанию каждое предупреждение выводится один раз для каждой строки исходного кода, в которой оно возникает. Этот параметр управляет частотой вывода предупреждений.246247Может быть указано несколько параметров [`-W`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-w); если предупреждение соответствует более чем одному параметру, выполняется действие последнего подходящего параметра. Недопустимые параметры [`-W`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-w) игнорируются (однако при выдаче первого предупреждения выводится сообщение о недопустимых параметрах).248249Предупреждения также можно контролировать с помощью переменной окружения [`PYTHONWARNINGS`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONWARNINGS) и из программы на Python с помощью модуля [`warnings`](https://python-all.ru/3.7/library/warnings.html#module-warnings).250251Простейшие настройки применяют определённое действие безусловно ко всем предупреждениям, выдаваемым процессом (даже к тем, которые в противном случае игнорируются по умолчанию):252253```sh254-Wdefault  # Предупреждать один раз на место вызова255-Werror    # Преобразовывать в исключения256-Walways   # Предупреждать каждый раз257-Wmodule   # Предупреждать один раз на вызывающий модуль258-Wonce     # Предупреждать один раз на процесс Python259-Wignore   # Никогда не предупреждать260```261262Имена действий можно сокращать по желанию (например, `-Wi`, `-Wd`, `-Wa`, `-We`), и интерпретатор преобразует их в соответствующее имя действия.263264См. [Фильтр предупреждений](https://python-all.ru/3.7/library/warnings.html#warning-filter) и [Описание фильтров предупреждений](https://python-all.ru/3.7/library/warnings.html#describing-warning-filters) для получения дополнительных сведений.265266#### `-x`267268Пропускает первую строку исходного файла, позволяя использовать не-юниксовые формы `#!cmd`. Это предназначено только для специфического хака DOS.269270#### `-X`271272Зарезервировано для различных опций, специфичных для реализации. В настоящее время CPython определяет следующие возможные значения:273274- `-X faulthandler` для включения [`faulthandler`](https://python-all.ru/3.7/library/faulthandler.html#module-faulthandler);275- `-X showrefcount` вывод общего количества ссылок и числа использованных блоков памяти при завершении программы или после каждого оператора в интерактивном интерпретаторе. Работает только в отладочных сборках.276- `-X tracemalloc` для начала трассировки выделений памяти Python с помощью модуля [`tracemalloc`](https://python-all.ru/3.7/library/tracemalloc.html#module-tracemalloc). По умолчанию в обратной трассировке сохраняется только самый последний кадр. Используйте `-X tracemalloc=NFRAME`, чтобы начать трассировку с лимитом обратной трассировки в *NFRAME* кадров. Дополнительную информацию см. в [`tracemalloc.start()`](https://python-all.ru/3.7/library/tracemalloc.html#tracemalloc.start).277- `-X showalloccount` для вывода общего количества выделенных объектов для каждого типа при завершении программы. Это работает только при сборке Python с определённым `COUNT_ALLOCS`.278- `-X int_max_str_digits` настраивает [ограничение длины преобразования целых чисел в строки](https://python-all.ru/3.7/library/stdtypes.html#int-max-str-digits). См. также [`PYTHONINTMAXSTRDIGITS`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONINTMAXSTRDIGITS).279- `-X importtime` показывает, сколько времени занимает каждый импорт. Отображается модуль имя, совокупное время (включая вложенные импорты) и собственное время (без учёта вложенных импортов). Обратите внимание, что вывод может быть нарушен в многопоточном приложении. Типичное использование: `python3 -X importtime -c 'import asyncio'`. См. также [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME).280- `-X dev`: включает «режим разработки» CPython, добавляя дополнительные проверки во время выполнения, которые слишком затратны для включения по умолчанию. Если код корректен, вывод не должен быть более подробным, чем по умолчанию: новые предупреждения выводятся только при обнаружении проблемы. Результаты включения режима разработчика:281282  - Добавляет фильтр предупреждений `default` как [`-W`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-w) `default`.283  - Устанавливает отладочные перехватчики (debug hooks) на распределители памяти: см. C-функцию [`PyMem_SetupDebugHooks()`](https://python-all.ru/3.7/c-api/memory.html#c.PyMem_SetupDebugHooks).284  - Включает модуль [`faulthandler`](https://python-all.ru/3.7/library/faulthandler.html#module-faulthandler) для сброса трассировки Python при аварийном завершении.285  - Включает [режим отладки asyncio](https://python-all.ru/3.7/library/asyncio-dev.html#asyncio-debug-mode).286  - Устанавливает атрибут `dev_mode` объекта [`sys.flags`](https://python-all.ru/3.7/library/sys.html#sys.flags) в значение `True`.287- `-X utf8` включает режим UTF-8 для интерфейсов операционной системы, переопределяя режим, зависящий от локали по умолчанию. `-X utf8=0` явно отключает режим UTF-8 (даже если бы он в противном случае активировался автоматически). Подробнее см. [`PYTHONUTF8`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONUTF8).288289Он также позволяет передавать произвольные значения и извлекать их через словарь [`sys._xoptions`](https://python-all.ru/3.7/library/sys.html#sys._xoptions).290291Изменено в версии 3.2: Был добавлен параметр [`-X`](https://python-all.ru/3.7/using/cmdline.html#id5).292293Новое в версии 3.3: Параметр `-X faulthandler`.294295Новое в версии 3.4: Параметры `-X showrefcount` и `-X tracemalloc`.296297Новое в версии 3.6: Опция `-X showalloccount`.298299Новое в версии 3.7: Параметры `-X importtime`, `-X dev` и `-X utf8`.300301Новое в версии 3.7.14: Параметр `-X int_max_str_digits`.302303### 1.1.4. Параметры, которые не стоит использовать304305#### `-J`306307Зарезервировано для [Jython](https://python-all.ru/3.7/using/cmdline.html).308309## 1.2. Переменные окружения310311Эти переменные окружения влияют на поведение Python, они обрабатываются до параметров командной строки, кроме -E или -I. Принято, что параметры командной строки переопределяют переменные окружения в случае конфликта.312313**`PYTHONHOME`**314315Изменяет расположение стандартных библиотек Python. По умолчанию библиотеки ищутся в `prefix/lib/pythonversion` и `exec_prefix/lib/pythonversion`, где `prefix` и `exec_prefix` – это каталоги, зависящие от установки; оба по умолчанию имеют значение `/usr/local`.316317Когда [`PYTHONHOME`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHOME) установлен в один каталог, его значение заменяет оба `prefix` и `exec_prefix`. Чтобы указать для них разные значения, установите [`PYTHONHOME`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHOME) в `prefix:exec_prefix`.318319**`PYTHONPATH`**320321Дополняет путь поиска модулей по умолчанию. Формат такой же, как у `PATH` оболочки: один или несколько путей к каталогам, разделённых [`os.pathsep`](https://python-all.ru/3.7/library/os.html#os.pathsep) (например, двоеточиями в Unix или точкой с запятой в Windows). Несуществующие каталоги игнорируются без предупреждения.322323В дополнение к обычным каталогам, отдельные записи [`PYTHONPATH`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONPATH) могут ссылаться на zip-файлы, содержащие чистые модули Python (в исходной или скомпилированной форме). Модули расширений не могут быть импортированы из zip-файлов.324325Путь поиска по умолчанию зависит от установки, но обычно начинается с `prefix/lib/pythonversion` (см. [`PYTHONHOME`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHOME) выше). Он *всегда* добавляется к [`PYTHONPATH`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONPATH).326327Дополнительный каталог будет вставлен в путь поиска перед [`PYTHONPATH`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONPATH), как описано выше в разделе [Параметры интерфейса](https://python-all.ru/3.7/using/cmdline.html#using-on-interface-options). Путь поиска можно изменять из программы Python как переменную [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path).328329**`PYTHONSTARTUP`**330331Если это имя читаемого файла, команды Python из этого файла выполняются перед отображением первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имён, что и интерактивные команды, поэтому определённые или импортированные в нём объекты могут использоваться без уточнения в интерактивном сеансе. Также в этом файле можно изменить приглашения [`sys.ps1`](https://python-all.ru/3.7/library/sys.html#sys.ps1) и [`sys.ps2`](https://python-all.ru/3.7/library/sys.html#sys.ps2) и хук [`sys.__interactivehook__`](https://python-all.ru/3.7/library/sys.html#sys.__interactivehook__).332333**`PYTHONOPTIMIZE`**334335Если эта переменная установлена в непустую строку, это эквивалентно указанию опции [`-O`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-o). Если установлено целое число, это эквивалентно указанию [`-O`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-o) несколько раз.336337**`PYTHONBREAKPOINT`**338339Если эта переменная установлена, она задаёт вызываемый объект в нотации с точками. Модуль, содержащий вызываемый объект, будет импортирован, а затем вызываемый объект будет запущен реализацией по умолчанию [`sys.breakpointhook()`](https://python-all.ru/3.7/library/sys.html#sys.breakpointhook), которая сама вызывается встроенной [`breakpoint()`](https://python-all.ru/3.7/library/functions.html#breakpoint). Если не установлена или установлена в пустую строку, это эквивалентно значению "pdb.set\_trace". Установка в строку "0" заставляет реализацию по умолчанию [`sys.breakpointhook()`](https://python-all.ru/3.7/library/sys.html#sys.breakpointhook) ничего не делать и немедленно вернуться.340341Добавлено в версии 3.7.342343**`PYTHONDEBUG`**344345Если эта переменная установлена в непустую строку, это эквивалентно указанию опции [`-d`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-d). Если установлено целое число, это эквивалентно указанию [`-d`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-d) несколько раз.346347**`PYTHONINSPECT`**348349Если эта переменная установлена в непустую строку, это эквивалентно указанию опции [`-i`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-i).350351Эта переменная также может быть изменена кодом Python с помощью [`os.environ`](https://python-all.ru/3.7/library/os.html#os.environ), чтобы принудительно включить режим инспектирования при завершении программы.352353**`PYTHONUNBUFFERED`**354355Если эта переменная установлена в непустую строку, это эквивалентно указанию опции [`-u`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-u).356357**`PYTHONVERBOSE`**358359Если эта переменная установлена в непустую строку, это эквивалентно указанию опции [`-v`](https://python-all.ru/3.7/using/cmdline.html#id4). Если установлено целое число, это эквивалентно указанию [`-v`](https://python-all.ru/3.7/using/cmdline.html#id4) несколько раз.360361**`PYTHONCASEOK`**362363Если переменная установлена, Python игнорирует регистр в операторах [`import`](https://python-all.ru/3.7/reference/simple_stmts.html#import). Это работает только в Windows и OS X.364365**`PYTHONDONTWRITEBYTECODE`**366367Если эта переменная установлена в непустую строку, Python не будет пытаться записывать файлы `.pyc` при импорте исходных модулей. Это эквивалентно указанию опции [`-B`](https://python-all.ru/3.7/using/cmdline.html#id1).368369**`PYTHONHASHSEED`**370371Если эта переменная не установлена или установлена в `random`, для инициализации хэшей объектов str, bytes и datetime используется случайное значение.372373Если [`PYTHONHASHSEED`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONHASHSEED) установлено в целое число, оно используется как фиксированное начальное значение для генерации hash() для типов, охваченных рандомизацией хешей.374375Его цель – обеспечить воспроизводимое хеширование, например, для самотестирования самого интерпретатора, или чтобы позволить кластеру процессов Python обмениваться значениями хешей.376377Целое число должно быть десятичным числом в диапазоне \[0, 4294967295\]. Указание значения 0 отключит рандомизацию хешей.378379Новое в версии 3.2.3.380381**`PYTHONINTMAXSTRDIGITS`**382383Если эта переменная установлена в целое число, она используется для настройки глобального [ограничения длины преобразования целого числа в строку](https://python-all.ru/3.7/library/stdtypes.html#int-max-str-digits).384385Новое в версии 3.7.14.386387**`PYTHONIOENCODING`**388389Если эта переменная установлена до запуска интерпретатора, она переопределяет кодировку, используемую для stdin/stdout/stderr, в синтаксисе `encodingname:errorhandler`. Обе части `encodingname` и `:errorhandler` необязательны и имеют то же значение, что и в [`str.encode()`](https://python-all.ru/3.7/library/stdtypes.html#str.encode).390391Для stderr часть `:errorhandler` игнорируется; обработчик всегда будет `'backslashreplace'`.392393Изменено в версии 3.4: Часть `encodingname` теперь необязательна.394395Изменено в версии 3.6: В Windows кодировка, указанная этой переменной, игнорируется для интерактивных буферов консоли, если также не указана [`PYTHONLEGACYWINDOWSSTDIO`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSSTDIO). Файлы и каналы, перенаправленные через стандартные потоки, не затрагиваются.396397**`PYTHONNOUSERSITE`**398399Если эта переменная установлена, Python не будет добавлять [`user site-packages directory`](https://python-all.ru/3.7/library/site.html#site.USER_SITE) в [`sys.path`](https://python-all.ru/3.7/library/sys.html#sys.path).400401> **См. также**402>403> [**PEP 370**](https://python-all.ru/3.7/using/cmdline.html) – Каталог site-packages для каждого пользователя404405**`PYTHONUSERBASE`**406407Определяет [`user base directory`](https://python-all.ru/3.7/library/site.html#site.USER_BASE), который используется для вычисления пути [`user site-packages directory`](https://python-all.ru/3.7/library/site.html#site.USER_SITE) и [путей установки Distutils](https://python-all.ru/3.7/install/index.html#inst-alt-install-user) для `python setup.py install --user`.408409> **См. также**410>411> [**PEP 370**](https://python-all.ru/3.7/using/cmdline.html) – Каталог site-packages для каждого пользователя412413**`PYTHONEXECUTABLE`**414415Если эта переменная окружения установлена, `sys.argv[0]` будет установлено в её значение вместо значения, полученного через C runtime. Работает только в Mac OS X.416417**`PYTHONWARNINGS`**418419Это эквивалентно опции [`-W`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-w). Если установлено в строку, разделённую запятыми, это эквивалентно многократному указанию [`-W`](https://python-all.ru/3.7/using/cmdline.html#cmdoption-w), при этом фильтры, находящиеся позже в списке, имеют приоритет над теми, что раньше.420421Простейшие настройки применяют определённое действие безусловно ко всем предупреждениям, выдаваемым процессом (даже к тем, которые в противном случае игнорируются по умолчанию):422423```sh424PYTHONWARNINGS=default  # Предупреждать один раз на место вызова425PYTHONWARNINGS=error    # Преобразовывать в исключения426PYTHONWARNINGS=always   # Предупреждать каждый раз427PYTHONWARNINGS=module   # Предупреждать один раз на вызывающий модуль428PYTHONWARNINGS=once     # Предупреждать один раз на процесс Python429PYTHONWARNINGS=ignore   # Никогда не предупреждать430```431432См. [Фильтр предупреждений](https://python-all.ru/3.7/library/warnings.html#warning-filter) и [Описание фильтров предупреждений](https://python-all.ru/3.7/library/warnings.html#describing-warning-filters) для получения дополнительных сведений.433434**`PYTHONFAULTHANDLER`**435436Если эта переменная окружения установлена в непустую строку, [`faulthandler.enable()`](https://python-all.ru/3.7/library/faulthandler.html#faulthandler.enable) вызывается при запуске: устанавливается обработчик сигналов `SIGSEGV`, `SIGFPE`, `SIGABRT`, `SIGBUS` и `SIGILL` для дампа обратной трассировки Python. Это эквивалентно параметру [`-X`](https://python-all.ru/3.7/using/cmdline.html#id5) `faulthandler`.437438Новое в версии 3.3.439440**`PYTHONTRACEMALLOC`**441442Если эта переменная окружения установлена в непустую строку, начинается трассировка выделений памяти Python с помощью модуля [`tracemalloc`](https://python-all.ru/3.7/library/tracemalloc.html#module-tracemalloc). Значение переменной – максимальное количество кадров, сохраняемых в обратной трассировке. Например, `PYTHONTRACEMALLOC=1` сохраняет только самый последний кадр. Дополнительную информацию см. в [`tracemalloc.start()`](https://python-all.ru/3.7/library/tracemalloc.html#tracemalloc.start).443444Новое в версии 3.4.445446**`PYTHONPROFILEIMPORTTIME`**447448Если эта переменная окружения установлена в непустую строку, Python будет показывать, сколько времени занимает каждый импорт. Это в точности эквивалентно указанию `-X importtime` в командной строке.449450Добавлено в версии 3.7.451452**`PYTHONASYNCIODEBUG`**453454Если эта переменная окружения установлена в непустую строку, включает [режим отладки](https://python-all.ru/3.7/library/asyncio-dev.html#asyncio-debug-mode) модуля [`asyncio`](https://python-all.ru/3.7/library/asyncio.html#module-asyncio).455456Новое в версии 3.4.457458**`PYTHONMALLOC`**459460Устанавливает аллокаторы памяти Python и/или добавляет отладочные хуки.461462Устанавливает семейство аллокаторов памяти, используемых Python:463464- `default`: использовать [аллокаторы памяти по умолчанию](https://python-all.ru/3.7/c-api/memory.html#default-memory-allocators).465- `malloc`: использовать функцию `malloc()` библиотеки C для всех областей ([`PYMEM_DOMAIN_RAW`](https://python-all.ru/3.7/c-api/memory.html#c.PYMEM_DOMAIN_RAW), [`PYMEM_DOMAIN_MEM`](https://python-all.ru/3.7/c-api/memory.html#c.PYMEM_DOMAIN_MEM), [`PYMEM_DOMAIN_OBJ`](https://python-all.ru/3.7/c-api/memory.html#c.PYMEM_DOMAIN_OBJ)).466- `pymalloc`: использовать [аллокатор pymalloc](https://python-all.ru/3.7/c-api/memory.html#pymalloc) для областей [`PYMEM_DOMAIN_MEM`](https://python-all.ru/3.7/c-api/memory.html#c.PYMEM_DOMAIN_MEM) и [`PYMEM_DOMAIN_OBJ`](https://python-all.ru/3.7/c-api/memory.html#c.PYMEM_DOMAIN_OBJ), а функцию `malloc()` – для области [`PYMEM_DOMAIN_RAW`](https://python-all.ru/3.7/c-api/memory.html#c.PYMEM_DOMAIN_RAW).467468Установить отладочные перехватчики:469470- `debug`: установить отладочные хуки поверх [аллокаторов памяти по умолчанию](https://python-all.ru/3.7/c-api/memory.html#default-memory-allocators).471- `malloc_debug`: то же, что `malloc`, но также устанавливает отладочные хуки.472- `pymalloc_debug`: то же, что `pymalloc`, но также устанавливает отладочные хуки.473474См. [стандартные распределители памяти](https://python-all.ru/3.7/c-api/memory.html#default-memory-allocators) и функцию [`PyMem_SetupDebugHooks()`](https://python-all.ru/3.7/c-api/memory.html#c.PyMem_SetupDebugHooks) (установка отладочных перехватчиков на распределители памяти Python).475476Изменено в версии 3.7: Добавлен аллокатор `"default"`.477478Новое в версии 3.6.479480**`PYTHONMALLOCSTATS`**481482Если установлена в непустую строку, Python будет выводить статистику [аллокатора памяти pymalloc](https://python-all.ru/3.7/c-api/memory.html#pymalloc) каждый раз, когда создаётся новая арена объекта pymalloc, а также при завершении работы.483484Эта переменная игнорируется, если переменная окружения [`PYTHONMALLOC`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONMALLOC) используется для принудительного выбора аллокатора `malloc()` из библиотеки C, или если Python скомпилирован без поддержки `pymalloc`.485486Изменено в версии 3.6: Теперь эту переменную можно также использовать в Python, скомпилированном в режиме релиза. Теперь она не действует, если установлена в пустую строку.487488**`PYTHONLEGACYWINDOWSFSENCODING`**489490Если установлено в непустую строку, кодировка файловой системы по умолчанию и режим обработки ошибок вернутся к значениям до версии 3.6: 'mbcs' и 'replace' соответственно. В противном случае используются новые значения по умолчанию: 'utf-8' и 'surrogatepass'.491492Это также можно включить во время выполнения с помощью [`sys._enablelegacywindowsfsencoding()`](https://python-all.ru/3.7/library/sys.html#sys._enablelegacywindowsfsencoding).493494[Доступность](https://python-all.ru/3.7/library/intro.html#availability): Windows.495496Новое в версии 3.6: Подробности см. в [**PEP 529**](https://python-all.ru/3.7/using/cmdline.html).497498**`PYTHONLEGACYWINDOWSSTDIO`**499500Если задана непустая строка, не использует новые средства чтения и записи консоли. Это означает, что символы Unicode будут кодироваться в соответствии с активной кодовой страницей консоли, а не с помощью utf-8.501502Эта переменная игнорируется, если стандартные потоки перенаправлены (в файлы или каналы), а не ссылаются на буферы консоли.503504[Доступность](https://python-all.ru/3.7/library/intro.html#availability): Windows.505506Новое в версии 3.6.507508**`PYTHONCOERCECLOCALE`**509510Если установлена в значение `0`, заставляет главное приложение командной строки Python пропустить принудительное преобразование устаревших локалей C и POSIX на основе ASCII в более современную альтернативу на основе UTF-8.511512Если эта переменная *не* установлена (или установлена в значение, отличное от `0`), переменная окружения `LC_ALL` для переопределения локали также не установлена, и текущая локаль для категории `LC_CTYPE` сообщается как локаль по умолчанию `C` или явно основанная на ASCII локаль `POSIX`, то CLI Python попытается настроить следующие локали для категории `LC_CTYPE` в указанном порядке перед загрузкой среды выполнения интерпретатора:513514- `C.UTF-8`515- `C.utf8`516- `UTF-8`517518Если установка одной из этих категорий локали проходит успешно, то переменная окружения `LC_CTYPE` также будет соответствующим образом установлена в окружении текущего процесса до инициализации среды выполнения Python. Это гарантирует, что помимо того, что обновленная настройка видна как самому интерпретатору, так и другим компонентам, учитывающим локаль, работающим в том же процессе (например, библиотеке GNU `readline`), она также будет видна в подпроцессах (независимо от того, выполняют ли эти процессы интерпретатор Python или нет), а также в операциях, которые запрашивают окружение, а не текущую локаль C (таких как собственная функция [`locale.getdefaultlocale()`](https://python-all.ru/3.7/library/locale.html#locale.getdefaultlocale) в Python).519520Настройка одной из этих локалей (явно или через неявное принуждение локали) автоматически включает обработчик ошибок `surrogateescape` [https://python-all.ru/3.7/library/codecs.html#error-handlers](https://python-all.ru/3.7/library/codecs.html#error-handlers) для [`sys.stdin`](https://python-all.ru/3.7/library/sys.html#sys.stdin) и [`sys.stdout`](https://python-all.ru/3.7/library/sys.html#sys.stdout) ([`sys.stderr`](https://python-all.ru/3.7/library/sys.html#sys.stderr) продолжает использовать `backslashreplace`, как и в любой другой локали). Это поведение обработки потоков можно переопределить, используя [`PYTHONIOENCODING`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONIOENCODING), как обычно.521522В целях отладки установка `PYTHONCOERCECLOCALE=warn` приведет к тому, что Python будет выводить предупреждающие сообщения в `stderr`, если либо сработает принуждение локали, либо если локаль, которая *должна была бы* вызвать принуждение, все еще активна при инициализации среды выполнения Python.523524Также обратите внимание, что даже если принуждение локали отключено или не удается найти подходящую целевую локаль, [`PYTHONUTF8`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONUTF8) все равно будет активирован по умолчанию в устаревших локалях на основе ASCII. Обе функции должны быть отключены, чтобы заставить интерпретатор использовать `ASCII` вместо `UTF-8` для системных интерфейсов.525526[Доступность](https://python-all.ru/3.7/library/intro.html#availability): \*nix.527528Новое в версии 3.7: См. [**PEP 538**](https://python-all.ru/3.7/using/cmdline.html) для подробностей.529530**`PYTHONDEVMODE`**531532Если эта переменная окружения установлена в непустую строку, включает «режим разработки» CPython. См. опцию [`-X`](https://python-all.ru/3.7/using/cmdline.html#id5) `dev`.533534Добавлено в версии 3.7.535536**`PYTHONUTF8`**537538Если установлено в `1`, включает режим UTF-8 интерпретатора, при котором `UTF-8` используется в качестве кодировки текста для системных интерфейсов, независимо от текущей локали.539540Это означает, что:541542> - [`sys.getfilesystemencoding()`](https://python-all.ru/3.7/library/sys.html#sys.getfilesystemencoding) возвращает `'UTF-8'` (кодировка локали игнорируется).543> - [`locale.getpreferredencoding()`](https://python-all.ru/3.7/library/locale.html#locale.getpreferredencoding) возвращает `'UTF-8'` (кодировка локали игнорируется, а параметр `do_setlocale` функции не действует).544> - [`sys.stdin`](https://python-all.ru/3.7/library/sys.html#sys.stdin), [`sys.stdout`](https://python-all.ru/3.7/library/sys.html#sys.stdout) и [`sys.stderr`](https://python-all.ru/3.7/library/sys.html#sys.stderr) все используют UTF-8 в качестве текстовой кодировки, при этом `surrogateescape` [обработчик ошибок](https://python-all.ru/3.7/library/codecs.html#error-handlers) включён для [`sys.stdin`](https://python-all.ru/3.7/library/sys.html#sys.stdin) и [`sys.stdout`](https://python-all.ru/3.7/library/sys.html#sys.stdout) ([`sys.stderr`](https://python-all.ru/3.7/library/sys.html#sys.stderr) продолжает использовать `backslashreplace`, как и в режиме по умолчанию с учётом локали)545546Вследствие изменений в этих низкоуровневых API другие высокоуровневые API также демонстрируют другое поведение по умолчанию:547548> - Аргументы командной строки, переменные окружения и имена файлов декодируются в текст с использованием кодировки UTF-8.549> - [`os.fsdecode()`](https://python-all.ru/3.7/library/os.html#os.fsdecode) и [`os.fsencode()`](https://python-all.ru/3.7/library/os.html#os.fsencode) используют кодировку UTF-8.550> - [`open()`](https://python-all.ru/3.7/library/functions.html#open), [`io.open()`](https://python-all.ru/3.7/library/io.html#io.open) и [`codecs.open()`](https://python-all.ru/3.7/library/codecs.html#codecs.open) по умолчанию используют кодировку UTF-8. Однако по умолчанию они также используют строгий обработчик ошибок, так что попытка открыть двоичный файл в текстовом режиме, скорее всего, вызовет исключение, а не вернёт бессмысленные данные.551552Обратите внимание: настройки стандартных потоков в режиме UTF-8 могут быть переопределены с помощью [`PYTHONIOENCODING`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONIOENCODING) (как и в режиме по умолчанию с учётом локали).553554Если установлено в `0`, интерпретатор работает в режиме, зависящем от локали по умолчанию.555556Установка любой другой непустой строки вызывает ошибку при инициализации интерпретатора.557558Если эта переменная окружения не установлена вовсе, интерпретатор по умолчанию использует текущие настройки локали, *если только* текущая локаль не определена как устаревшая ASCII-ориентированная локаль (как описано для [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.7/using/cmdline.html#envvar-PYTHONCOERCECLOCALE)), и принудительное изменение локали либо отключено, либо не удаётся. В таких устаревших локалях интерпретатор по умолчанию включает режим UTF-8, если явно не указано иное.559560Также доступен как параметр [`-X`](https://python-all.ru/3.7/using/cmdline.html#id5) `utf8`.561562Новое в версии 3.7: См. [**PEP 540**](https://python-all.ru/3.7/using/cmdline.html) для получения дополнительных сведений.563564### 1.2.1. Переменные режима отладки565566Установка этих переменных работает только в отладочной сборке Python, то есть если Python был сконфигурирован с параметром сборки `--with-pydebug`.567568**`PYTHONTHREADDEBUG`**569570Если установлено, Python будет выводить отладочную информацию о потоках.571572**`PYTHONDUMPREFS`**573574Если установлено, Python будет выгружать объекты и счетчики ссылок, все еще живые после завершения работы интерпретатора.575