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

1. Командная строка и окружениеCommand line and environment

Интерпретатор CPython сканирует командную строку и окружение на предмет различных настроек.

Особенности реализации CPython: схемы командной строки других реализаций могут отличаться. Для получения дополнительных сведений см. Альтернативные реализации.

1.1. Командная строкаCommand line

При запуске Python можно указать любые из этих опций:

python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]

Наиболее распространённый вариант использования – это простой запуск скрипта:

python myscript.py

1.1.1. Опции интерфейсаInterface options

Интерфейс интерпретатора напоминает интерфейс командной оболочки UNIX, но предоставляет дополнительные способы запуска:

  • При вызове с подключённым к tty-устройству стандартным вводом интерпретатор выводит приглашение для команд и выполняет их, пока не будет прочитан EOF (символ конца файла; в UNIX его можно ввести с помощью Ctrl-D, а в Windows – с помощью Ctrl-Z, Enter).

  • При вызове с именем файла в качестве аргумента или с файлом в качестве стандартного ввода он читает и выполняет скрипт из этого файла.

  • При вызове с именем каталога в качестве аргумента он читает и выполняет соответствующий скрипт из этого каталога.

  • При вызове с -c command выполняется инструкция(и) Python, переданная как command. Здесь command может содержать несколько инструкций, разделённых переводами строк. Начальные пробелы в инструкциях Python значимы!

  • При вызове с -m module-name указанный модуль находится в пути поиска модулей Python и выполняется как скрипт.

В неинтерактивном режиме весь ввод анализируется до его выполнения.

При указании опции интерфейса список параметров, обрабатываемых интерпретатором, завершается, и все последующие аргументы попадают в sys.argv – первый элемент (индекс ноль, sys.argv[0]) является строкой, указывающей на источник программы.

-c <command>

Выполняет код Python, указанный в command. command может содержать одну или несколько инструкций, разделённых переводами строк; начальные пробелы, как и в обычном коде модуля, имеют значение.

Если указана эта опция, первый элемент sys.argv будет равен "-c", а текущий каталог будет добавлен в начало sys.path (что позволяет импортировать модули из этого каталога как модули верхнего уровня).

Вызывает событие аудита cpython.run_command с аргументом command.

-m <module-name>

Ищет sys.path указанный модуль и выполняет его содержимое как модуль __main__.

Поскольку аргумент является именем модуля, не следует указывать расширение файла (.py). Имя модуля должно быть допустимым абсолютным именем модуля Python, но реализация может не всегда это проверять (например, может позволить использовать имя, содержащее дефис).

Имена пакетов (включая пакеты пространств имён) также допускаются. Если вместо обычного модуля указано имя пакета, интерпретатор выполнит <pkg>.__main__ в качестве главного модуля. Это поведение намеренно аналогично обработке каталогов и zip-файлов, которые передаются интерпретатору в качестве аргумента скрипта.

Примечание

Эту опцию нельзя использовать со встроенными модулями и модулями расширения, написанными на C, поскольку у них нет файлов модулей Python. Однако её можно использовать для предварительно скомпилированных модулей, даже если исходный файл недоступен.

Если эта опция указана, первый элемент sys.argv будет содержать полный путь к файлу модуля (пока файл модуля находится, первый элемент будет установлен в "-m"). Как и в случае с опцией -c, текущий каталог будет добавлен в начало sys.path.

-I можно использовать для запуска скрипта в изолированном режиме, где sys.path не содержит ни текущего каталога, ни каталога site-packages пользователя. Все переменные окружения PYTHON* также игнорируются.

Многие модули стандартной библиотеки содержат код, который вызывается при их выполнении в качестве скрипта. Примером может служить модуль timeit:

python -m timeit -s 'setup here' 'benchmarked code here'
python -m timeit -h # подробнее

Вызывает событие аудита cpython.run_module с аргументом module-name.

См. также

runpy.run_module()

Эквивалентная функциональность, доступная напрямую из кода Python

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

Изменено в версии 3.1: Укажите имя пакета, чтобы запустить подмодуль __main__.

Изменено в версии 3.4: также поддерживаются пространственные пакеты

-

Читает команды из стандартного ввода (sys.stdin). Если стандартный ввод является терминалом, подразумевается -i.

Если указана эта опция, первым элементом sys.argv будет "-", а текущий каталог будет добавлен в начало sys.path.

Возбуждает событие аудита cpython.run_stdin без аргументов.

<script>

Выполняет код Python, содержащийся в скрипте, который должен быть файловым путем (абсолютным или относительным), указывающим на файл Python, каталог с файлом __main__.py или ZIP-файл, содержащий файл __main__.py.

Если указана эта опция, первым элементом sys.argv будет имя скрипта, заданное в командной строке.

Если имя скрипта указывает непосредственно на файл Python, каталог, содержащий этот файл, добавляется в начало sys.path, а сам файл выполняется как модуль __main__.

Если имя скрипта ссылается на каталог или ZIP-файл, имя скрипта добавляется в начало sys.path, а файл __main__.py в этом расположении выполняется как модуль __main__.

-I можно использовать для запуска скрипта в изолированном режиме, где sys.path не содержит ни каталога скрипта, ни каталога site-packages пользователя. Все переменные окружения PYTHON* также игнорируются.

Вызывает событие аудита cpython.run_file с аргументом filename.

См. также

runpy.run_path()

Эквивалентная функциональность, доступная напрямую из кода Python

Если не указана опция интерфейса, подразумевается -i, sys.argv[0] является пустой строкой (""), а текущий каталог будет добавлен в начало sys.path. Кроме того, автодополнение по табуляции и редактирование истории автоматически включаются, если это доступно на вашей платформе (см. конфигурацию Readline).

Изменено в версии 3.4: Автоматическое включение автодополнения по табуляции и редактирования истории.

1.1.2. Общие опцииGeneric options

-?
-h
--help

Выводит краткое описание всех параметров командной строки.

-V
--version

Выводит номер версии Python и завершает работу. Пример вывода:

Python 3.8.0b2+

При указании дважды выводит более подробную информацию о сборке, например:

Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00)
[GCC 6.2.0 20161005]

Новое в версии 3.6: Опция -VV.

1.1.3. Прочие опцииMiscellaneous options

-b

Выдаёт предупреждение при сравнении bytes или bytearray с str или bytes с int. Выдаёт ошибку, если параметр указан дважды (-bb).

Изменено в версии 3.5: Влияет на сравнения bytes с int.

-B

Если указан, Python не будет пытаться записывать файлы .pyc при импорте исходных модулей. См. также PYTHONDONTWRITEBYTECODE.

--check-hash-based-pycs default|always|never

Управляет проверкой файлов .pyc на основе хэша. См. Инвалидация кэшированного байт-кода. Если установлено в default, проверенные и непроверенные кэш-файлы байт-кода на основе хэша проверяются в соответствии с их стандартной семантикой. Если установлено в always, все файлы .pyc на основе хэша, как проверенные, так и непроверенные, проверяются на соответствие соответствующему исходному файлу. Если установлено в never, файлы .pyc на основе хэша не проверяются на соответствие соответствующим исходным файлам.

На семантику файлов .pyc на основе временных меток эта опция не влияет.

-d

Включает отладочный вывод парсера (только для экспертов, зависит от опций компиляции). См. также PYTHONDEBUG.

-E

Игнорировать все переменные окружения PYTHON*, например PYTHONPATH и PYTHONHOME, которые могут быть установлены.

-i

Когда в качестве первого аргумента передан сценарий или используется опция -c, интерактивный режим запускается после выполнения сценария или команды, даже если sys.stdin не выглядит как терминал. Файл PYTHONSTARTUP при этом не читается.

Это может быть полезно для проверки глобальных переменных или трассировки стека, когда скрипт вызывает исключение. См. также PYTHONINSPECT.

-I

Запускает Python в изолированном режиме. Это также подразумевает -E и -s. В изолированном режиме sys.path не содержит ни каталога скрипта, ни каталога site-packages пользователя. Все переменные окружения PYTHON* также игнорируются. Могут быть наложены дополнительные ограничения, чтобы предотвратить внедрение пользователем вредоносного кода.

Новое в версии 3.4.

-O

Удаляет операторы assert и любой код, зависящий от значения __debug__. Дополняет имя файла для скомпилированных (байт-код) файлов, добавляя .opt-1 перед расширением .pyc (см. PEP 488). См. также PYTHONOPTIMIZE.

Изменено в версии 3.5: Изменяет имена файлов .pyc в соответствии с PEP 488.

-OO

Выполняет -O, а также отбрасывает строки документации. Дополняет имя файла для скомпилированных (байт-код) файлов, добавляя .opt-2 перед расширением .pyc (см. PEP 488).

Изменено в версии 3.5: Изменяет имена файлов .pyc в соответствии с PEP 488.

-q

Не выводить сообщения об авторских правах и версии, даже в интерактивном режиме.

Новое в версии 3.2.

-R

Включает рандомизацию хешей. Этот параметр действует только в том случае, если переменная окружения PYTHONHASHSEED установлена в 0, так как рандомизация хешей включена по умолчанию.

В предыдущих версиях Python эта опция включала рандомизацию хешей, так что значения __hash__() объектов str и bytes «солились» непредсказуемым случайным значением. Хотя они остаются постоянными в рамках одного процесса Python, они не являются предсказуемыми при повторных запусках Python.

Хэш-рандомизация предназначена для защиты от отказа в обслуживании, вызванного тщательно подобранными входными данными, которые используют наихудшую производительность конструкции dict, сложность O(n2). Подробности см. на http://www.ocert.org/advisories/ocert-2011-003.html.

PYTHONHASHSEED позволяет задать фиксированное значение для секрета начального значения хеша.

Изменено в версии 3.7: Опция больше не игнорируется.

Новое в версии 3.2.3.

-s

Не добавляет user site-packages directory в sys.path.

См. также

PEP 370 – Каталог site-packages для каждого пользователя

-S

Отключает импорт модуля site и связанные с ним site-зависимые манипуляции с sys.path. Также отключает эти манипуляции, если site явно импортирован позже (для их выполнения следует вызвать site.main()).

-u

Принудительно отключает буферизацию для потоков stdout и stderr. Эта опция не влияет на поток stdin.

См. также PYTHONUNBUFFERED.

Изменено в версии 3.7: Текстовый слой потоков stdout и stderr теперь не буферизуется.

-v

Выводит сообщение при каждой инициализации модуля, показывая место (имя файла или встроенный модуль), из которого он загружается. При указании дважды (-vv) выводит сообщение для каждого файла, проверяемого при поиске модуля. Также предоставляет информацию об очистке модуля при завершении. См. также PYTHONVERBOSE.

-W arg

Управление предупреждениями. Механизм предупреждений Python по умолчанию выводит предупреждения в sys.stderr. Типичное предупреждение имеет следующий вид:

file:line: category: message

По умолчанию каждое предупреждение выводится один раз для каждой строки исходного кода, в которой оно возникает. Этот параметр управляет частотой вывода предупреждений.

Может быть указано несколько параметров -W; если предупреждение соответствует более чем одному параметру, выполняется действие последнего подходящего параметра. Недопустимые параметры -W игнорируются (однако при выдаче первого предупреждения выводится сообщение о недопустимых параметрах).

Предупреждения также можно контролировать с помощью переменной окружения PYTHONWARNINGS и из программы на Python с помощью модуля warnings.

Простейшие настройки применяют определённое действие безусловно ко всем предупреждениям, выдаваемым процессом (даже к тем, которые в противном случае игнорируются по умолчанию):

-Wdefault  # Предупреждать один раз на место вызова
-Werror    # Преобразовывать в исключения
-Walways   # Предупреждать каждый раз
-Wmodule   # Предупреждать один раз на вызывающий модуль
-Wonce     # Предупреждать один раз на процесс Python
-Wignore   # Никогда не предупреждать

Имена действий можно сокращать по желанию (например, -Wi, -Wd, -Wa, -We), и интерпретатор преобразует их в соответствующее имя действия.

См. Фильтр предупреждений и Описание фильтров предупреждений для получения дополнительных сведений.

-x

Пропускает первую строку исходного файла, позволяя использовать не-юниксовые формы #!cmd. Это предназначено только для специфического хака DOS.

-X

Зарезервировано для различных опций, специфичных для реализации. В настоящее время CPython определяет следующие возможные значения:

  • -X faulthandler для включения faulthandler;

  • -X oldparser: включить традиционный синтаксический анализатор LL(1). См. также PYTHONOLDPARSER и PEP 617.

  • -X showrefcount вывод общего количества ссылок и числа использованных блоков памяти при завершении программы или после каждого оператора в интерактивном интерпретаторе. Работает только в отладочных сборках.

  • -X tracemalloc для начала трассировки выделений памяти Python с помощью модуля tracemalloc. По умолчанию в обратной трассировке сохраняется только самый последний кадр. Используйте -X tracemalloc=NFRAME, чтобы начать трассировку с лимитом обратной трассировки в NFRAME кадров. Дополнительную информацию см. в tracemalloc.start().

  • -X int_max_str_digits настраивает ограничение длины преобразования целых чисел в строки. См. также PYTHONINTMAXSTRDIGITS.

  • -X importtime показывает, сколько времени занимает каждый импорт. Отображается модуль имя, совокупное время (включая вложенные импорты) и собственное время (без учёта вложенных импортов). Обратите внимание, что вывод может быть нарушен в многопоточном приложении. Типичное использование: python3 -X importtime -c 'import asyncio'. См. также PYTHONPROFILEIMPORTTIME.

  • -X dev: включает режим разработки Python, вводящий дополнительные проверки во время выполнения, которые слишком дороги для включения по умолчанию.

  • -X utf8 включает режим UTF-8 для интерфейсов операционной системы, переопределяя режим, зависящий от локали по умолчанию. -X utf8=0 явно отключает режим UTF-8 (даже если бы он в противном случае активировался автоматически). Подробнее см. PYTHONUTF8.

  • -X pycache_prefix=PATH включает запись файлов .pyc в параллельное дерево с корнем в указанном каталоге, а не в дерево кода. См. также PYTHONPYCACHEPREFIX.

Он также позволяет передавать произвольные значения и извлекать их через словарь sys._xoptions.

Изменено в версии 3.2: Был добавлен параметр -X.

Новое в версии 3.3: Параметр -X faulthandler.

Новое в версии 3.4: Параметры -X showrefcount и -X tracemalloc.

Новое в версии 3.6: Опция -X showalloccount.

Новое в версии 3.7: Параметры -X importtime, -X dev и -X utf8.

Новое в версии 3.8: Параметр -X pycache_prefix. Параметр -X dev теперь регистрирует исключения close() в деструкторе io.IOBase.

Изменено в версии 3.9: При использовании опции -X dev проверяются аргументы encoding и errors при операциях кодирования и декодирования строк.

Опция -X showalloccount была удалена.

Новое в версии 3.9.14: Параметр -X int_max_str_digits.

Устарело с версии 3.9, будет удалено в версии 3.10: Параметр -X oldparser.

1.1.4. Параметры, которые не стоит использоватьOptions you shouldn’t use

-J

Зарезервировано для Jython.

1.2. Переменные окруженияEnvironment variables

Эти переменные окружения влияют на поведение Python, они обрабатываются до параметров командной строки, кроме -E или -I. Принято, что параметры командной строки переопределяют переменные окружения в случае конфликта.

PYTHONHOME

Изменяет расположение стандартных библиотек Python. По умолчанию библиотеки ищутся в prefix/lib/pythonversion и exec_prefix/lib/pythonversion, где prefix и exec_prefix – это каталоги, зависящие от установки; оба по умолчанию имеют значение /usr/local.

Когда PYTHONHOME установлен в один каталог, его значение заменяет оба prefix и exec_prefix. Чтобы указать для них разные значения, установите PYTHONHOME в prefix:exec_prefix.

PYTHONPATH

Дополняет путь поиска модулей по умолчанию. Формат такой же, как у PATH оболочки: один или несколько путей к каталогам, разделённых os.pathsep (например, двоеточиями в Unix или точкой с запятой в Windows). Несуществующие каталоги игнорируются без предупреждения.

В дополнение к обычным каталогам, отдельные записи PYTHONPATH могут ссылаться на zip-файлы, содержащие чистые модули Python (в исходной или скомпилированной форме). Модули расширений не могут быть импортированы из zip-файлов.

Путь поиска по умолчанию зависит от установки, но обычно начинается с prefix/lib/pythonversion (см. PYTHONHOME выше). Он всегда добавляется к PYTHONPATH.

Дополнительный каталог будет вставлен в путь поиска перед PYTHONPATH, как описано выше в разделе Параметры интерфейса. Путь поиска можно изменять из программы Python как переменную sys.path.

PYTHONPLATLIBDIR

Если эта переменная установлена в непустую строку, она переопределяет значение sys.platlibdir.

Новое в версии 3.9.

PYTHONSTARTUP

Если это имя читаемого файла, команды Python из этого файла выполняются перед отображением первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имён, что и интерактивные команды, поэтому определённые или импортированные в нём объекты могут использоваться без уточнения в интерактивном сеансе. Также в этом файле можно изменить приглашения sys.ps1 и sys.ps2 и хук sys.__interactivehook__.

Вызывает событие аудита cpython.run_startup с именем файла в качестве аргумента при вызове во время запуска.

PYTHONOPTIMIZE

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции -O. Если установлено целое число, это эквивалентно указанию -O несколько раз.

PYTHONBREAKPOINT

Если эта переменная установлена, она задаёт вызываемый объект в нотации с точками. Модуль, содержащий вызываемый объект, будет импортирован, а затем вызываемый объект будет запущен реализацией по умолчанию sys.breakpointhook(), которая сама вызывается встроенной breakpoint(). Если не установлена или установлена в пустую строку, это эквивалентно значению "pdb.set_trace". Установка в строку "0" заставляет реализацию по умолчанию sys.breakpointhook() ничего не делать и немедленно вернуться.

Добавлено в версии 3.7.

PYTHONDEBUG

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции -d. Если установлено целое число, это эквивалентно указанию -d несколько раз.

PYTHONOLDPARSER

Если установлено в непустую строку, включает традиционный синтаксический анализатор LL(1).

См. также параметр -X oldparser и PEP 617.

Устарело с версии 3.9, будет удалено в версии 3.10.

PYTHONINSPECT

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции -i.

Эта переменная также может быть изменена кодом Python с помощью os.environ, чтобы принудительно включить режим инспектирования при завершении программы.

Возбуждает событие аудита cpython.run_stdin без аргументов.

Изменено в версии 3.9.20: (также 3.8.20) Порождает события аудита.

PYTHONUNBUFFERED

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции -u.

PYTHONVERBOSE

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции -v. Если установлено целое число, это эквивалентно указанию -v несколько раз.

PYTHONCASEOK

Если эта переменная установлена, Python игнорирует регистр в операторах import. Это работает только в Windows и macOS.

PYTHONDONTWRITEBYTECODE

Если эта переменная установлена в непустую строку, Python не будет пытаться записывать файлы .pyc при импорте исходных модулей. Это эквивалентно указанию опции -B.

PYTHONPYCACHEPREFIX

Если эта переменная установлена, Python будет записывать файлы .pyc в зеркальное дерево каталогов по указанному пути, вместо каталогов __pycache__ внутри исходного дерева. Это эквивалентно указанию опции -X pycache_prefix=PATH.

Новое в версии 3.8.

PYTHONHASHSEED

Если эта переменная не установлена или установлена в random, используется случайное значение для инициализации хешей объектов str и bytes.

Если PYTHONHASHSEED установлено в целое число, оно используется как фиксированное начальное значение для генерации hash() для типов, охваченных рандомизацией хешей.

Его цель – обеспечить воспроизводимое хеширование, например, для самотестирования самого интерпретатора, или чтобы позволить кластеру процессов Python обмениваться значениями хешей.

Целое число должно быть десятичным числом в диапазоне [0, 4294967295]. Указание значения 0 отключит рандомизацию хешей.

Новое в версии 3.2.3.

PYTHONINTMAXSTRDIGITS

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

Новое в версии 3.9.14.

PYTHONIOENCODING

Если эта переменная установлена до запуска интерпретатора, она переопределяет кодировку, используемую для stdin/stdout/stderr, в синтаксисе encodingname:errorhandler. Обе части encodingname и :errorhandler необязательны и имеют то же значение, что и в str.encode().

Для stderr часть :errorhandler игнорируется; обработчик всегда будет 'backslashreplace'.

Изменено в версии 3.4: Часть encodingname теперь необязательна.

Изменено в версии 3.6: В Windows кодировка, указанная этой переменной, игнорируется для интерактивных буферов консоли, если также не указана PYTHONLEGACYWINDOWSSTDIO. Файлы и каналы, перенаправленные через стандартные потоки, не затрагиваются.

PYTHONNOUSERSITE

Если эта переменная установлена, Python не будет добавлять user site-packages directory в sys.path.

См. также

PEP 370 – Каталог site-packages для каждого пользователя

PYTHONUSERBASE

Определяет user base directory, который используется для вычисления пути user site-packages directory и путей установки Distutils для python setup.py install --user.

См. также

PEP 370 – Каталог site-packages для каждого пользователя

PYTHONEXECUTABLE

Если эта переменная окружения установлена, sys.argv[0] будет установлено в её значение вместо значения, полученного через C runtime. Работает только на macOS.

PYTHONWARNINGS

Это эквивалентно опции -W. Если установлено в строку, разделённую запятыми, это эквивалентно многократному указанию -W, при этом фильтры, находящиеся позже в списке, имеют приоритет над теми, что раньше.

Простейшие настройки применяют определённое действие безусловно ко всем предупреждениям, выдаваемым процессом (даже к тем, которые в противном случае игнорируются по умолчанию):

PYTHONWARNINGS=default  # Предупреждать один раз на место вызова
PYTHONWARNINGS=error    # Преобразовывать в исключения
PYTHONWARNINGS=always   # Предупреждать каждый раз
PYTHONWARNINGS=module   # Предупреждать один раз на вызывающий модуль
PYTHONWARNINGS=once     # Предупреждать один раз на процесс Python
PYTHONWARNINGS=ignore   # Никогда не предупреждать

См. Фильтр предупреждений и Описание фильтров предупреждений для получения дополнительных сведений.

PYTHONFAULTHANDLER

Если эта переменная окружения установлена в непустую строку, faulthandler.enable() вызывается при запуске: устанавливается обработчик сигналов SIGSEGV, SIGFPE, SIGABRT, SIGBUS и SIGILL для дампа обратной трассировки Python. Это эквивалентно параметру -X faulthandler.

Новое в версии 3.3.

PYTHONTRACEMALLOC

Если эта переменная окружения установлена в непустую строку, начинается трассировка выделений памяти Python с помощью модуля tracemalloc. Значение переменной – максимальное количество кадров, сохраняемых в обратной трассировке. Например, PYTHONTRACEMALLOC=1 сохраняет только самый последний кадр. Дополнительную информацию см. в tracemalloc.start().

Новое в версии 3.4.

PYTHONPROFILEIMPORTTIME

Если эта переменная окружения установлена в непустую строку, Python будет показывать, сколько времени занимает каждый импорт. Это в точности эквивалентно указанию -X importtime в командной строке.

Добавлено в версии 3.7.

PYTHONASYNCIODEBUG

Если эта переменная окружения установлена в непустую строку, включает режим отладки модуля asyncio.

Новое в версии 3.4.

PYTHONMALLOC

Устанавливает аллокаторы памяти Python и/или добавляет отладочные хуки.

Устанавливает семейство аллокаторов памяти, используемых Python:

Установить отладочные перехватчики:

  • debug: установить отладочные хуки поверх аллокаторов памяти по умолчанию.

  • malloc_debug: то же, что malloc, но также устанавливает отладочные хуки.

  • pymalloc_debug: то же, что pymalloc, но также устанавливает отладочные хуки.

См. стандартные распределители памяти и функцию PyMem_SetupDebugHooks() (установка отладочных перехватчиков на распределители памяти Python).

Изменено в версии 3.7: Добавлен аллокатор "default".

Новое в версии 3.6.

PYTHONMALLOCSTATS

Если установлена в непустую строку, Python будет выводить статистику аллокатора памяти pymalloc каждый раз, когда создаётся новая арена объекта pymalloc, а также при завершении работы.

Эта переменная игнорируется, если переменная окружения PYTHONMALLOC используется для принудительного выбора аллокатора malloc() из библиотеки C, или если Python скомпилирован без поддержки pymalloc.

Изменено в версии 3.6: Теперь эту переменную можно также использовать в Python, скомпилированном в режиме релиза. Теперь она не действует, если установлена в пустую строку.

PYTHONLEGACYWINDOWSFSENCODING

Если установлено в непустую строку, кодировка файловой системы по умолчанию и режим обработки ошибок вернутся к значениям до версии 3.6: 'mbcs' и 'replace' соответственно. В противном случае используются новые значения по умолчанию: 'utf-8' и 'surrogatepass'.

Это также можно включить во время выполнения с помощью sys._enablelegacywindowsfsencoding().

Доступность: Windows.

Новое в версии 3.6: Подробности см. в PEP 529.

PYTHONLEGACYWINDOWSSTDIO

Если задана непустая строка, не использует новые средства чтения и записи консоли. Это означает, что символы Unicode будут кодироваться в соответствии с активной кодовой страницей консоли, а не с помощью utf-8.

Эта переменная игнорируется, если стандартные потоки перенаправлены (в файлы или каналы), а не ссылаются на буферы консоли.

Доступность: Windows.

Новое в версии 3.6.

PYTHONCOERCECLOCALE

Если установлена в значение 0, заставляет главное приложение командной строки Python пропустить принудительное преобразование устаревших локалей C и POSIX на основе ASCII в более современную альтернативу на основе UTF-8.

Если эта переменная не установлена (или установлена в значение, отличное от 0), переменная окружения LC_ALL для переопределения локали также не установлена, и текущая локаль для категории LC_CTYPE сообщается как локаль по умолчанию C или явно основанная на ASCII локаль POSIX, то CLI Python попытается настроить следующие локали для категории LC_CTYPE в указанном порядке перед загрузкой среды выполнения интерпретатора:

  • C.UTF-8

  • C.utf8

  • UTF-8

Если установка одной из этих категорий локали проходит успешно, то переменная окружения LC_CTYPE также будет соответствующим образом установлена в окружении текущего процесса до инициализации среды выполнения Python. Это гарантирует, что помимо того, что обновленная настройка видна как самому интерпретатору, так и другим компонентам, учитывающим локаль, работающим в том же процессе (например, библиотеке GNU readline), она также будет видна в подпроцессах (независимо от того, выполняют ли эти процессы интерпретатор Python или нет), а также в операциях, которые запрашивают окружение, а не текущую локаль C (таких как собственная функция locale.getdefaultlocale() в Python).

Настройка одной из этих локалей (явно или через неявное принуждение локали) автоматически включает обработчик ошибок surrogateescape для sys.stdin и sys.stdout (sys.stderr продолжает использовать backslashreplace, как и в любой другой локали). Это поведение обработки потоков можно переопределить, используя PYTHONIOENCODING, как обычно.

В целях отладки установка PYTHONCOERCECLOCALE=warn приведет к тому, что Python будет выводить предупреждающие сообщения в stderr, если либо сработает принуждение локали, либо если локаль, которая должна была бы вызвать принуждение, все еще активна при инициализации среды выполнения Python.

Также обратите внимание, что даже если принуждение локали отключено или не удается найти подходящую целевую локаль, PYTHONUTF8 все равно будет активирован по умолчанию в устаревших локалях на основе ASCII. Обе функции должны быть отключены, чтобы заставить интерпретатор использовать ASCII вместо UTF-8 для системных интерфейсов.

Доступность: *nix.

Новое в версии 3.7: См. PEP 538 для подробностей.

PYTHONDEVMODE

Если эта переменная окружения установлена в непустую строку, включается режим разработки Python, вводящий дополнительные проверки во время выполнения, которые слишком дороги для включения по умолчанию.

Добавлено в версии 3.7.

PYTHONUTF8

Если установлено в 1, включает режим UTF-8 интерпретатора, при котором UTF-8 используется в качестве кодировки текста для системных интерфейсов, независимо от текущей локали.

Это означает, что:

Вследствие изменений в этих низкоуровневых API другие высокоуровневые API также демонстрируют другое поведение по умолчанию:

  • Аргументы командной строки, переменные окружения и имена файлов декодируются в текст с использованием кодировки UTF-8.

  • os.fsdecode() и os.fsencode() используют кодировку UTF-8.

  • open(), io.open() и codecs.open() по умолчанию используют кодировку UTF-8. Однако по умолчанию они также используют строгий обработчик ошибок, так что попытка открыть двоичный файл в текстовом режиме, скорее всего, вызовет исключение, а не вернёт бессмысленные данные.

Обратите внимание: настройки стандартных потоков в режиме UTF-8 могут быть переопределены с помощью PYTHONIOENCODING (как и в режиме по умолчанию с учётом локали).

Если установлено в 0, интерпретатор работает в режиме, зависящем от локали по умолчанию.

Установка любой другой непустой строки вызывает ошибку при инициализации интерпретатора.

Если эта переменная окружения не установлена вовсе, интерпретатор по умолчанию использует текущие настройки локали, если только текущая локаль не определена как устаревшая ASCII-ориентированная локаль (как описано для PYTHONCOERCECLOCALE), и принудительное изменение локали либо отключено, либо не удаётся. В таких устаревших локалях интерпретатор по умолчанию включает режим UTF-8, если явно не указано иное.

Также доступен как параметр -X utf8.

Новое в версии 3.7: См. PEP 540 для получения дополнительных сведений.

1.2.1. Переменные режима отладкиDebug-mode variables

Установка этих переменных действует только в отладочной сборке Python.

PYTHONTHREADDEBUG

Если установлено, Python будет выводить отладочную информацию о потоках.

Требуется Python, собранный с опцией сборки --with-pydebug.

PYTHONDUMPREFS

Если установлено, Python будет выгружать объекты и счетчики ссылок, все еще живые после завершения работы интерпретатора.

Требуется Python, собранный с опцией сборки --with-trace-refs.