Командная строка и среда
Интерпретатор 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 в качестве команды. Здесь команда может содержать несколько утверждений, разделённых символами новой строки. Отступы в начале строк Python важны! - При вызове с
-m module-name, указанный модуль будет найден в пути модулей Python и исполнен как скрипт.
В неинтерактивном режиме весь ввод анализируется перед выполнением.
Параметр интерфейса завершает список параметров, потребляемых интерпретатором; все последующие аргументы попадут в sys.argv – обратите внимание, что первый элемент, с индексом ноль (sys.argv[0]), представляет собой строку, отражающую исходный код программы.
-
-c <command> -
Выполнить код Python в команде. Команда может содержать одно или несколько утверждений, разделённых символами новой строки, с учётом начальных отступов, как в обычном коде модуля.
Если этот параметр указан, первый элемент
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 # 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, содержащийся в скрипте, который должен быть путём к файлу в файловой системе (абсолютным или относительным), указывающим на файл 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. Общие параметры
-
-? -
-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. Дополнительные параметры
-
-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.Рандомизация хэшей предназначена для защиты от атаки типа «отказ в обслуживании», вызванной тщательно подобранными входными данными, которые используют худший случай производительности при построении словаря, сложность O(n^2). Подробности см. в 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и зависящие от сайта манипуляции с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 # Warn once per call location -Werror # Convert to exceptions -Walways # Warn every time -Wmodule # Warn once per calling module -Wonce # Warn once per Python process -Wignore # Never warn
Имена действий можно сокращать по желанию (например,
-Wi,-Wd,-Wa,-We) и интерпретатор преобразует их в соответствующее имя действия.Для получения дополнительных сведений см. Фильтр предупреждений и Описание фильтров предупреждений.
-
-x -
Пропустить первую строку исходного кода, что позволяет использовать не-Unix-форматы
#!cmd. Это предназначено только для допольнительных функций DOS.
-
-X -
Зарезервировано для различных параметров, специфичных для реализации. CPython в настоящее время определяет следующие возможные значения:
-
-X faulthandlerдля включенияfaulthandler; -
-X showrefcountдля вывода общего счётчика ссылок и количества используемых блоков памяти при завершении программы или после каждой инструкции в интерактивном интерпретаторе. Это работает только в отладочных сборках. -
-X tracemallocдля начала отслеживания выделений памяти Python с помощью модуляtracemalloc. По умолчанию в стеке отладки хранится только последний кадр. Используйте-X tracemalloc=NFRAMEдля начала отслеживания со ограничением стека в NFRAME кадров. Смотритеtracemalloc.start()для получения дополнительной информации. -
-X showalloccountдля вывода общего количества выделенных объектов для каждого типа при завершении программы. Это работает только если Python был скомпилирован сCOUNT_ALLOCSопределённым. -
-X importtimeдля показа продолжительности каждого импорта. Показываются имя модуля, общее время (включая вложенные импорты) и собственное время (исключая вложенные импорты). Обратите внимание, что вывод может быть некорректным в многопоточных приложениях. Типичное использование -python3 -X importtime -c 'import asyncio'. Смотрите такжеPYTHONPROFILEIMPORTTIME. -
-X dev: включить «режим разработки» CPython, добавляя дополнительные проверки во время выполнения, которые слишком дороги для включения по умолчанию. Он не должен быть более подробным, чем по умолчанию, если код правильный: новые предупреждения выводятся только при обнаружении проблемы. Эффект режима разработчика:- Добавить
defaultфильтр предупреждений, как-Wdefault. - Установить отладочные обработчики на выделения памяти: см. функцию 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.Введено в версии 3.8.14: Параметр
-X int_max_str_digits. -
1.1.4. Параметры, которые следует избегать
-
-J -
Зарезервировано для использования Jython.
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, чтобы принудительно включить режим инспекции при завершении программы.
-
PYTHONUNBUFFERED -
Если это значение установлено на непустую строку, оно эквивалентно указанию опции
-u.
-
PYTHONVERBOSE -
Если это значение установлено на непустую строку, оно эквивалентно указанию опции
-v. Если установлено на целое число, оно эквивалентно многократному указанию опции-v.
-
PYTHONCASEOK -
Если установлено, Python игнорирует регистр в операциях
import. Это работает только на Windows и OS X.
-
PYTHONDONTWRITEBYTECODE -
Если это значение установлено на непустую строку, Python не будет пытаться записать файлы
.pycпри импорте исходных модулей. Это эквивалентно указанию опции-B.
-
PYTHONPYCACHEPREFIX -
Если установлено, Python будет записывать файлы
.pycв зеркальное каталожное дерево по этому пути вместо каталогов__pycache__в дереве исходного кода. Это эквивалентно указанию опции-Xpycache_prefix=PATH.Новое в версии 3.8.
-
PYTHONHASHSEED -
Если эта переменная не задана или установлена на
random, используется случайное значение для инициализации хешей объектов str и bytes.Если
PYTHONHASHSEEDустановлена на целочисленное значение, оно используется как фиксированное значение для генерации hash() типов, охваченных случайной генерацией хешей.Цель состоит в том, чтобы обеспечить повторяемое хэширование, например, для самотестов самого интерпретатора или для того, чтобы группа процессов Python могла использовать общие значения хешей.
Целое число должно быть десятичным числом в диапазоне [0, 4294967295]. Указание значения 0 отключит случайную генерацию хешей.
Новое в версии 3.2.3.
-
PYTHONINTMAXSTRDIGITS -
Если эта переменная установлена на целое число, оно используется для настройки глобальной границы длины строки преобразования целых чисел интерпретатора преобразования целого числа в строку.
Новое в версии 3.8.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. Работает только на Mac OS X.
-
PYTHONWARNINGS -
Это эквивалентно параметру
-W. Если установлено в строку, разделённую запятыми, это эквивалентно указанию-Wнесколько раз, причём фильтры, расположенные позже в списке, имеют приоритет над теми, что раньше.Простейшие настройки применяют определённое действие безусловно ко всем предупреждениям, издаваемым процессом (даже к тем, которые по умолчанию игнорируются):
PYTHONWARNINGS=default # Warn once per call location PYTHONWARNINGS=error # Convert to exceptions PYTHONWARNINGS=always # Warn every time PYTHONWARNINGS=module # Warn once per calling module PYTHONWARNINGS=once # Warn once per Python process PYTHONWARNINGS=ignore # Never warn
См. Фильтр предупреждений и Описание фильтров предупреждений для получения дополнительных сведений.
-
PYTHONFAULTHANDLER -
Если эта переменная окружения установлена в непустую строку,
faulthandler.enable()вызывается при запуске: устанавливается обработчик дляSIGSEGV,SIGFPE,SIGABRT,SIGBUSиSIGILLсигналов для вывода отладочной информации о Python. Это эквивалентно параметру-Xfaulthandler.Новое в версии 3.3.
-
PYTHONTRACEMALLOC -
Если эта переменная окружения установлена в непустую строку, отслеживаются выделения памяти Python с использованием модуля
tracemalloc. Значение переменной — максимальное количество кадров, хранящихся в отладочной информации о трассировке. Например,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 -
Если установлена в непустую строку, не используется новый читатель и писатель консоли. Это означает, что символы Unicode будут кодироваться в соответствии с активной кодовой страницей консоли, а не с использованием utf-8.
Эта переменная игнорируется, если стандартные потоки перенаправлены (в файлы или каналы) вместо использования буферов консоли.
Доступность: Windows.
Новое в версии 3.6.
-
PYTHONCOERCECLOCALE -
Если установлено со значением
0, заставляет основное приложение командной строки Python пропустить принудительное преобразование устаревших локали C и POSIX на основе ASCII в более функциональную альтернативу на основе UTF-8.Если эта переменная не установлена (или установлена со значением отличным от
0), переменная средыLC_ALLтакже не устанавливается, и текущая локаль, сообщаемая для категорииLC_CTYPE, является либо стандартной локальюC, либо явно локалью на основе ASCIIPOSIX, тогда командная строка Python попытается сконфигурировать следующие локали для категорииLC_CTYPEв указанном порядке перед загрузкой интерпретатора:C.UTF-8C.utf8UTF-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. См. опцию
-Xdev.Новое в версии 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. Однако они по-прежнему используют обработчик ошибок strict по умолчанию, поэтому попытка открыть двоичный файл в текстовом режиме, скорее всего, вызовет исключение, а не произведёт бессмысленные данные.
Обратите внимание, что стандартные параметры потоков в режиме UTF-8 можно переопределить с помощью
PYTHONIOENCODING(точно так же, как и в режиме распознавания локали по умолчанию).Если установлено со значением
0, интерпретатор работает в режиме распознавания локали по умолчанию.Установка любой другой строки, отличной от пустой, вызывает ошибку во время инициализации интерпретатора.
Если эта переменная окружения вообще не установлена, интерпретатор по умолчанию использует текущие настройки локали, если только текущая локаль не идентифицируется как устаревшая локаль на основе ASCII (как описано для
PYTHONCOERCECLOCALE), и принудительное преобразование локали либо отключено, либо не выполняется. В таких устаревших локалях интерпретатор по умолчанию включит режим UTF-8, если явно не указано обратное.Также доступно как опция
-Xutf8.Новое в версии 3.7: См. PEP 540 для получения более подробной информации.
-
1.2.1. Переменные режима отладки
Установка этих переменных имеет эффект только в отладочной сборке Python.
-
PYTHONTHREADDEBUG -
Если установлено, Python будет выводить отладочную информацию о потоках.
Требуется Python, сконфигурированный с опцией сборки
--with-pydebug.
-
PYTHONDUMPREFS -
Если установлено, Python будет выводить объекты и счётчики ссылок, которые всё ещё существуют после завершения работы интерпретатора.
Требуется Python, сконфигурированный с опцией сборки
--with-trace-refs.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/using/cmdline.html