1. Командная строка и окружение¶
Интерпретатор CPython просматривает командную строку и окружение для различных параметров настройки.
Детали реализации CPython: Схемы командной строки других реализаций могут отличаться. Дополнительные ресурсы см. в разделе Альтернативные реализации.
1.1. Командная строка¶
При вызове Python можно указать любой из этих параметров:
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
Самый распространенный вариант использования — это, конечно, простой вызов сценария:
python myscript.py
1.1.1. Интерфейсные опции¶
Интерфейс интерпретатора напоминает шелл интерфейс UNIX, но предоставляет некоторые дополнительный методы вызова:
- При вызове со стандартным входом, подключенным к устройству tty, он запрашивает команды и выполняет их до тех пор, пока не будет прочитан EOF (символ конца файла, который можно создать с помощью Ctrl-D в UNIX или Ctrl-Z, Enter в Windows).
- При вызове с аргументом имени файла или с файлом в качестве стандартного ввода он считывает и выполняет сценарий из этого файла.
- При вызове с аргументом имени каталога он считывает и выполняет сценарий с соответствующим именем из этого каталога.
- При вызове с помощью
-c command
он выполняет оператор(ы) Python, заданные как command. Здесь command может содержать несколько операторов, разделенных новыми строками. Ведущий пробел важен в Python операторах! - При вызове с
-m module-name
модуль выполняется как сценарий, при условии что он доступен.
В неинтерактивном режиме весь ввод анализируется перед его выполнением.
Параметр интерфейса завершает список опций, используемых интерпретатором, все
последовательные аргументы заканчиваются на 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__
.Т. к. аргумент — имя module, вы не должны передавать расширение файла (
.py
). Имя модуля должно быть действительным абсолютным именем модуля Python, но реализация может не всегда воплотить это в жизнь (например, она может позволить вам использовать имя, которое включает дефис).Также разрешены имена пакетов (включая пакеты пространства имён). Когда имя пакета будет поставляться вместо нормального модуля, интерпретатор выполнит
<pkg>.__main__
как главный модуль. Это поведение намеренно аналогично обработке каталогов и zipfiles, которые передаются интерпретатору в качестве аргумента сценария.Примечание
Этот параметр не может использоваться со встроенными модулями и модулями расширений, написанными на языке 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 # for details
Вызывает событие аудита
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 код, содержащийся в script, который должен быть путём файловой системы (абсолютным или относительным) со ссылкой на файл Python, каталог, содержащий файл
__main__.py
, или zipfile, содержащий файл__main__.py
.Если этот параметр задан, первым элементом
sys.argv
будет имя сценария, указанное в командной строке.Если имя сценария ссылается непосредственно на файл Python, каталог, содержащий этот файл, добавляется к началу
sys.path
, и файл выполняется как модуль__main__
.Если имя сценария ссылается на каталог или zipfile, имя сценария добавляется к началу
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. Универсальные опции¶
1.1.3. Прочие опции¶
-
-b
¶
Выдать предупреждение при сравнении
bytes
илиbytearray
сstr
илиbytes
сint
. Выдать ошибку, если опция задана дважды (-bb
).
-
-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(n^2). Дополнительные сведения см. на сайте.
PYTHONHASHSEED
позволяет вам установить фиксированное значение для секретного хеш-кода.Изменено в версии 3.7: Параметр больше не игнорируется.
Добавлено в версии 3.2.3.
-
-s
¶
Не добавлять
каталог site-packages пользователя
вsys.path
.См.также
PEP 370 – каталог site-packages для каждого пользователя
-
-S
¶
Отключить импорт модуля
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
¶
Пропустить первую строку исходника, разрешив использование не Unix-форм
#!cmd
. Это предназначено только для хака DOS.
-
-X
¶
Зарезервирован для различных опций реализации. CPython в настоящее время определяет следующие возможные значения:
-X faulthandler
для включенияfaulthandler
;-X showrefcount
для вывода общего счетчика ссылок и количества использованных блоков памяти при завершении программы или после каждого оператора в интерактивном интерпретаторе. Работает только в отладочных сборках.-X tracemalloc
для начала отслеживание распределения памяти Python с помощью модуляtracemalloc
. По умолчанию в traceback трассировки сохраняет только самый последний фрейм. Используйте-X tracemalloc=NFRAME
, чтобы начать трассировку с пределом трассировки фреймов NFRAME. См.tracemalloc.start()
для получения дополнительной информации.-X showalloccount
для вывода общего количества выделенных объектов для каждого типа по завершении программы. Работает только, когда Python был собран с определённымCOUNT_ALLOCS
.-X importtime
, чтобы показать, сколько времени занимает каждый импорт. Он показывает имя модуля, совокупное время (включая вложенный импорт) и собственное время (исключая вложенный импорт). Следует отметить, что его вывод может быть нарушен в многопоточном приложении. Типичное использование -python3 -X importtime -c 'import asyncio'
. См. также разделPYTHONPROFILEIMPORTTIME
.-X dev
: включить «режим разработки» CPython, введя дополнительные проверки среды выполнения, которые слишком дороги для включения по умолчанию. Он не должен быть более подробным, чем значение по умолчанию, если код является правильным: новые предупреждения выдаются только при обнаружении проблемы. Эффект от режима разработчика:- Добавьте фильтр предупреждения
default
как-W
default
. - Установить отладочные хуки на распределители памяти: см. C функцию
PyMem_SetupDebugHooks()
. - Включить модуль
faulthandler
для сброса Python трейсбэка в случае сбоя. - Включить asyncio режим отладки.
- Установить
dev_mode
атрибутsys.flags
True
. io.IOBase
деструктор регистрирует исключенияclose()
.
- Добавьте фильтр предупреждения
-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
.
1.2. Переменные окружения¶
Переменные среды влияют на поведение 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
.
-
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
.
-
PYTHONINSPECT
¶ Если установлена в непустую строку, это эквивалентно определению опции
-i
.Переменная также может быть изменена кодом Python с использованием
os.environ
для принудительного режима проверки при завершении программы.
-
PYTHONVERBOSE
¶ Если для неё задана непустая строка, это эквивалентно указанию параметра
-v
. Если установлено целое число, это эквивалентно многократному указанию-v
.
-
PYTHONCASEOK
¶ Если установлена, Python игнорирует регистр в операторах
import
. Это работает только в Windows и OS X.
-
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.
-
-
PYTHONIOENCODING
¶ Если она установлена до запуска интерпретатора, то переопределяет кодировку, используемую в stdin/stdout/stderr, в синтаксисе
encodingname:errorhandler
. Иencodingname
, и:errorhandler
не являются обязательными и содержат то же значение, что иstr.encode()
.Для stderr часть
:errorhandler
игнорируется; обработчик всегда будет'backslashreplace'
.Изменено в версии 3.4: Часть
encodingname
теперь не является обязательной.Изменено в версии 3.6: Кодировка в Windows, указанная этой переменной, игнорируется для буферов интерактивной консоли, если также не указана
PYTHONLEGACYWINDOWSSTDIO
. Файлы и каналы, перенаправленные через стандартные потоки, не затрагиваются.
-
PYTHONNOUSERSITE
¶ Если установлено, Python не будет добавлять
пользовательский каталог site-packages
вsys.path
.См.также
PEP 370 — каталог site-packages для каждого пользователя
-
PYTHONUSERBASE
¶ Определяет
базовый каталог пользователей
, используемый для вычисления путипользовательской директории site-packages
и пути установки Distutils дляpython setup.py install --user
.См.также
PEP 370 — каталог site-packages для каждого пользователя
-
PYTHONEXECUTABLE
¶ Если переменная среды установлена, для
sys.argv[0]
будет установлено её значение вместо значения, полученного через среду выполнения C. Работает только в Mac OS X.
-
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
. Значение переменной — это максимальное количество фреймов, сохраняемых в обратной трассировке trace. Например,PYTHONTRACEMALLOC=1
хранит только самый последний фрейм. См.tracemalloc.start()
для получения дополнительной информации.Добавлено в версии 3.4.
-
PYTHONPROFILEIMPORTTIME
¶ Если для переменной среды задана непустая строка, Python покажет, сколько времени занимает каждый импорт. Это в точности эквивалентно настройке
-X importtime
в командной строке.Добавлено в версии 3.7.
-
PYTHONASYNCIODEBUG
¶ Если для этой переменной среды задана непустая строка, включить режим отладки модуля
asyncio
.Добавлено в версии 3.4.
-
PYTHONMALLOC
¶ Установить распределители памяти Python и/или установить отладочные хуки.
Установить семейство распределителей памяти, используемых Python:
default
: использовать распределители памяти по умолчанию.malloc
: использовать функциюmalloc()
библиотеки C для всех доменов (PYMEM_DOMAIN_RAW
,PYMEM_DOMAIN_MEM
,PYMEM_DOMAIN_OBJ
).pymalloc
: использовать pymalloc распределитель для доменовPYMEM_DOMAIN_MEM
иPYMEM_DOMAIN_OBJ
и использовать функциюmalloc()
для доменаPYMEM_DOMAIN_RAW
.
Установить отладочные хуки:
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
¶ Если задана непустая строка, новые средства чтения и записи консоли не используются. Это означает, что Юникод символы будут кодироваться в соответствии с активной кодовой страницей консоли, а не с использованием utf-8.
Переменная игнорируется, если стандартные потоки перенаправляются (в файлы или каналы), а не ссылаются на буферы консоли.
Доступность: Windows.
Добавлено в версии 3.6.
-
PYTHONCOERCECLOCALE
¶ Если установлено значение
0
, основное приложение командной строки Python пропускает приведение устаревших локалей C и POSIX на основе ASCII к более функциональной альтернативе на основе UTF-8.Если переменная не установлена (или ей присвоено значение, отличное от
0
), переменная среды переопределения локалиLC_ALL
также не устанавливается, а текущая локаль, указанная для категорииLC_CTYPE
, является либо локалью по умолчаниюC
, либо явно ASCII-основанной локалиPOSIX
, то Python CLI попытается настроить следующие локали для категорииLC_CTYPE
в порядке, указанном перед загрузкой среды выполнения интерпретатора:C.UTF-8
C.utf8
UTF-8
Если установка одной из этих категорий локали прошла успешно, то переменная среды
LC_CTYPE
также будет соответственно установлена в текущей среде процесса перед инициализацией среды выполнения Python. Это гарантирует, что обновленный параметр будет виден как самому интерпретатору, так и другим компонентам, зависящим от локали, работающим в одном процессе (например, библиотеке GNUreadline
), и в подпроцессах (независимо от того, являются ли эти процессы запущенными интерпретатором Python или нет), а также в операциях, которые запрашивают среду, а не текущую локаль C (например, собственная Pythonlocale.getdefaultlocale()
).Настройка одной из этих локалей (явно или через указанное выше неявное принуждение языковых стандартов) автоматически включает
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
¶ Если для этой переменной среды задана непустая строка, включается «режим разработки» CPython. См. опцию
-X
dev
.Добавлено в версии 3.7.
-
PYTHONUTF8
¶ Если установлено значение
1
, включает режим интерпретатора UTF-8, гдеUTF-8
используется в качестве кодировки текста для системных интерфейсов, независимо от текущей настройки локали.Это значит, что:
sys.getfilesystemencoding()
возвращает'UTF-8'
(кодировка локали игнорируется).locale.getpreferredencoding()
возвращает'UTF-8'
(кодировка локали игнорируется, а параметр функцииdo_setlocale
не действует).sys.stdin
,sys.stdout
иsys.stderr
все используют UTF-8 в качестве кодировки текста, при этомsurrogateescape
обработчик ошибки включён дляsys.stdin
иsys.stdout
(sys.stderr
продолжает использоватьbackslashreplace
, как и в режиме с учётом локали по умолчанию)
Вследствие изменений в этих 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. Переменные режима отладки¶
Установка этих переменных влияет только на отладочную сборку Python.
-
PYTHONTHREADDEBUG
¶ Если установлена, Python будет печатать отладочную информацию о потоках.
Нужен Python, настроенный с опцией сборки
--with-pydebug
.
-
PYTHONDUMPREFS
¶ Если установлено, Python будет сбрасывать объекты и счётчики ссылок, все ещё живые после завершения работы интерпретатора.
Нужен Python, настроенный с опцией сборки
--with-trace-refs
.