Сообщить об ошибке.

Переменные среды и поведение Python

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

Содержание:

  • PYTHONHOME изменяет расположение стандартных библиотек Python,
  • PYTHONPATH изменяет путь поиска модулей по умолчанию,
  • PYTHONSAFEPATH не добавляется потенциально опасный путь,
  • PYTHONPLATLIBDIR переопределяет значение sys.platlibdir,
  • PYTHONSTARTUP имя файла, выполняемого перед стартом интерпретатора,
  • PYTHONOPTIMIZE - эквивалент параметра интерпретатора -O,
  • PYTHONBREAKPOINT - включение/отключение отладчика отладчик pdb,
  • PYTHONDEBUG - эквивалент указания опции интерпретатора -d,
  • PYTHONOLDPARSER включает традиционный анализатор LL,
  • PYTHONINSPECT - эквивалент указания параметра интерпретатора -i,
  • PYTHONUNBUFFERED - эквивалент указания параметра интерпретатора -u,
  • PYTHONVERBOSE - эквивалент указания параметра интерпретатора -v,
  • PYTHONCASEOK - игнорирует регистр символов в операторах импорта,
  • PYTHONDONTWRITEBYTECODE - Python не будет пытаться писать файлы .pyc,
  • PYTHONPYCACHEPREFIX Python будет писать файлы .pyc в зеркальном дереве каталогов,
  • PYTHONHASHSEED используется для заполнения хешей объектов str и bytes,
  • PYTHONINTMAXSTRDIGITS ограничения на глобальную длину преобразования целочисленной строки,
  • PYTHONIOENCODING переопределяет кодировку, используемую для stdin/stdout/stderr,
  • PYTHONNOUSERSITE - не добавляется пользовательский каталог site-packages в переменную sys.path,
  • PYTHONUSERBASE определяет базовый каталог пользователя,
  • PYTHONEXECUTABLE установка значения для sys.argv[0],
  • PYTHONWARNINGS - эквивалент указания параметра интерпретатора -W,
  • PYTHONFAULTHANDLER - эквивалент опции обработчика ошибок -X,
  • PYTHONTRACEMALLOC отслеживание выделения памяти Python,
  • PYTHONPROFILEIMPORTTIME покажет, сколько времени занимает импорт модулей,
  • PYTHONASYNCIODEBUG включает режим отладки модуля asyncio,
  • PYTHONMALLOC задает распределители памяти Python и/или устанавливает отладочные хуки,
  • PYTHONMALLOCSTATS печатает статистику распределителя памяти,
  • PYTHONLEGACYWINDOWSFSENCODING возвращает кодировку к своим значениям,
  • PYTHONLEGACYWINDOWSSTDIO - использование новых средства чтения и записи консоли,
  • PYTHONCOERCECLOCALE пропускает приведение устаревших локалей к UTF-8,
  • PYTHONDEVMODE включает режим разработки Python,
  • PYTHONUTF8 включает режим интерпретатора UTF-8,
  • PYTHONWARNDEFAULTENCODING выдает EncodingWarning, когда используется кодировка по умолчанию.
  • PYTHONNODEBUGRANGES отключает отображение дополнительной информацию о местоположении для каждой инструкции в объектах кода.
  • PYTHONTHREADDEBUG печатает отладочную информацию о потоках,
  • PYTHONDUMPREFS сбрасывает объекты и счетчики ссылок.
  • PYTHONDUMPREFSFILE=FILENAME сбрасывает объекты и счетчики ссылок в файл с именем FILENAME.
  • PYTHONPERFSUPPORT включает поддержку Linux perf profiler.

PYTHONHOME:

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

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

PYTHONPATH:

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

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

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

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

PYTHONSAFEPATH:

Новое в Python 3.11.

Если для переменной среды PYTHONSAFEPATH задана непустая строка, то не добавляется потенциально опасный путь к sys.path: подробности смотрите в параметре -P.

PYTHONPLATLIBDIR:

Новое в Python 3.9.

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

PYTHONSTARTUP:

Если переменная среды PYTHONSTARTUP` это имя файла, то команды Python в этом файле выполняются до отображения первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имен, в котором выполняются интерактивные команды, так что определенные или импортированные в нем объекты можно использовать без квалификации в интерактивном сеансе.

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

PYTHONOPTIMIZE:

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

PYTHONBREAKPOINT:

Новое в Python 3.7.

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

PYTHONDEBUG:

Если значение переменной среды PYTHONDEBUG непустая строка, то это эквивалентно указанию опции -d. Если установлено целое число, то это эквивалентно многократному указанию -dd.

PYTHONOLDPARSER:

Не рекомендуется с Python 3.9, будет удалено в Python 3.10.

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

Смотрите также параметр командной строки -X.

PYTHONINSPECT:

Если значение переменной среды PYTHONINSPECT непустая строка, то это эквивалентно указанию параметра -i.

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

PYTHONUNBUFFERED:

Если значение переменной среды PYTHONUNBUFFERED непустая строка, то это эквивалентно указанию параметра -u.

PYTHONVERBOSE:

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

PYTHONCASEOK:

Если значение переменной среды PYTHONCASEOK установлено, то Python игнорирует регистр символов в операторах импорта. Это работает только в Windows и OS X.

PYTHONDONTWRITEBYTECODE:

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

PYTHONPYCACHEPREFIX:

Новое в Python 3.8.

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

PYTHONHASHSEED:

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

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

Цель - разрешить повторяемое хеширование, например, для самотестирования самого интерпретатора, или позволить кластеру процессов Python совместно использовать хеш-значения.

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

PYTHONINTMAXSTRDIGITS:

Новое в Python 3.11.

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

PYTHONIOENCODING:

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

Для stderr часть :errorhandler игнорируется, а обработчик всегда будет заменять обратную косую черту.

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

PYTHONNOUSERSITE:

Если значение переменной среды PYTHONNOUSERSITE установлено, то Python не будет добавлять пользовательский каталог site-packages в переменную sys.path.

PYTHONUSERBASE:

Переменная среды PYTHONUSERBASE определяет базовый каталог пользователя, который используется для вычисления пути к каталогу пользовательских пакетов сайта site-packages и путей установки Distutils для python setup.py install --user.

PYTHONEXECUTABLE:

Если значение переменной среды PYTHONEXECUTABLE установлено, то для sys.argv[0] будет установлено ее значение вместо значения, полученного через среду выполнения C. Работает только в Mac OS X.

PYTHONWARNINGS:

Переменная среды PYTHONWARNINGS эквивалентна опции -W. Если она установлена в виде строки, разделенной запятыми, то это эквивалентно многократному указанию -W, при этом фильтры, расположенные позже в списке, имеют приоритет над фильтрами ранее в списке.

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

  • PYTHONWARNINGS=default - предупреждает один раз для каждого вызова;
  • PYTHONWARNINGS=error - преобразовывает в исключения;
  • PYTHONWARNINGS=always - предупреждает каждый раз;
  • PYTHONWARNINGS=module - предупреждает один раз для каждого вызванного модуля;
  • PYTHONWARNINGS=once - предупреждает один раз для каждого процесса Python;
  • PYTHONWARNINGS=ignore - никогда не предупреждает.

Дополнительные сведения смотрите в разделе "Фильтр предупреждений с их описанием модуля warnings".

PYTHONFAULTHANDLER:

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

PYTHONTRACEMALLOC:

Если значение переменной среды PYTHONTRACEMALLOC непустая строка, то начнется отслеживание выделения памяти Python с помощью модуля tracemalloc. Значение переменной - это максимальное количество кадров, хранящихся в обратной трассировке trace. Например, PYTHONTRACEMALLOC=1 сохраняет только самый последний кадр.

PYTHONPROFILEIMPORTTIME:

Новое в Python 3.7.

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

PYTHONASYNCIODEBUG:

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

PYTHONMALLOC:

Новое в Python 3.6.

Изменено в Python 3.7: Добавлен распределитель по умолчанию default.

Переменная 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).

PYTHONMALLOCSTATS:

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

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

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

PYTHONLEGACYWINDOWSFSENCODING:

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

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

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

PYTHONLEGACYWINDOWSSTDIO:

Новое в Python 3.6.

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

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

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

PYTHONCOERCECLOCALE:

Новое в версии 3.7

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

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

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

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

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

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

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

Доступность: *nix системы.

PYTHONDEVMODE:

Новое в версии 3.7

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

PYTHONUTF8:

Новое в версии 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 продолжает использовать обратную косую черту, как и в режим с учетом локали по умолчанию)

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

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

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

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

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

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

Установка переменной среды PYTHONUTF8 также доступна как опция интерпретатора -X utf8.

PYTHONWARNDEFAULTENCODING:

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

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

Подробности в разделе "Включение EncodingWarning" материала "Модуль io, операции ввода/вывода в Python".

PYTHONNODEBUGRANGES:

Новое в Python 3.11.

Если переменная PYTHONNODEBUGRANGES установлена, то она отключает включение таблиц, отображающих дополнительную информацию о местоположении (конечная строка, смещение начального столбца и смещение конечного столбца) для каждой инструкции в объектах кода. Это полезно, когда требуются меньшие объекты кода и файлы .pyc, а также подавление дополнительных визуальных индикаторов местоположения, когда интерпретатор отображает трассировку.

Переменные среды режима отладки.

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

PYTHONTHREADDEBUG:

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

Нужен Python, настроенный с параметром сборки --with-pydebug.

PYTHONDUMPREFS:

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

Нужен Python, настроенный с параметром сборки --with-trace-refs.

PYTHONDUMPREFSFILE=FILENAME:

Новое в Python 3.11.

Если установлено, то Python будет сбрасывать объекты и счетчики ссылок после завершения работы интерпретатора в файл с именем FILENAME.

Нужен Python, настроенный (установленный) с параметром сборки --with-trace-refs.

PYTHONPERFSUPPORT:

Новое в Python 3.12.

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

Если установлено значение 0, то отключит поддержку Linux perf profiler (по умолчанию).

Смотрите также параметр командной строки -X perf и поддержку Python для Linux perf profiler.