cmdline.md
1> **Источник:** https://python-all.ru/3.0/using/cmdline.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Командная строка и окружение89Интерпретатор CPython сканирует командную строку и окружение на предмет различных настроек.1011> **Примечание**12>13> Схемы командной строки других реализаций могут отличаться. Смотрите [*Альтернативные реализации*](https://python-all.ru/3.0/reference/introduction.html#implementations) для получения дополнительных ресурсов.1415## Командная строка1617При запуске Python можно указать любые из этих опций:1819```text20python [-bdEiOsStuUvxX?] [-c command | -m module-name | script | - ] [args]21```2223Наиболее распространённый вариант использования – это простой запуск скрипта:2425```text26python myscript.py27```2829### Опции интерфейса3031Интерфейс интерпретатора напоминает интерфейс командной оболочки UNIX, но предоставляет дополнительные способы запуска:3233- При вызове с стандартным вводом, подключённым к tty-устройству, он выводит приглашение для команд и выполняет их, пока не будет прочитан EOF (символ конца файла; на UNIX его можно ввести с помощью *Ctrl-D*, а на Windows – *Ctrl-Z, Enter*).34- При вызове с именем файла в качестве аргумента или с файлом в качестве стандартного ввода он читает и выполняет скрипт из этого файла.35- При вызове с именем каталога в качестве аргумента он читает и выполняет соответствующий скрипт из этого каталога.36- При вызове с `-c command` интерпретатор выполняет инструкции Python, указанные в *command*. Эта *command* может содержать несколько инструкций, разделённых символами новой строки. Начальные пробелы в инструкциях Python имеют значение!37- При вызове с `-m module-name` интерпретатор находит указанный модуль по пути Python и выполняет его как скрипт.3839В неинтерактивном режиме весь ввод анализируется до его выполнения.4041Опция интерфейса завершает список опций, обрабатываемых интерпретатором; все последующие аргументы попадают в [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) – обратите внимание, что первый элемент с индексом ноль (`sys.argv[0]`) – это строка, отражающая источник программы.4243#### `-c <command>`4445Выполняет код Python из *command*. *command* может состоять из одного или нескольких операторов, разделённых переводами строк, с учётом ведущих пробелов, как в обычном коде модуля.4647Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) будет `"-c"`, а текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path) (что позволит импортировать модули из этого каталога как модули верхнего уровня).4849#### `-m <module-name>`5051Ищет указанный модуль в [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path) и выполняет его содержимое как модуль [`__main__`](https://python-all.ru/3.0/library/__main__.html#module-__main__).5253Поскольку аргументом является имя *модуля*, не следует указывать расширение файла (`.py`). Имя `module-name` должно быть допустимым именем модуля Python, хотя реализация может не всегда это контролировать (например, может позволить использовать имя, содержащее дефис).5455> **Примечание**56>57> Эту опцию нельзя использовать со встроенными модулями и модулями расширения, написанными на C, поскольку у них нет файлов модулей Python. Однако её всё ещё можно использовать для прекомпилированных модулей, даже если исходный файл недоступен.5859Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) будет полный путь к файлу модуля. Как и в случае с опцией [*-c*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-c), текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path).6061Многие модули стандартной библиотеки содержат код, который вызывается при их выполнении как скрипта. Примером может служить модуль [`timeit`](https://python-all.ru/3.0/library/timeit.html#module-timeit):6263```text64python -mtimeit -s 'setup here' 'benchmarked code here'65python -mtimeit -h # for details66```6768> **См. также**69>70> [`runpy.run_module()`](https://python-all.ru/3.0/library/runpy.html#runpy.run_module) Фактическая реализация этой возможности.71>72> [**PEP 338**](https://python-all.ru/3.0/using/cmdline.html) – Выполнение модулей как сценариев7374#### `-`7576Читает команды из стандартного ввода ([`sys.stdin`](https://python-all.ru/3.0/library/sys.html#sys.stdin)). Если стандартный ввод – терминал, подразумевается опция [*-i*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-i).7778Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) будет `"-"`, а текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path).7980#### `<script>`8182Выполняет код Python, содержащийся в *script*, который должен быть путём в файловой системе (абсолютным или относительным) и ссылаться на файл Python, каталог с файлом `__main__.py` или zip-файл с файлом `__main__.py`.8384Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) будет имя скрипта, указанное в командной строке.8586Если имя скрипта напрямую ссылается на файл Python, каталог, содержащий этот файл, добавляется в начало [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path), и файл выполняется как модуль [`__main__`](https://python-all.ru/3.0/library/__main__.html#module-__main__).8788Если имя скрипта ссылается на каталог или zip-файл, имя скрипта добавляется в начало [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path), а файл `__main__.py` из этого каталога выполняется как модуль [`__main__`](https://python-all.ru/3.0/library/__main__.html#module-__main__).8990Если не указана опция интерфейса, подразумевается [*-i*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-i), `sys.argv[0]` является пустой строкой (`""`), а текущий каталог будет добавлен в начало [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path).9192> **См. также**93>94> [*Запуск интерпретатора*](https://python-all.ru/3.0/tutorial/interpreter.html#tut-invoking)9596### Общие опции9798#### `-?`99100#### `-h`101102#### `--help`103104Выводит краткое описание всех параметров командной строки.105106#### `-V`107108#### `--version`109110Выводит номер версии Python и завершает работу. Пример вывода:111112```text113Python 3.0114```115116### Разные опции117118#### `-b`119120Выдаёт предупреждение при сравнении str и bytes. Выдаёт ошибку, если опция указана дважды (121122*-bb*123124).125126#### `-B`127128Если указано, Python не будет пытаться записать файлы129130`.pyc`131132или133134`.pyo`135136при импорте исходных модулей. См. также137138[**PYTHONDONTWRITEBYTECODE**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE)139140.141142#### `-d`143144Включает вывод отладки парсера (только для волшебников, зависит от параметров компиляции). См. также145146[**PYTHONDEBUG**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONDEBUG)147148.149150#### `-E`151152Игнорирует все переменные окружения153154**PYTHON\***155156, например157158[**PYTHONPATH**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONPATH)159160и161162[**PYTHONHOME**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONHOME)163164, которые могут быть установлены.165166#### `-i`167168Если скрипт передан в качестве первого аргумента или используется опция [*-c*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-c), после выполнения скрипта или команды переходит в интерактивный режим, даже если [`sys.stdin`](https://python-all.ru/3.0/library/sys.html#sys.stdin) не является терминалом. Файл [**PYTHONSTARTUP**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONSTARTUP) не читается.169170Это может быть полезно для просмотра глобальных переменных или трассировки стека, когда скрипт вызывает исключение. См. также [**PYTHONINSPECT**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONINSPECT).171172#### `-O`173174Включает базовые оптимизации. Это изменяет расширение файлов для скомпилированных (175176[*байткод*](https://python-all.ru/3.0/glossary.html#term-bytecode)177178) файлов с179180`.pyc`181182на183184`.pyo`185186. См. также187188[**PYTHONOPTIMIZE**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONOPTIMIZE)189190.191192#### `-OO`193194Отбрасывает строки документации в дополнение к оптимизациям195196[*-O*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-O)197198.199200#### `-s`201202Не добавлять пользовательский каталог site в sys.path203204> **См. также**205>206> [**PEP 370**](https://python-all.ru/3.0/using/cmdline.html) – Каталог site-packages для каждого пользователя207208#### `-S`209210Отключает импорт модуля211212[`site`](https://python-all.ru/3.0/library/site.html#module-site)213214и связанные с сайтом манипуляции с215216[`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path)217218, которые он влечёт.219220#### `-u`221222Принудительно делает stdin, stdout и stderr полностью небуферизованными. В системах, где это имеет значение, также переводит stdin, stdout и stderr в двоичный режим.223224Обратите внимание, что существует внутренняя буферизация в [`file.readlines()`](https://python-all.ru/3.0/library/stdtypes.html#file.readlines) и [*Файловые объекты*](https://python-all.ru/3.0/library/stdtypes.html#bltin-file-objects) (`for line in sys.stdin`), на которую эта опция не влияет. Чтобы обойти это, используйте [`file.readline()`](https://python-all.ru/3.0/library/stdtypes.html#file.readline) внутри цикла `while 1:`.225226См. также [**PYTHONUNBUFFERED**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONUNBUFFERED).227228#### `-v`229230Выводит сообщение каждый раз, когда модуль инициализируется, показывая место (имя файла или встроенный модуль), из которого он загружается. При двойном указании (231232*-vv*233234) выводит сообщение для каждого файла, проверяемого при поиске модуля. Также предоставляет информацию об очистке модулей при завершении. См. также235236[**PYTHONVERBOSE**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONVERBOSE)237238.239240#### `-W arg`241242Управление предупреждениями. Механизм предупреждений Python по умолчанию выводит сообщения предупреждений в [`sys.stderr`](https://python-all.ru/3.0/library/sys.html#sys.stderr). Типичное сообщение предупреждения имеет следующую форму:243244```text245file:line: category: message246```247248По умолчанию каждое предупреждение выводится один раз для каждой строки исходного кода, в которой оно возникает. Этот параметр управляет частотой вывода предупреждений.249250Может быть указано несколько опций [*-W*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-W); если предупреждение соответствует более чем одной опции, выполняется действие для последней подходящей опции. Недействительные опции [*-W*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-W) игнорируются (хотя сообщение предупреждения о недействительных опциях выводится при первом предупреждении).251252Предупреждения также можно контролировать из программы Python с помощью модуля [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings).253254Простейшая форма аргумента – одна из следующих строк действий (или\\nуникальное сокращение):255256**`игнорировать`**257258Игнорировать все предупреждения.259260**`по умолчанию`**261262Явно запросить поведение по умолчанию (вывод каждого предупреждения один раз на\\nстроку исходного кода).263264**`все`**265266Выводить предупреждение при каждом его появлении (это может породить много сообщений, если\\nпредупреждение вызывается многократно для одной и той же строки, например, внутри\\nцикла).267268**`модуль`**269270Печатает каждое предупреждение только при первом его появлении в каждом модуле.271272**`однократно`**273274Выводить каждое предупреждение только при первом появлении в программе.275276**`ошибка`**277278Возбуждать исключение вместо вывода предупреждения.279280Полная форма аргумента:281282```text283action:message:category:module:line284```285286Здесь *action* работает как описано выше, но применяется только к сообщениям, соответствующим остальным полям. Пустые поля соответствуют всем значениям; завершающие пустые поля можно опустить. Поле *message* соответствует началу выводимого предупреждения; сравнение регистронезависимо. Поле *category* соответствует категории предупреждения. Оно должно быть именем класса; при сравнении проверяется, является ли фактическая категория предупреждения подклассом указанной категории. Должно быть указано полное имя класса. Поле *module* соответствует полному имени модуля (с точками); сравнение регистрозависимо. Поле *line* соответствует номеру строки, при этом ноль соответствует всем номерам строк и, таким образом, эквивалентен отсутствующему номеру.287288> **См. также**289>290> [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings) – модуль warnings291>292> [**PEP 230**](https://python-all.ru/3.0/using/cmdline.html) – инфраструктура предупреждений293294#### `-x`295296Пропускает первую строку исходного файла, позволяя использовать не-Unix формы `#!cmd`. Это предназначено только для специфичного для DOS хака.297298> **Предупреждение**299>300> Номера строк в сообщениях об ошибках будут сдвинуты на единицу!301302## Переменные окружения303304Эти переменные окружения влияют на поведение Python.305306**`PYTHONHOME`**307308Изменяет расположение стандартных библиотек Python. По умолчанию библиотеки ищутся в `prefix/lib/pythonversion` и `exec_prefix/lib/pythonversion`, где `prefix` и `exec_prefix` – это каталоги, зависящие от установки, оба по умолчанию равны `/usr/local`.309310Если [**PYTHONHOME**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONHOME) задан как одна директория, его значение заменяет и `prefix`, и `exec_prefix`. Чтобы указать для них разные значения, задайте [**PYTHONHOME**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONHOME) как `prefix:exec_prefix`.311312**`PYTHONPATH`**313314Дополняет стандартный путь поиска модулей. Формат такой же, как у **PATH** в оболочке: один или несколько путей к каталогам, разделённых [`os.pathsep`](https://python-all.ru/3.0/library/os.html#os.pathsep) (например, двоеточием в Unix или точкой с запятой в Windows). Несуществующие каталоги игнорируются без предупреждения.315316Помимо обычных каталогов, отдельные записи [**PYTHONPATH**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONPATH) могут указывать на zip-файлы, содержащие чистые модули Python (в исходной или скомпилированной форме). Расширения не могут быть импортированы из zip-файлов.317318Стандартный путь поиска зависит от установки, но обычно начинается с `prefix/lib/pythonversion` (см. [**PYTHONHOME**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONHOME) выше). Он *всегда* добавляется в конец [**PYTHONPATH**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONPATH).319320Дополнительный каталог будет вставлен в путь поиска перед [**PYTHONPATH**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONPATH), как описано выше в разделе [*Параметры интерфейса*](https://python-all.ru/3.0/using/cmdline.html#using-on-interface-options). Путь поиска можно изменять из программы на Python через переменную [`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path).321322**`PYTHONSTARTUP`**323324Если указано имя читаемого файла, команды Python из этого файла выполняются до отображения первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имён, что и интерактивные команды, поэтому объекты, определённые или импортированные в нём, могут использоваться без квалификации в интерактивном сеансе. В этом файле также можно изменить приглашения325326[`sys.ps1`](https://python-all.ru/3.0/library/sys.html#sys.ps1)327328и329330[`sys.ps2`](https://python-all.ru/3.0/library/sys.html#sys.ps2)331332.333334**`PYTHONY2K`**335336Если присвоено непустое значение, модуль337338[`time`](https://python-all.ru/3.0/library/time.html#module-time)339340будет требовать, чтобы даты, указанные в виде строк, содержали 4-значные годы; в противном случае 2-значные годы преобразуются по правилам, описанным в документации модуля341342[`time`](https://python-all.ru/3.0/library/time.html#module-time)343344.345346**`PYTHONOPTIMIZE`**347348Если установлена в непустую строку, это эквивалентно указанию опции349350[*-O*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-O)351352. Если установлена в целое число, это эквивалентно указанию353354[*-O*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-O)355356несколько раз.357358**`PYTHONDEBUG`**359360Если установлена в непустую строку, это эквивалентно указанию опции361362[*-d*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-d)363364. Если установлена в целое число, это эквивалентно указанию365366[*-d*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-d)367368несколько раз.369370**`PYTHONINSPECT`**371372Если установлена в непустую строку, это эквивалентно указанию опции [*-i*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-i).373374Эту переменную также можно изменить из кода Python с помощью [`os.environ`](https://python-all.ru/3.0/library/os.html#os.environ), чтобы принудительно включить режим инспекции при завершении программы.375376**`PYTHONUNBUFFERED`**377378Если эта переменная установлена в непустую строку, это эквивалентно указанию опции379380[*-u*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-u)381382.383384**`PYTHONVERBOSE`**385386Если эта переменная установлена в непустую строку, это эквивалентно указанию опции387388[*-v*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-v)389390. Если установлена в целое число, это эквивалентно указанию391392[*-v*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-v)393394несколько раз.395396**`PYTHONCASEOK`**397398Если эта переменная установлена, Python игнорирует регистр в операторах399400[`import`](https://python-all.ru/3.0/reference/simple_stmts.html#import)401402. Это работает только в Windows.403404**`PYTHONDONTWRITEBYTECODE`**405406Если эта переменная установлена, Python не будет пытаться создавать файлы407408`.pyc`409410или411412`.pyo`413414при импорте исходных модулей.415416**`PYTHONIOENCODING`**417418Переопределяет кодировку, используемую для stdin/stdout/stderr, в формате `имя_кодировки:обработчик_ошибок`. Часть `:обработчик_ошибок` необязательна и имеет тот же смысл, что и в [`str.encode()`](https://python-all.ru/3.0/library/stdtypes.html#str.encode).419420Для stderr часть `:errorhandler` игнорируется; обработчик всегда будет `'backslashreplace'`.421422**`PYTHONNOUSERSITE`**423424Если эта переменная установлена, Python не будет добавлять каталог пользовательских сайтов в sys.path.425426> **См. также**427>428> [**PEP 370**](https://python-all.ru/3.0/using/cmdline.html) – Каталог site-packages для каждого пользователя429430**`PYTHONUSERBASE`**431432Устанавливает базовый каталог для пользовательского каталога сайтов433434> **См. также**435>436> [**PEP 370**](https://python-all.ru/3.0/using/cmdline.html) – Каталог site-packages для каждого пользователя437438**`PYTHONEXECUTABLE`**439440Если эта переменная окружения установлена,441442`sys.argv[0]`443444будет установлено в её значение вместо значения, полученного через среду выполнения C. Работает только на Mac OS X.445446### Переменные отладочного режима447448Установка этих переменных действует только в отладочной сборке Python, то есть если Python был собран с опцией сборки *--with-pydebug*.449450**`PYTHONTHREADDEBUG`**451452Если установлено, Python будет выводить отладочную информацию о потоках.453454**`PYTHONDUMPREFS`**455456Если установлено, Python будет выгружать объекты и счетчики ссылок, все еще живые после завершения работы интерпретатора.457458**`PYTHONMALLOCSTATS`**459460Если установлено, Python будет выводить статистику распределения памяти каждый раз при создании новой арены объектов, а также при завершении работы.461