Spec-Zone.ru › Python 3.8

Командная строка и среда

Интерпретатор 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).

Изменено в версии 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.

Рандомизация хэшей предназначена для защиты от атаки типа «отказ в обслуживании», вызванной тщательно подобранными входными данными, которые используют худший случай производительности при построении словаря, сложность 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.

END_OF_DOCUMENT_MARKER
-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 фильтр предупреждений, как -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.

Введено в версии 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__ в дереве исходного кода. Это эквивалентно указанию опции -X pycache_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 на уровне пользователя

END_OF_DOCUMENT_MARKER
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. Это эквивалентно параметру -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:

  • 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, либо явно локалью на основе ASCII POSIX, тогда командная строка Python попытается сконфигурировать следующие локали для категории LC_CTYPE в указанном порядке перед загрузкой интерпретатора:

  • C.UTF-8
  • C.utf8
  • UTF-8

Если настройка одной из этих категорий локали удастся, то переменная среды LC_CTYPE также будет установлена соответствующим образом в текущей среде процесса перед инициализацией среды выполнения Python. Это гарантирует, что обновлённое значение, помимо того, что оно видно как интерпретатором, так и другими компонентами, работающими в том же процессе (например, библиотекой GNU readline), также видно и в дочерних процессах (независимо от того, запускают ли эти процессы интерпретатор Python), а также в операциях, которые запрашивают среду, а не текущую локаль C (например, собственная функция Python locale.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. Однако они по-прежнему используют обработчик ошибок strict по умолчанию, поэтому попытка открыть двоичный файл в текстовом режиме, скорее всего, вызовет исключение, а не произведёт бессмысленные данные.

Обратите внимание, что стандартные параметры потоков в режиме 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.

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/using/cmdline.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API