> **Источник:** https://python-all.ru/3.0/using/cmdline.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

Интерпретатор CPython сканирует командную строку и окружение на предмет различных настроек.

> **Примечание**
>
> Схемы командной строки других реализаций могут отличаться. Смотрите [*Альтернативные реализации*](https://python-all.ru/3.0/reference/introduction.html#implementations) для получения дополнительных ресурсов.

## Командная строка

При запуске Python можно указать любые из этих опций:

```text
python [-bdEiOsStuUvxX?] [-c command | -m module-name | script | - ] [args]
```

Наиболее распространённый вариант использования – это простой запуск скрипта:

```text
python myscript.py
```

### Опции интерфейса

Интерфейс интерпретатора напоминает интерфейс командной оболочки UNIX, но предоставляет дополнительные способы запуска:

- При вызове с стандартным вводом, подключённым к tty-устройству, он выводит приглашение для команд и выполняет их, пока не будет прочитан EOF (символ конца файла; на UNIX его можно ввести с помощью *Ctrl-D*, а на Windows – *Ctrl-Z, Enter*).
- При вызове с именем файла в качестве аргумента или с файлом в качестве стандартного ввода он читает и выполняет скрипт из этого файла.
- При вызове с именем каталога в качестве аргумента он читает и выполняет соответствующий скрипт из этого каталога.
- При вызове с `-c command` интерпретатор выполняет инструкции Python, указанные в *command*. Эта *command* может содержать несколько инструкций, разделённых символами новой строки. Начальные пробелы в инструкциях Python имеют значение!
- При вызове с `-m module-name` интерпретатор находит указанный модуль по пути Python и выполняет его как скрипт.

В неинтерактивном режиме весь ввод анализируется до его выполнения.

Опция интерфейса завершает список опций, обрабатываемых интерпретатором; все последующие аргументы попадают в [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) – обратите внимание, что первый элемент с индексом ноль (`sys.argv[0]`) – это строка, отражающая источник программы.

#### `-c <command>`

Выполняет код Python из *command*. *command* может состоять из одного или нескольких операторов, разделённых переводами строк, с учётом ведущих пробелов, как в обычном коде модуля.

Если указана эта опция, первым элементом [`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) (что позволит импортировать модули из этого каталога как модули верхнего уровня).

#### `-m <module-name>`

Ищет указанный модуль в [`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__).

Поскольку аргументом является имя *модуля*, не следует указывать расширение файла (`.py`). Имя `module-name` должно быть допустимым именем модуля Python, хотя реализация может не всегда это контролировать (например, может позволить использовать имя, содержащее дефис).

> **Примечание**
>
> Эту опцию нельзя использовать со встроенными модулями и модулями расширения, написанными на C, поскольку у них нет файлов модулей Python. Однако её всё ещё можно использовать для прекомпилированных модулей, даже если исходный файл недоступен.

Если указана эта опция, первым элементом [`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).

Многие модули стандартной библиотеки содержат код, который вызывается при их выполнении как скрипта. Примером может служить модуль [`timeit`](https://python-all.ru/3.0/library/timeit.html#module-timeit):

```text
python -mtimeit -s 'setup here' 'benchmarked code here'
python -mtimeit -h # for details
```

> **См. также**
>
> [`runpy.run_module()`](https://python-all.ru/3.0/library/runpy.html#runpy.run_module) Фактическая реализация этой возможности.
>
> [**PEP 338**](https://python-all.ru/3.0/using/cmdline.html) – Выполнение модулей как сценариев

#### `-`

Читает команды из стандартного ввода ([`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).

Если указана эта опция, первым элементом [`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).

#### `<script>`

Выполняет код Python, содержащийся в *script*, который должен быть путём в файловой системе (абсолютным или относительным) и ссылаться на файл Python, каталог с файлом `__main__.py` или zip-файл с файлом `__main__.py`.

Если указана эта опция, первым элементом [`sys.argv`](https://python-all.ru/3.0/library/sys.html#sys.argv) будет имя скрипта, указанное в командной строке.

Если имя скрипта напрямую ссылается на файл 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__).

Если имя скрипта ссылается на каталог или 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__).

Если не указана опция интерфейса, подразумевается [*-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).

> **См. также**
>
> [*Запуск интерпретатора*](https://python-all.ru/3.0/tutorial/interpreter.html#tut-invoking)

### Общие опции

#### `-?`

#### `-h`

#### `--help`

Выводит краткое описание всех параметров командной строки.

#### `-V`

#### `--version`

Выводит номер версии Python и завершает работу. Пример вывода:

```text
Python 3.0
```

### Разные опции

#### `-b`

Выдаёт предупреждение при сравнении str и bytes. Выдаёт ошибку, если опция указана дважды (

*-bb*

).

#### `-B`

Если указано, Python не будет пытаться записать файлы

`.pyc`

или

`.pyo`

при импорте исходных модулей. См. также

[**PYTHONDONTWRITEBYTECODE**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE)

.

#### `-d`

Включает вывод отладки парсера (только для волшебников, зависит от параметров компиляции). См. также

[**PYTHONDEBUG**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONDEBUG)

.

#### `-E`

Игнорирует все переменные окружения

**PYTHON\***

, например

[**PYTHONPATH**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONPATH)

и

[**PYTHONHOME**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONHOME)

, которые могут быть установлены.

#### `-i`

Если скрипт передан в качестве первого аргумента или используется опция [*-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) не читается.

Это может быть полезно для просмотра глобальных переменных или трассировки стека, когда скрипт вызывает исключение. См. также [**PYTHONINSPECT**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONINSPECT).

#### `-O`

Включает базовые оптимизации. Это изменяет расширение файлов для скомпилированных (

[*байткод*](https://python-all.ru/3.0/glossary.html#term-bytecode)

) файлов с

`.pyc`

на

`.pyo`

. См. также

[**PYTHONOPTIMIZE**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONOPTIMIZE)

.

#### `-OO`

Отбрасывает строки документации в дополнение к оптимизациям

[*-O*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-O)

.

#### `-s`

Не добавлять пользовательский каталог site в sys.path

> **См. также**
>
> [**PEP 370**](https://python-all.ru/3.0/using/cmdline.html) – Каталог site-packages для каждого пользователя

#### `-S`

Отключает импорт модуля

[`site`](https://python-all.ru/3.0/library/site.html#module-site)

и связанные с сайтом манипуляции с

[`sys.path`](https://python-all.ru/3.0/library/sys.html#sys.path)

, которые он влечёт.

#### `-u`

Принудительно делает stdin, stdout и stderr полностью небуферизованными. В системах, где это имеет значение, также переводит stdin, stdout и stderr в двоичный режим.

Обратите внимание, что существует внутренняя буферизация в [`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:`.

См. также [**PYTHONUNBUFFERED**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONUNBUFFERED).

#### `-v`

Выводит сообщение каждый раз, когда модуль инициализируется, показывая место (имя файла или встроенный модуль), из которого он загружается. При двойном указании (

*-vv*

) выводит сообщение для каждого файла, проверяемого при поиске модуля. Также предоставляет информацию об очистке модулей при завершении. См. также

[**PYTHONVERBOSE**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONVERBOSE)

.

#### `-W arg`

Управление предупреждениями. Механизм предупреждений Python по умолчанию выводит сообщения предупреждений в [`sys.stderr`](https://python-all.ru/3.0/library/sys.html#sys.stderr). Типичное сообщение предупреждения имеет следующую форму:

```text
file:line: category: message
```

По умолчанию каждое предупреждение выводится один раз для каждой строки исходного кода, в которой оно возникает. Этот параметр управляет частотой вывода предупреждений.

Может быть указано несколько опций [*-W*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-W); если предупреждение соответствует более чем одной опции, выполняется действие для последней подходящей опции. Недействительные опции [*-W*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-W) игнорируются (хотя сообщение предупреждения о недействительных опциях выводится при первом предупреждении).

Предупреждения также можно контролировать из программы Python с помощью модуля [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings).

Простейшая форма аргумента – одна из следующих строк действий (или\\nуникальное сокращение):

**`игнорировать`**

Игнорировать все предупреждения.

**`по умолчанию`**

Явно запросить поведение по умолчанию (вывод каждого предупреждения один раз на\\nстроку исходного кода).

**`все`**

Выводить предупреждение при каждом его появлении (это может породить много сообщений, если\\nпредупреждение вызывается многократно для одной и той же строки, например, внутри\\nцикла).

**`модуль`**

Печатает каждое предупреждение только при первом его появлении в каждом модуле.

**`однократно`**

Выводить каждое предупреждение только при первом появлении в программе.

**`ошибка`**

Возбуждать исключение вместо вывода предупреждения.

Полная форма аргумента:

```text
action:message:category:module:line
```

Здесь *action* работает как описано выше, но применяется только к сообщениям, соответствующим остальным полям. Пустые поля соответствуют всем значениям; завершающие пустые поля можно опустить. Поле *message* соответствует началу выводимого предупреждения; сравнение регистронезависимо. Поле *category* соответствует категории предупреждения. Оно должно быть именем класса; при сравнении проверяется, является ли фактическая категория предупреждения подклассом указанной категории. Должно быть указано полное имя класса. Поле *module* соответствует полному имени модуля (с точками); сравнение регистрозависимо. Поле *line* соответствует номеру строки, при этом ноль соответствует всем номерам строк и, таким образом, эквивалентен отсутствующему номеру.

> **См. также**
>
> [`warnings`](https://python-all.ru/3.0/library/warnings.html#module-warnings) – модуль warnings
>
> [**PEP 230**](https://python-all.ru/3.0/using/cmdline.html) – инфраструктура предупреждений

#### `-x`

Пропускает первую строку исходного файла, позволяя использовать не-Unix формы `#!cmd`. Это предназначено только для специфичного для DOS хака.

> **Предупреждение**
>
> Номера строк в сообщениях об ошибках будут сдвинуты на единицу!

## Переменные окружения

Эти переменные окружения влияют на поведение Python.

**`PYTHONHOME`**

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

Если [**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`.

**`PYTHONPATH`**

Дополняет стандартный путь поиска модулей. Формат такой же, как у **PATH** в оболочке: один или несколько путей к каталогам, разделённых [`os.pathsep`](https://python-all.ru/3.0/library/os.html#os.pathsep) (например, двоеточием в Unix или точкой с запятой в Windows). Несуществующие каталоги игнорируются без предупреждения.

Помимо обычных каталогов, отдельные записи [**PYTHONPATH**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONPATH) могут указывать на zip-файлы, содержащие чистые модули Python (в исходной или скомпилированной форме). Расширения не могут быть импортированы из zip-файлов.

Стандартный путь поиска зависит от установки, но обычно начинается с `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).

Дополнительный каталог будет вставлен в путь поиска перед [**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).

**`PYTHONSTARTUP`**

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

[`sys.ps1`](https://python-all.ru/3.0/library/sys.html#sys.ps1)

и

[`sys.ps2`](https://python-all.ru/3.0/library/sys.html#sys.ps2)

.

**`PYTHONY2K`**

Если присвоено непустое значение, модуль

[`time`](https://python-all.ru/3.0/library/time.html#module-time)

будет требовать, чтобы даты, указанные в виде строк, содержали 4-значные годы; в противном случае 2-значные годы преобразуются по правилам, описанным в документации модуля

[`time`](https://python-all.ru/3.0/library/time.html#module-time)

.

**`PYTHONOPTIMIZE`**

Если установлена в непустую строку, это эквивалентно указанию опции

[*-O*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-O)

. Если установлена в целое число, это эквивалентно указанию

[*-O*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-O)

несколько раз.

**`PYTHONDEBUG`**

Если установлена в непустую строку, это эквивалентно указанию опции

[*-d*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-d)

. Если установлена в целое число, это эквивалентно указанию

[*-d*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-d)

несколько раз.

**`PYTHONINSPECT`**

Если установлена в непустую строку, это эквивалентно указанию опции [*-i*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-i).

Эту переменную также можно изменить из кода Python с помощью [`os.environ`](https://python-all.ru/3.0/library/os.html#os.environ), чтобы принудительно включить режим инспекции при завершении программы.

**`PYTHONUNBUFFERED`**

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции

[*-u*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-u)

.

**`PYTHONVERBOSE`**

Если эта переменная установлена в непустую строку, это эквивалентно указанию опции

[*-v*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-v)

. Если установлена в целое число, это эквивалентно указанию

[*-v*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-v)

несколько раз.

**`PYTHONCASEOK`**

Если эта переменная установлена, Python игнорирует регистр в операторах

[`import`](https://python-all.ru/3.0/reference/simple_stmts.html#import)

. Это работает только в Windows.

**`PYTHONDONTWRITEBYTECODE`**

Если эта переменная установлена, Python не будет пытаться создавать файлы

`.pyc`

или

`.pyo`

при импорте исходных модулей.

**`PYTHONIOENCODING`**

Переопределяет кодировку, используемую для stdin/stdout/stderr, в формате `имя_кодировки:обработчик_ошибок`. Часть `:обработчик_ошибок` необязательна и имеет тот же смысл, что и в [`str.encode()`](https://python-all.ru/3.0/library/stdtypes.html#str.encode).

Для stderr часть `:errorhandler` игнорируется; обработчик всегда будет `'backslashreplace'`.

**`PYTHONNOUSERSITE`**

Если эта переменная установлена, Python не будет добавлять каталог пользовательских сайтов в sys.path.

> **См. также**
>
> [**PEP 370**](https://python-all.ru/3.0/using/cmdline.html) – Каталог site-packages для каждого пользователя

**`PYTHONUSERBASE`**

Устанавливает базовый каталог для пользовательского каталога сайтов

> **См. также**
>
> [**PEP 370**](https://python-all.ru/3.0/using/cmdline.html) – Каталог site-packages для каждого пользователя

**`PYTHONEXECUTABLE`**

Если эта переменная окружения установлена,

`sys.argv[0]`

будет установлено в её значение вместо значения, полученного через среду выполнения C. Работает только на Mac OS X.

### Переменные отладочного режима

Установка этих переменных действует только в отладочной сборке Python, то есть если Python был собран с опцией сборки *--with-pydebug*.

**`PYTHONTHREADDEBUG`**

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

**`PYTHONDUMPREFS`**

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

**`PYTHONMALLOCSTATS`**

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