Содержание страницы
1. Командная строка и окружение¶Command line and environment
Интерпретатор CPython сканирует командную строку и окружение на предмет различных настроек.
Особенности реализации CPython: схемы командной строки других реализаций могут отличаться. Для получения дополнительных сведений см. Альтернативные реализации.
1.1. Командная строка¶Command line
При запуске Python можно указать любые из этих опций:
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
Наиболее распространённый вариант использования – это простой запуск скрипта:
python myscript.py
1.1.1. Опции интерфейса¶Interface options
Интерфейс интерпретатора напоминает интерфейс командной оболочки UNIX, но предоставляет дополнительные способы запуска:
При вызове с подключённым к tty-устройству стандартным вводом интерпретатор выводит приглашение для команд и выполняет их, пока не будет прочитан EOF (символ конца файла; в UNIX его можно ввести с помощью Ctrl-D, а в Windows – с помощью Ctrl-Z, Enter).
При вызове с именем файла в качестве аргумента или с файлом в качестве стандартного ввода он читает и выполняет скрипт из этого файла.
При вызове с именем каталога в качестве аргумента он читает и выполняет соответствующий скрипт из этого каталога.
При вызове с
-c commandвыполняется инструкция(и) Python, переданная как command. Здесь command может содержать несколько инструкций, разделённых переводами строк. Начальные пробелы в инструкциях Python значимы!При вызове с
-m module-nameуказанный модуль находится в пути поиска модулей Python и выполняется как скрипт.
В неинтерактивном режиме весь ввод анализируется до его выполнения.
При указании опции интерфейса список параметров, обрабатываемых интерпретатором, завершается, и все последующие аргументы попадают в sys.argv – первый элемент (индекс ноль, sys.argv[0]) является строкой, указывающей на источник программы.
-
-c<command>¶ Выполняет код Python, указанный в command. command может содержать одну или несколько инструкций, разделённых переводами строк; начальные пробелы, как и в обычном коде модуля, имеют значение.
Если указана эта опция, первый элемент
sys.argvбудет равен"-c", а текущий каталог будет добавлен в началоsys.path(что позволяет импортировать модули из этого каталога как модули верхнего уровня).
-
-m<module-name>¶ Ищет
sys.pathуказанный модуль и выполняет его содержимое как модуль__main__.Поскольку аргумент является именем модуля, не следует указывать расширение файла (
.py). Имя модуля должно быть допустимым абсолютным именем модуля Python, но реализация может не всегда это проверять (например, может позволить использовать имя, содержащее дефис).Имена пакетов (включая пакеты пространств имён) также допускаются. Если вместо обычного модуля указано имя пакета, интерпретатор выполнит
<pkg>.__main__в качестве главного модуля. Это поведение намеренно аналогично обработке каталогов и zip-файлов, которые передаются интерпретатору в качестве аргумента скрипта.Примечание
Эту опцию нельзя использовать со встроенными модулями и модулями расширения, написанными на C, поскольку у них нет файлов модулей Python. Однако её можно использовать для предварительно скомпилированных модулей, даже если исходный файл недоступен.
Если эта опция указана, первый элемент
sys.argvбудет содержать полный путь к файлу модуля (пока файл модуля находится, первый элемент будет установлен в"-m"). Как и в случае с опцией-c, текущий каталог будет добавлен в началоsys.path.Многие модули стандартной библиотеки содержат код, который вызывается при их выполнении в качестве скрипта. Примером может служить модуль
timeit:python -mtimeit -s 'setup here' 'benchmarked code here' python -mtimeit -h # подробнее
См. также
runpy.run_module()Эквивалентная функциональность, доступная напрямую из кода Python
PEP 338 – Выполнение модулей как сценариев
Изменено в версии 3.1: Укажите имя пакета, чтобы запустить подмодуль
__main__.Изменено в версии 3.4: также поддерживаются пространственные пакеты
-
- Читает команды из стандартного ввода (
sys.stdin). Если стандартный ввод является терминалом, подразумевается-i.Если указана эта опция, первым элементом
sys.argvбудет"-", а текущий каталог будет добавлен в началоsys.path.
-
<script> Выполняет код Python, содержащийся в скрипте, который должен быть файловым путем (абсолютным или относительным), указывающим на файл Python, каталог с файлом
__main__.pyили ZIP-файл, содержащий файл__main__.py.Если указана эта опция, первым элементом
sys.argvбудет имя скрипта, заданное в командной строке.Если имя скрипта указывает непосредственно на файл Python, каталог, содержащий этот файл, добавляется в начало
sys.path, а сам файл выполняется как модуль__main__.Если имя скрипта ссылается на каталог или ZIP-файл, имя скрипта добавляется в начало
sys.path, а файл__main__.pyв этом расположении выполняется как модуль__main__.См. также
runpy.run_path()Эквивалентная функциональность, доступная напрямую из кода Python
Если не указана опция интерфейса, подразумевается -i, sys.argv[0] является
пустой строкой (""), а текущий каталог будет добавлен в
начало sys.path. Кроме того, автодополнение по табуляции и редактирование истории
автоматически включаются, если это доступно на вашей платформе (см.
конфигурацию Readline).
См. также
Изменено в версии 3.4: Автоматическое включение автодополнения по табуляции и редактирования истории.
1.1.2. Общие опции¶Generic options
1.1.3. Прочие опции¶Miscellaneous options
-
-b¶ Выдаёт предупреждение при сравнении
bytesилиbytearrayсstrилиbytesсint. Выдаёт ошибку, если параметр указан дважды (-bb).
-
-B¶ Если указан, Python не будет пытаться записывать файлы
.pycпри импорте исходных модулей. См. такжеPYTHONDONTWRITEBYTECODE.
-
-d¶ Включить отладочный вывод парсера (только для волшебников, в зависимости от опций компиляции).\nСм. также
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¶ Сохранено для совместимости. Начиная с Python 3.3, рандомизация хешей включена по умолчанию.
В предыдущих версиях Python этот параметр включает рандомизацию хэшей, так что значения
__hash__()для str, bytes и datetime «солятся» непредсказуемым случайным значением. Хотя они остаются постоянными в пределах одного процесса Python, они непредсказуемы при повторных запусках Python.Хэш-рандомизация предназначена для защиты от отказа в обслуживании, вызванного тщательно подобранными входными данными, которые используют наихудшую производительность построения словаря (сложность O(n²)). Подробнее см. http://www.ocert.org/advisories/ocert-2011-003.html.
PYTHONHASHSEEDпозволяет задать фиксированное значение для секрета начального значения хеша.Новое в версии 3.2.3.
-
-s¶ Не добавляет
user site-packages directoryвsys.path.См. также
PEP 370 – Каталог site-packages для каждого пользователя
-
-S¶ Отключает импорт модуля
siteи связанные с ним site-зависимые манипуляции сsys.path. Также отключает эти манипуляции, еслиsiteявно импортирован позже (для их выполнения следует вызватьsite.main()).
-
-u¶ Принудительно сделать двоичный слой потоков stdout и stderr (доступный\nкак их атрибут
buffer) небуферизованным. Текстовый слой ввода-вывода\nпо-прежнему будет буферизован построчно при выводе в консоль или\nпоблочно при перенаправлении в неинтерактивный файл.См. также
PYTHONUNBUFFERED.
-
-v¶ Выводит сообщение при каждой инициализации модуля, показывая место (имя файла или встроенный модуль), из которого он загружается. При указании дважды (
-vv) выводит сообщение для каждого файла, проверяемого при поиске модуля. Также предоставляет информацию об очистке модуля при завершении. См. такжеPYTHONVERBOSE.
-
-Warg¶ Управление предупреждениями. Механизм предупреждений Python по умолчанию выводит предупреждения в
sys.stderr. Типичное предупреждение имеет следующий вид:file:line: category: message
По умолчанию каждое предупреждение выводится один раз для каждой строки исходного кода, в которой оно возникает. Этот параметр управляет частотой вывода предупреждений.
Может быть указано несколько параметров
-W; если предупреждение соответствует более чем одному параметру, выполняется действие последнего подходящего параметра. Недопустимые параметры-Wигнорируются (однако при выдаче первого предупреждения выводится сообщение о недопустимых параметрах).Предупреждениями также можно управлять из программы Python с помощью\nмодуля
warnings.Простейшая форма аргумента – одна из следующих строк действий (или\nуникальное сокращение):
ignoreИгнорировать все предупреждения.
defaultЯвно запросить поведение по умолчанию (вывод каждого предупреждения один раз на\nстроку исходного кода).
allВыводить предупреждение при каждом его появлении (это может породить много сообщений, если\nпредупреждение вызывается многократно для одной и той же строки, например, внутри\nцикла).
moduleВыводить каждое предупреждение только при первом появлении в каждом модуле.
onceВыводить каждое предупреждение только при первом появлении в программе.
errorВозбуждать исключение вместо вывода предупреждения.
Полная форма аргумента:
action:message:category:module:line
Здесь action (действие) как описано выше, но применяется только к сообщениям, соответствующим\nостальным полям. Пустые поля соответствуют любым значениям; конечные пустые поля можно\nопускать. Поле message соответствует началу выводимого сообщения\nпредупреждения; сравнение нечувствительно к регистру. Поле category соответствует\nкатегории предупреждения. Это должно быть имя класса; при сравнении проверяется,\nявляется ли фактическая категория предупреждения сообщения подклассом указанной\nкатегории. Необходимо указывать полное имя класса. Поле module соответствует\n(полному) имени модуля; сравнение чувствительно к регистру. Поле line\nсоответствует номеру строки; ноль соответствует всем номерам строк и, таким образом,\nэквивалентен отсутствующему номеру строки.
-
-x¶ Пропускает первую строку исходного файла, позволяя использовать не-юниксовые формы
#!cmd. Это предназначено только для специфического хака DOS.
-
-X¶ Зарезервировано для различных опций, специфичных для реализации. В настоящее время CPython определяет следующие возможные значения:
-X faulthandlerдля включенияfaulthandler;-X showrefcountвывод общего количества ссылок и числа использованных блоков памяти при завершении программы или после каждого оператора в интерактивном интерпретаторе. Работает только в отладочных сборках.-X tracemallocдля начала трассировки выделений памяти Python с помощью модуляtracemalloc. По умолчанию в обратной трассировке сохраняется только самый последний кадр. Используйте-X tracemalloc=NFRAME, чтобы начать трассировку с лимитом обратной трассировки в NFRAME кадров. Дополнительную информацию см. вtracemalloc.start().-X showalloccountдля вывода общего количества выделенных объектов для каждого типа при завершении программы. Это работает только при сборке Python с определённымCOUNT_ALLOCS.
Он также позволяет передавать произвольные значения и извлекать их через словарь
sys._xoptions.Изменено в версии 3.2: Был добавлен параметр
-X.Новое в версии 3.3: Параметр
-X faulthandler.Новое в версии 3.4: Параметры
-X showrefcountи-X tracemalloc.Новое в версии 3.6: Опция
-X showalloccount.
1.1.4. Параметры, которые не стоит использовать¶Options you shouldn’t use
1.2. Переменные окружения¶Environment variables
Эти переменные окружения влияют на поведение Python, они обрабатываются до параметров командной строки, кроме -E или -I. Принято, что параметры командной строки переопределяют переменные окружения в случае конфликта.
-
PYTHONHOME¶ Изменяет расположение стандартных библиотек Python. По умолчанию библиотеки ищутся в
prefix/lib/pythonversionиexec_prefix/lib/pythonversion, гдеprefixиexec_prefix– это каталоги, зависящие от установки; оба по умолчанию имеют значение/usr/local.Когда
PYTHONHOMEустановлен в один каталог, его значение заменяет обаprefixиexec_prefix. Чтобы указать для них разные значения, установитеPYTHONHOMEвprefix:exec_prefix.
-
PYTHONPATH¶ Дополняет путь поиска модулей по умолчанию. Формат такой же, как у
PATHоболочки: один или несколько путей к каталогам, разделённыхos.pathsep(например, двоеточиями в Unix или точкой с запятой в Windows). Несуществующие каталоги игнорируются без предупреждения.В дополнение к обычным каталогам, отдельные записи
PYTHONPATHмогут ссылаться на zip-файлы, содержащие чистые модули Python (в исходной или скомпилированной форме). Модули расширений не могут быть импортированы из zip-файлов.Путь поиска по умолчанию зависит от установки, но обычно начинается с
prefix/lib/pythonversion(см.PYTHONHOMEвыше). Он всегда добавляется кPYTHONPATH.Дополнительный каталог будет вставлен в путь поиска перед
PYTHONPATH, как описано выше в разделе Параметры интерфейса. Путь поиска можно изменять из программы Python как переменнуюsys.path.
-
PYTHONSTARTUP¶ Если это имя читаемого файла, команды Python из этого файла выполняются перед отображением первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имён, что и интерактивные команды, поэтому определённые или импортированные в нём объекты могут использоваться без уточнения в интерактивном сеансе. Также в этом файле можно изменить приглашения
sys.ps1иsys.ps2и хукsys.__interactivehook__.
-
PYTHONOPTIMIZE¶ Если эта переменная установлена в непустую строку, это эквивалентно указанию опции
-O. Если установлено целое число, это эквивалентно указанию-Oнесколько раз.
-
PYTHONDEBUG¶ Если эта переменная установлена в непустую строку, это эквивалентно указанию опции
-d. Если установлено целое число, это эквивалентно указанию-dнесколько раз.
-
PYTHONINSPECT¶ Если эта переменная установлена в непустую строку, это эквивалентно указанию опции
-i.Эта переменная также может быть изменена кодом Python с помощью
os.environ, чтобы принудительно включить режим инспектирования при завершении программы.
-
PYTHONUNBUFFERED¶ Если эта переменная установлена в непустую строку, это эквивалентно указанию опции
-u.
-
PYTHONVERBOSE¶ Если эта переменная установлена в непустую строку, это эквивалентно указанию опции
-v. Если установлено целое число, это эквивалентно указанию-vнесколько раз.
-
PYTHONCASEOK¶ Если переменная установлена, Python игнорирует регистр в операторах
import. Это работает только в Windows и OS X.
-
PYTHONDONTWRITEBYTECODE¶ Если эта переменная установлена в непустую строку, Python не будет пытаться записывать файлы
.pycпри импорте исходных модулей. Это эквивалентно указанию опции-B.
-
PYTHONHASHSEED¶ Если эта переменная не установлена или установлена в
random, для инициализации хэшей объектов str, bytes и datetime используется случайное значение.Если
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 не будет добавлять
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. Если присвоена строка, разделённая\nзапятыми, это эквивалентно указанию-Wнесколько\nраз.
-
PYTHONFAULTHANDLER¶ Если эта переменная окружения установлена в непустую строку,
faulthandler.enable()вызывается при запуске: устанавливается обработчик сигналовSIGSEGV,SIGFPE,SIGABRT,SIGBUSиSIGILLдля дампа обратной трассировки Python. Это эквивалентно параметру-Xfaulthandler.Новое в версии 3.3.
-
PYTHONTRACEMALLOC¶ Если эта переменная окружения установлена в непустую строку, начинается трассировка выделений памяти Python с помощью модуля
tracemalloc. Значение переменной – максимальное количество кадров, сохраняемых в обратной трассировке. Например,PYTHONTRACEMALLOC=1сохраняет только самый последний кадр. Дополнительную информацию см. вtracemalloc.start().Новое в версии 3.4.
-
PYTHONASYNCIODEBUG¶ Если эта переменная окружения установлена в непустую строку, включает режим отладки модуля
asyncio.Новое в версии 3.4.
-
PYTHONMALLOC¶ Устанавливает аллокаторы памяти Python и/или добавляет отладочные хуки.
Устанавливает семейство аллокаторов памяти, используемых Python:
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, но также устанавливает отладочные хуки
Когда Python скомпилирован в режиме выпуска, по умолчанию используется
pymalloc. При\nкомпиляции в режиме отладки по умолчанию используетсяpymalloc_debug, а отладочные хуки применяются\nавтоматически.Если Python настроен без поддержки
pymalloc, тоpymallocи\npymalloc_debugнедоступны; по умолчанию используетсяmallocв режиме выпуска\nиmalloc_debugв режиме отладки.Смотрите функцию
PyMem_SetupDebugHooks()для отладочных перехватчиков на распределителях памяти Python.Новое в версии 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.
1.2.1. Переменные режима отладки¶Debug-mode variables
Установка этих переменных работает только в отладочной сборке Python, то есть если Python был сконфигурирован с параметром сборки --with-pydebug.
-
PYTHONTHREADDEBUG¶ Если установлено, Python будет выводить отладочную информацию о потоках.
-
PYTHONDUMPREFS¶ Если установлено, Python будет выгружать объекты и счетчики ссылок, все еще живые после завершения работы интерпретатора.