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

---

# 3. Настройка Python

## 3.1. Требования к сборке

Для сборки CPython потребуется:

- Компилятор [C11](https://python-all.ru/3.16/using/configure.html). [Опциональные возможности C11](https://python-all.ru/3.16/using/configure.html) не требуются.
- В Windows требуется Microsoft Visual Studio 2017 или новее.
- Поддержка [IEEE 754](https://python-all.ru/3.16/using/configure.html) чисел с плавающей запятой и [нечисла (NaN)](https://python-all.ru/3.16/using/configure.html).
- Поддержка потоков.

Изменено в версии 3.5: В Windows теперь требуется Visual Studio 2015 или новее.

Изменено в версии 3.6: Отдельные возможности C99, такие как функции `<stdint.h>` и `static inline`, теперь требуются.

Изменено в версии 3.7: Поддержка потоков теперь обязательна.

Изменено в версии 3.11: Теперь требуются компилятор C11, поддержка IEEE 754 и NaN. В Windows требуется Visual Studio 2017 или новее.

См. также [**PEP 7** «Руководство по стилю C»](https://python-all.ru/3.16/using/configure.html) и [**PEP 11** «Поддержка платформ CPython»](https://python-all.ru/3.16/using/configure.html).

### 3.1.1. Требования к опциональным модулям

Некоторые [опциональные модули](https://python-all.ru/3.16/glossary.html#term-optional-module) стандартной библиотеки требуют установки сторонних библиотек для разработки (например, должны быть доступны заголовочные файлы).

Отсутствующие требования выводятся в `configure`. Модули, отсутствующие из-за неудовлетворённых зависимостей, перечисляются ближе к концу вывода `make`, иногда под внутренним именем, например, `_ctypes` для модуля [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes) .

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

Зависимости для сборки опциональных модулей:

| Зависимость | Минимальная версия | Модуль Python |
| --- | --- | --- |
| [libbz2](https://python-all.ru/3.16/using/configure.html) |  | [`bz2`](https://python-all.ru/3.16/library/bz2.html#module-bz2) |
| [libffi](https://python-all.ru/3.16/using/configure.html) | Рекомендуется 3.3.0 | [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes) |
| [liblzma](https://python-all.ru/3.16/using/configure.html) |  | [`lzma`](https://python-all.ru/3.16/library/lzma.html#module-lzma) |
| [libmpdec](https://python-all.ru/3.16/using/configure.html) | 2.5.0 | [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal) [\[1\]](https://python-all.ru/3.16/using/configure.html#id7) |
| [libreadline](https://python-all.ru/3.16/using/configure.html) или [libedit](https://python-all.ru/3.16/using/configure.html) [\[2\]](https://python-all.ru/3.16/using/configure.html#id8) |  | [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline) |
| [libuuid](https://python-all.ru/3.16/using/configure.html) |  | `_uuid` [\[3\]](https://python-all.ru/3.16/using/configure.html#id9) |
| [ncurses](https://python-all.ru/3.16/using/configure.html) [\[4\]](https://python-all.ru/3.16/using/configure.html#id10) |  | [`curses`](https://python-all.ru/3.16/library/curses.html#module-curses) |
| [OpenSSL](https://python-all.ru/3.16/using/configure.html) | Рекомендуется 3.0.18 (минимум 1.1.1) | [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl), [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib) [\[5\]](https://python-all.ru/3.16/using/configure.html#id11) |
| [SQLite](https://python-all.ru/3.16/using/configure.html) | 3.15.2 | [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3) |
| [Tcl/Tk](https://python-all.ru/3.16/using/configure.html) | 8.5.12 | [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter), [IDLE](https://python-all.ru/3.16/library/idle.html#idle), [`turtle`](https://python-all.ru/3.16/library/turtle.html#module-turtle) |
| [zlib](https://python-all.ru/3.16/using/configure.html) | 1.2.2.1 | [`zlib`](https://python-all.ru/3.16/library/zlib.html#module-zlib), [`gzip`](https://python-all.ru/3.16/library/gzip.html#module-gzip), [`ensurepip`](https://python-all.ru/3.16/library/ensurepip.html#module-ensurepip) |
| [zstd](https://python-all.ru/3.16/using/configure.html) | 1.4.5 | [`compression.zstd`](https://python-all.ru/3.16/library/compression.zstd.html#module-compression.zstd) |

\[[1](https://python-all.ru/3.16/using/configure.html#id2)\]

Если *libmpdec* недоступен, модуль [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal) будет использовать реализацию на чистом Python.

\[[2](https://python-all.ru/3.16/using/configure.html#id3)\]

См. [`--with-readline`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-readline) о выборе бэкенда для модуля [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline).

\[[3](https://python-all.ru/3.16/using/configure.html#id4)\]

Модуль [`uuid`](https://python-all.ru/3.16/library/uuid.html#module-uuid) использует `_uuid` для генерации «безопасных» UUID. Подробнее см. документацию модуля.

\[[4](https://python-all.ru/3.16/using/configure.html#id5)\]

Модуль [`curses`](https://python-all.ru/3.16/library/curses.html#module-curses) требует библиотеку `libncurses` или `libncursesw`. Модуль [`curses.panel`](https://python-all.ru/3.16/library/curses.panel.html#module-curses.panel) дополнительно требует библиотеку `libpanel` или `libpanelw`.

\[[5](https://python-all.ru/3.16/using/configure.html#id6)\]

Если OpenSSL недоступен, модуль [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib) будет использовать встроенные реализации нескольких хеш-функций. См. [`--with-builtin-hashlib-hashes`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-builtin-hashlib-hashes), чтобы *принудительно использовать* OpenSSL.

Обратите внимание, что таблица включает не все опциональные модули; в частности, платформенно-зависимые модули, такие как [`winreg`](https://python-all.ru/3.16/library/winreg.html#module-winreg), здесь не перечислены.

> **См. также**
>
> - [Руководство разработчика](https://python-all.ru/3.16/using/configure.html) содержит полный список зависимостей, необходимых для сборки всех модулей, и инструкции по их установке на распространённых платформах.
> - [`--with-system-expat`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-system-expat) позволяет сборку с внешней библиотекой [libexpat](https://python-all.ru/3.16/using/configure.html).
> - [Параметры для сторонних зависимостей](https://python-all.ru/3.16/using/configure.html#configure-options-for-dependencies)

Изменено в версии 3.1: Теперь для [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) требуется Tcl/Tk версии 8.3.1.

Изменено в версии 3.5: Теперь для [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) требуется Tcl/Tk версии 8.4.

Изменено в версии 3.7: Теперь для [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib) и [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl) требуется OpenSSL 1.0.2.

Изменено в версии 3.10: Теперь для [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib) и [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl) требуется OpenSSL 1.1.1. Для [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3) теперь требуется SQLite 3.7.15.

Изменено в версии 3.11: Теперь требуется Tcl/Tk версии 8.5.12 для [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter).

Изменено в версии 3.13: Теперь требуется SQLite 3.15.2 для [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3).

## 3.2. Сгенерированные файлы

Чтобы уменьшить зависимости сборки, исходный код Python содержит несколько сгенерированных файлов. Команды для перегенерации всех сгенерированных файлов:

```sh
make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure
```

Файл `Makefile.pre.in` документирует сгенерированные файлы, их входные данные и используемые инструменты для их перегенерации. Ищите цели make `regen-*`.

### 3.2.1. Сценарий configure

Команда `make regen-configure` перегенерирует файл `aclocal.m4` и сценарий `configure` с помощью сценария оболочки `Tools/build/regen-configure.sh`, который использует контейнер Ubuntu для получения тех же версий инструментов и обеспечения воспроизводимого результата.

Контейнер необязателен, следующую команду можно выполнить локально:

```sh
autoreconf -ivf -Werror
```

Сгенерированные файлы могут изменяться в зависимости от точных версий используемых инструментов. Контейнер, используемый CPython, содержит [Autoconf](https://python-all.ru/3.16/using/configure.html) 2.72, `aclocal` из [Automake](https://python-all.ru/3.16/using/configure.html) 1.16.5, и [pkg-config](https://python-all.ru/3.16/using/configure.html) 1.8.1.

Изменено в версии 3.13: Теперь используются Autoconf 2.71 и aclocal 1.16.5 для перегенерации `configure`.

Изменено в версии 3.14: Теперь используется Autoconf 2.72 для перегенерации `configure`.

## 3.3. Параметры configure

Выведите список всех параметров сценария `configure` с помощью:

```sh
./configure --help
```

См. также `Misc/SpecialBuilds.txt` в дистрибутиве исходного кода Python.

### 3.3.1. Общие параметры

#### `--enable-loadable-sqlite-extensions`

Поддержка загружаемых расширений в модуле расширения `_sqlite` (по умолчанию отключено) модуля [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3).

См. метод [`sqlite3.Connection.enable_load_extension()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.enable_load_extension) модуля [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3).

Добавлено в версии 3.6.

#### `--disable-ipv6`

Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль [`socket`](https://python-all.ru/3.16/library/socket.html#module-socket).

#### `--enable-big-digits=[15|30]`

Определить размер в битах цифр Python [`int`](https://python-all.ru/3.16/library/functions.html#int): 15 или 30 бит.

По умолчанию размер цифр равен 30.

Определить `PYLONG_BITS_IN_DIGIT` как `15` или `30`.

См. [`sys.int_info.bits_per_digit`](https://python-all.ru/3.16/library/sys.html#sys.int_info).

#### `--with-suffix=SUFFIX`

Установить суффикс исполняемого файла Python равным *SUFFIX*.

Суффикс по умолчанию: `.exe` в Windows и macOS (`python.exe` исполняемый файл), `.js` в Emscripten node, `.html` в Emscripten browser, `.wasm` в WASI, и пустая строка на других платформах (`python` исполняемый файл).

Изменено в версии 3.11: Суффикс по умолчанию на платформе WASM – один из `.js`, `.html` или `.wasm`.

#### `--with-tzpath=<list of absolute paths separated by pathsep>`

Выбрать путь поиска часового пояса по умолчанию для [`zoneinfo.TZPATH`](https://python-all.ru/3.16/library/zoneinfo.html#zoneinfo.TZPATH). См. [конфигурацию времени компиляции](https://python-all.ru/3.16/library/zoneinfo.html#zoneinfo-data-compile-time-config) модуля [`zoneinfo`](https://python-all.ru/3.16/library/zoneinfo.html#module-zoneinfo).

По умолчанию: `/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo`.

См. разделитель путей [`os.pathsep`](https://python-all.ru/3.16/library/os.html#os.pathsep).

Добавлено в версии 3.9.

#### `--without-decimal-contextvar`

Сборка модуля расширения `_decimal` с контекстом, локальным для потока, а не с контекстом, локальным для корутины (по умолчанию). См. модуль [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal).

См. [`decimal.HAVE_CONTEXTVAR`](https://python-all.ru/3.16/library/decimal.html#decimal.HAVE_CONTEXTVAR) и модуль [`contextvars`](https://python-all.ru/3.16/library/contextvars.html#module-contextvars).

Добавлено в версии 3.9.

#### `--with-dbmliborder=<list of backend names>`

Переопределяет порядок проверки бэкендов БД для модуля [`dbm`](https://python-all.ru/3.16/library/dbm.html#module-dbm).

Допустимое значение – строка с именами бэкендов, разделённая двоеточиями (`:`):

- `ndbm`;
- `gdbm`;
- `bdb`.

#### `--without-c-locale-coercion`

Отключает приведение локали C к локали на основе UTF-8 (включено по умолчанию).

Не определять макрос `PY_COERCE_C_LOCALE`.

См. [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONCOERCECLOCALE) и [**PEP 538**](https://python-all.ru/3.16/using/configure.html).

#### `--with-platlibdir=DIRNAME`

Имя каталога библиотек Python (по умолчанию `lib`).

Fedora и SuSE используют `lib64` на 64-разрядных платформах.

См. [`sys.platlibdir`](https://python-all.ru/3.16/library/sys.html#sys.platlibdir).

Добавлено в версии 3.9.

#### `--with-wheel-pkg-dir=PATH`

Каталог пакетов wheel, используемых модулем [`ensurepip`](https://python-all.ru/3.16/library/ensurepip.html#module-ensurepip) (по умолчанию отсутствует).

Некоторые политики упаковки дистрибутивов Linux рекомендуют не включать зависимости. Например, Fedora устанавливает пакеты wheel в каталог `/usr/share/python-wheels/` и не устанавливает пакет `ensurepip._bundled`.

Добавлено в версии 3.10.

#### `--with-pkg-config=[check|yes|no]`

Должен ли configure использовать **pkg-config** для обнаружения зависимостей сборки.

- `check` (по умолчанию): **pkg-config** необязателен
- `yes`: **pkg-config** обязателен
- `no`: configure не использует **pkg-config**, даже если он присутствует

Добавлено в версии 3.12.

#### `--with-missing-stdlib-config=FILE`

Путь к файлу конфигурации [JSON](https://python-all.ru/3.16/using/configure.html), содержащему пользовательские сообщения об ошибках для отсутствующих модулей [стандартной библиотеки](https://python-all.ru/3.16/glossary.html#term-standard-library).

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

JSON-файл должен сопоставлять имена отсутствующих модулей со строками пользовательских сообщений об ошибках. Например, если дистрибутив распространяет [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) и [`_tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-_tkinter) отдельно, а `_gdbm` исключает по юридическим причинам, конфигурация может содержать:

```json
{
    "_gdbm": "The '_gdbm' module is not available in this distribution",
    "tkinter": "Install the python-tk package to use tkinter",
    "_tkinter": "Install the python-tk package to use tkinter",
}
```

Добавлено в версии 3.15.

#### `--enable-pystats`

Включает сбор внутренней статистики производительности Python.

По умолчанию сбор статистики выключен. Используйте команду `python3 -X pystats` или установите переменную окружения `PYTHONSTATS=1`, чтобы включить сбор статистики при запуске Python.

При выходе из Python выгружает статистику, если сбор статистики был включён и не очищен.

Эффекты:

- Добавляет опцию командной строки [`-X pystats`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).
- Добавляет переменную окружения `PYTHONSTATS`.
- Определяет макрос `Py_STATS`.
- Добавляет функции в модуль [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys):

  - `sys._stats_on()`: Включает сбор статистики.
  - `sys._stats_off()`: Выключает сбор статистики.
  - `sys._stats_clear()`: Очищает статистику.
  - `sys._stats_dump()`: Сбрасывает статистику в файл и очищает её.

Статистика будет сброшена в произвольный (вероятно, уникальный) файл в\\n`/tmp/py_stats/` (Unix) или `C:\temp\py_stats\` (Windows). Если этот\\nкаталог не существует, результаты будут выведены в stderr.

Используйте `Tools/scripts/summarize_stats.py` для чтения статистики.

Статистика:

- Код операции:

  - Специализация: успех, неудача, попадание, отложено, промах, деоптимизация, сбои;
  - Счётчик выполнения;
  - Счётчик пар.
- Вызов:

  - Встроенные вызовы Python;
  - Вызовы PyEval;
  - Помещено фреймов;
  - Создано объектов фреймов;
  - Вызовы eval: векторный, генераторный, устаревший, функция VECTORCALL, сборка класса, слот, функция “ex”, API, метод.
- Объект:

  - incref и decref;
  - интерпретатор incref и decref;
  - выделения: все, 512 байт, 4 КиБ, большие;
  - освобождение;
  - в/из списков свободных блоков;
  - словарь материализован/дематериализован;
  - кэш типов;
  - попытки оптимизации;
  - трассы оптимизации создано/выполнено;
  - выполнено uops.
- Сборщик мусора:

  - Сборок мусора;
  - Посещено объектов;
  - Собрано объектов.

Добавлено в версии 3.12.

#### `--disable-gil`

Включает поддержку запуска Python без [глобальной блокировки\\nинтерпретатора](https://python-all.ru/3.16/glossary.html#term-global-interpreter-lock) (GIL): [сборка без блокировок](https://python-all.ru/3.16/glossary.html#term-free-threaded-build).

Определяет макрос `Py_GIL_DISABLED` и добавляет `"t"` в\\n[`sys.abiflags`](https://python-all.ru/3.16/library/sys.html#sys.abiflags).

Подробнее см. [Free-threaded CPython](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-free-threaded-cpython).

Добавлено в версии 3.13.

#### `--enable-experimental-jit=[no|yes|yes-off|interpreter]`

Указывает, как интегрировать [экспериментальный JIT-компилятор](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-jit-compiler).

- `no`: Не собирать JIT.
- `yes`: Включить JIT. Чтобы отключить его во время выполнения, установите переменную окружения [`PYTHON_JIT=0`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT).
- `yes-off`: Собрать JIT, но по умолчанию отключить его. Чтобы включить его во время выполнения, установите переменную окружения [`PYTHON_JIT=1`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT).
- `interpreter`: Включить «JIT-интерпретатор» (полезно только для отладки самого JIT). Чтобы отключить его во время выполнения, установите переменную окружения [`PYTHON_JIT=0`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT).

`--enable-experimental-jit=no` – поведение по умолчанию, если опция не указана, а `--enable-experimental-jit` – сокращение для `--enable-experimental-jit=yes`. См. `Tools/jit/README.md` для получения дополнительной информации, включая установку необходимых зависимостей времени сборки.

> **Примечание**
>
> При сборке CPython с включённым JIT убедитесь, что в системе установлен Python 3.11 или новее.

Добавлено в версии 3.13.

#### `PKG_CONFIG`

Путь к утилите `pkg-config`.

#### `PKG_CONFIG_LIBDIR`

#### `PKG_CONFIG_PATH`

Параметры `pkg-config`.

#### `--disable-epoll`

Сборка без `epoll`, что означает, что [`select.epoll()`](https://python-all.ru/3.16/library/select.html#select.epoll) не будет присутствовать, даже если система предоставляет функцию *[epoll\_create](https://python-all.ru/3.16/using/configure.html)*. Это может быть использовано в системах, где *epoll\_create* или *[epoll\_create1](https://python-all.ru/3.16/using/configure.html)* доступен, но несовместим с семантикой Linux.

Добавлено в версии 3.15.

#### `--with-build-details-suffix=[yes|SUFFIX]`

Переименовать `build-details.json`, чтобы разрешить установку нескольких установок Python в одном месте. Если указан пользовательский `SUFFIX`, он используется дословно, иначе он будет сгенерирован из тега `MULTIARCH` с `-free-threading` и `-debug`, в зависимости от ситуации.

Добавлено в версии 3.16.

### 3.3.2. Параметры компилятора C

#### `CC`

Команда компилятора C.

#### `CFLAGS`

Флаги компилятора C.

#### `CPP`

Команда препроцессора C.

#### `CPPFLAGS`

Флаги препроцессора C, например `-Iinclude_dir`.

### 3.3.3. Параметры компоновщика

#### `LDFLAGS`

Флаги компоновщика, например `-Llibrary_directory`.

#### `LIBS`

Библиотеки для передачи компоновщику, например `-llibrary`.

#### `MACHDEP`

Имя для машинно-зависимых файлов библиотек.

### 3.3.4. Параметры для сторонних зависимостей

Добавлено в версии 3.12.

#### `BZIP2_CFLAGS`

#### `BZIP2_LIBS`

Флаги компилятора C и компоновщика для связывания Python с `libbz2`, используемые модулем [`bz2`](https://python-all.ru/3.16/library/bz2.html#module-bz2), переопределяющие `pkg-config`.

#### `CURSES_CFLAGS`

#### `CURSES_LIBS`

Флаги компилятора C и компоновщика для `libncurses` или `libncursesw`, используемые модулем [`curses`](https://python-all.ru/3.16/library/curses.html#module-curses), переопределяющие `pkg-config`.

#### `GDBM_CFLAGS`

#### `GDBM_LIBS`

Флаги компилятора C и компоновщика для `gdbm`.

#### `LIBEDIT_CFLAGS`

#### `LIBEDIT_LIBS`

Флаги компилятора C и компоновщика для `libedit`, используемые модулем [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline), переопределяющие `pkg-config`.

#### `LIBFFI_CFLAGS`

#### `LIBFFI_LIBS`

Флаги компилятора C и компоновщика для `libffi`, используемые модулем [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes), переопределяющие `pkg-config`.

#### `LIBMPDEC_CFLAGS`

#### `LIBMPDEC_LIBS`

Флаги компилятора C и компоновщика для `libmpdec`, используемые модулем [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal), переопределяющие `pkg-config`.

#### `LIBLZMA_CFLAGS`

#### `LIBLZMA_LIBS`

Флаги компилятора C и компоновщика для `liblzma`, используемые модулем [`lzma`](https://python-all.ru/3.16/library/lzma.html#module-lzma), переопределяющие `pkg-config`.

#### `LIBREADLINE_CFLAGS`

#### `LIBREADLINE_LIBS`

Флаги компилятора C и компоновщика для `libreadline`, используемые модулем [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline), переопределяющие `pkg-config`.

#### `LIBSQLITE3_CFLAGS`

#### `LIBSQLITE3_LIBS`

Флаги компилятора C и компоновщика для `libsqlite3`, используемые модулем [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3), переопределяющие `pkg-config`.

#### `LIBUUID_CFLAGS`

#### `LIBUUID_LIBS`

Флаги компилятора C и компоновщика для `libuuid`, используемые модулем [`uuid`](https://python-all.ru/3.16/library/uuid.html#module-uuid), переопределяющие `pkg-config`.

#### `LIBZSTD_CFLAGS`

#### `LIBZSTD_LIBS`

Флаги компилятора C и компоновщика для `libzstd`, используемые модулем [`compression.zstd`](https://python-all.ru/3.16/library/compression.zstd.html#module-compression.zstd), переопределяющие `pkg-config`.

Добавлено в версии 3.14.

#### `PANEL_CFLAGS`

#### `PANEL_LIBS`

Флаги компилятора C и компоновщика для PANEL, переопределяющие `pkg-config`.

Флаги компилятора C и компоновщика для `libpanel` или `libpanelw`, используемые модулем [`curses.panel`](https://python-all.ru/3.16/library/curses.panel.html#module-curses.panel), переопределяющие `pkg-config`.

#### `TCLTK_CFLAGS`

#### `TCLTK_LIBS`

Флаги компилятора C и компоновщика для TCLTK, переопределяющие `pkg-config`.

#### `ZLIB_CFLAGS`

#### `ZLIB_LIBS`

Флаги компилятора C и компоновщика для `libzlib`, используемые модулем [`gzip`](https://python-all.ru/3.16/library/gzip.html#module-gzip), переопределяющие `pkg-config`.

### 3.3.5. Параметры WebAssembly

#### `--enable-wasm-dynamic-linking`

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

Динамическая компоновка включает `dlopen`. Размер исполняемого файла увеличивается из-за ограниченного удаления мёртвого кода и дополнительных возможностей.

Добавлено в версии 3.12.

#### `--enable-wasm-pthreads`

Включить поддержку pthreads для WASM.

Добавлено в версии 3.12.

### 3.3.6. Параметры установки

#### `--prefix=PREFIX`

Устанавливает архитектурно-независимые файлы в PREFIX. В Unix по умолчанию используется `/usr/local`.

Это значение можно получить во время выполнения с помощью [`sys.prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix).

Например, можно использовать `--prefix="$HOME/.local/"` для установки Python в домашний каталог.

#### `--exec-prefix=EPREFIX`

Устанавливает архитектурно-зависимые файлы в EPREFIX, по умолчанию [`--prefix`](https://python-all.ru/3.16/using/configure.html#cmdoption-prefix).

Это значение можно получить во время выполнения с помощью [`sys.exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix).

#### `--disable-test-modules`

Не собирать и не устанавливать тестовые модули, такие как пакет [`test`](https://python-all.ru/3.16/library/test.html#module-test) или модуль расширения `_testcapi` (собирается и устанавливается по умолчанию).

Добавлено в версии 3.10.

#### `--with-ensurepip=[upgrade|install|no]`

Выбирает команду [`ensurepip`](https://python-all.ru/3.16/library/ensurepip.html#module-ensurepip), запускаемую при установке Python:

- `upgrade` (по умолчанию): запустить команду `python -m ensurepip --altinstall --upgrade` .
- `install`: запустить команду `python -m ensurepip --altinstall`;
- `no`: не запускать ensurepip;

Добавлено в версии 3.6.

### 3.3.7. Параметры производительности

Для достижения максимальной производительности рекомендуется настраивать Python с помощью `--enable-optimizations --with-lto` (PGO + LTO). Экспериментальный флаг `--enable-bolt` также можно использовать для повышения производительности.

#### `--enable-optimizations`

Включает профильную оптимизацию (PGO) с помощью [`PROFILE_TASK`](https://python-all.ru/3.16/using/configure.html#envvar-PROFILE_TASK) (по умолчанию отключено).

Компилятору Clang требуется программа `llvm-profdata` для PGO. На macOS она также требуется GCC: GCC – это просто псевдоним Clang на macOS.

Также отключает семантическое переопределение символов в libpython, если используются `--enable-shared` и GCC: добавьте `-fno-semantic-interposition` в флаги компилятора и компоновщика.

> **Примечание**
>
> В процессе сборки могут появляться предупреждения компилятора о недоступности данных профиля для некоторых исходных файлов. Эти предупреждения безвредны, так как при сборе данных профиля выполняется лишь часть кода. Чтобы отключить эти предупреждения в Clang, вручную подавите их, добавив `-Wno-profile-instr-unprofiled` к [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS).

Добавлено в версии 3.6.

Изменено в версии 3.10: Используйте `-fno-semantic-interposition` в GCC.

#### `PROFILE_TASK`

Переменная окружения, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.

По умолчанию: `-m test --pgo --timeout=$(TESTTIMEOUT)`.

Добавлено в версии 3.8.

Изменено в версии 3.13: Сбой задачи больше не игнорируется без уведомления.

#### `--with-lto=[full|thin|no|yes]`

Включает оптимизацию во время компоновки (LTO) в любой сборке (по умолчанию отключено).

Компилятору Clang требуется `llvm-ar` для LTO (`ar` в macOS), а также компоновщик, поддерживающий LTO (`ld.gold` или `lld`).

Добавлено в версии 3.6.

Добавлено в версии 3.11: Для использования функции ThinLTO используйте `--with-lto=thin` в Clang.

Изменено в версии 3.12: Используйте ThinLTO в качестве политики оптимизации по умолчанию в Clang, если компилятор поддерживает этот флаг.

#### `--enable-bolt`

Включает использование [оптимизатора бинарных файлов после компоновки BOLT](https://python-all.ru/3.16/using/configure.html) (по умолчанию отключено).

BOLT является частью проекта LLVM, но не всегда входит в их бинарные дистрибутивы. Этот флаг требует наличия `llvm-bolt` и `merge-fdata`.

BOLT – всё ещё относительно новый проект, поэтому этот флаг пока следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успех зависит от комбинации окружения сборки, других аргументов конфигурации оптимизации и архитектуры CPU, и не все комбинации поддерживаются. Известно, что версии BOLT до LLVM 16 аварийно завершаются в некоторых сценариях. Настоятельно рекомендуется использовать LLVM 16 или новее для оптимизации BOLT.

Переменные `BOLT_INSTRUMENT_FLAGS` и `BOLT_APPLY_FLAGS` **configure** можно определить, чтобы переопределить набор аргументов по умолчанию для **llvm-bolt** для инструментирования и применения данных BOLT к бинарным файлам соответственно.

Добавлено в версии 3.12.

#### `BOLT_APPLY_FLAGS`

Аргументы для `llvm-bolt` при создании [оптимизированного BOLT бинарного файла](https://python-all.ru/3.16/using/configure.html).

Добавлено в версии 3.12.

#### `BOLT_INSTRUMENT_FLAGS`

Аргументы для `llvm-bolt` при инструментировании бинарных файлов.

Добавлено в версии 3.12.

#### `--with-computed-gotos`

Включает вычисляемые переходы в цикле вычислений (включено по умолчанию на поддерживаемых компиляторах).

#### `--with-tail-call-interp`

Включает интерпретаторы, использующие хвостовые вызовы в CPython. Если эта опция включена, настоятельно рекомендуется также включить PGO ([`--enable-optimizations`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-optimizations)). Эта опция требует компилятор C с поддержкой хвостовых вызовов и соглашения о вызовах [preserve\_none](https://python-all.ru/3.16/using/configure.html). Например, Clang 19 и новее поддерживает эту функцию.

Добавлено в версии 3.14.

#### `--without-frame-pointers`

Отключает указатели фреймов, которые включены по умолчанию (см. [**PEP 831**](https://python-all.ru/3.16/using/configure.html)).

По умолчанию сборка добавляет флаги для генерации указателей фреймов или обратной цепочки к `BASECFLAGS`:

- `-fno-omit-frame-pointer` и/или `-mno-omit-leaf-frame-pointer` добавляются, если компилятор их поддерживает.
- `-marm` и/или `-mno-thumb` добавляется на 32-битной ARM при поддержке,
- на платформах s390x, при поддержке, `-mbackchain` добавляется *вместо*. указанных выше флагов указателей фреймов.
- на платформах ppc64le флаги компилятора не требуются, так как ABI Power требует, чтобы компиляторы по умолчанию поддерживали обратную цепочку.

Указатели фреймов позволяют профилировщикам, отладчикам и системным инструментам трассировки (`perf`, `eBPF`, `dtrace`, `gdb`) обходить стек вызовов C без метаданных DWARF. Эти флаги передаются сторонним расширениям C через [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig). На компиляторах, которые их не понимают, сборка молча их пропускает.

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

Добавлено в версии 3.15.

#### `--without-mimalloc`

Отключает быстрый распределитель [mimalloc](https://python-all.ru/3.16/c-api/memory.html#mimalloc) (включён по умолчанию).

Эту опцию нельзя использовать вместе с [`--disable-gil`](https://python-all.ru/3.16/using/configure.html#cmdoption-disable-gil), так как [сборка без GIL](https://python-all.ru/3.16/glossary.html#term-free-threading) требует mimalloc.

См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONMALLOC).

#### `--without-pymalloc`

Отключает специализированный распределитель памяти Python [pymalloc](https://python-all.ru/3.16/c-api/memory.html#pymalloc) (включён по умолчанию).

См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONMALLOC).

#### `--with-pymalloc-hugepages`

Включает поддержку больших страниц для арен [pymalloc](https://python-all.ru/3.16/c-api/memory.html#pymalloc) (отключено по умолчанию). При включении размер арены на 64-битных платформах увеличивается до 2 МиБ, и для выделения арен используется `MAP_HUGETLB` (Linux) или `MEM_LARGE_PAGES` (Windows) с автоматическим возвратом к обычным страницам.

Даже если сборка выполнена с этим параметром, большие страницы **не** используются во время выполнения, пока переменная окружения [`PYTHON_PYMALLOC_HUGEPAGES`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_PYMALLOC_HUGEPAGES) не установлена в `1`. Этот добровольный выбор необходим, потому что большие страницы

- несут риски в Linux: если пул больших страниц исчерпан, сбои страниц (включая сбои копирования при записи после [`os.fork()`](https://python-all.ru/3.16/library/os.html#os.fork)) приводят к `SIGBUS` и убивают процесс.
- требуют специальных привилегий в Windows. Подробнее см. [документацию Windows по большим страницам](https://python-all.ru/3.16/using/configure.html). Python завершится ошибкой при запуске, если у пользователя нет необходимой привилегии [SeLockMemoryPrivilege](https://python-all.ru/3.16/using/configure.html).

Скрипт configure проверяет, поддерживает ли платформа `MAP_HUGETLB`, и выводит предупреждение, если это не так.

В Windows используйте флаг `--pymalloc-hugepages` с `build.bat` или установите свойство MSBuild `UsePymallocHugepages`.

Добавлено в версии 3.15.

#### `--without-doc-strings`

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

Не определять макрос `WITH_DOC_STRINGS`.

См. макрос `PyDoc_STRVAR()`.

#### `--enable-profiling`

Включает профилирование кода на уровне C с помощью `gprof` (отключено по умолчанию).

#### `--with-strict-overflow`

Добавляет `-fstrict-overflow` в флаги компилятора C (по умолчанию добавляется `-fno-strict-overflow`).

#### `--without-remote-debug`

Отключает поддержку удаленной отладки, описанную в [**PEP 768**](https://python-all.ru/3.16/using/configure.html) (включена по умолчанию). Когда этот флаг указан, код, который позволяет интерпретатору планировать выполнение файла Python в отдельном процессе, как описано в [**PEP 768**](https://python-all.ru/3.16/using/configure.html), не компилируется. Это включает как функциональность для планирования выполняемого кода, так и функциональность для получения кода для выполнения.

#### `Py_REMOTE_DEBUG`

Этот макрос определяется по умолчанию, если Python не сконфигурирован с [`--without-remote-debug`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-remote-debug).

Обратите внимание, что даже если макрос определён, удаленная отладка может быть недоступна (например, на несовместимой платформе).

Добавлено в версии 3.14.

### 3.3.8. Отладочная сборка Python

Отладочная сборка – это Python, собранный с опцией конфигурации [`--with-pydebug`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-pydebug).

Эффекты отладочной сборки:

- Показывать все предупреждения по умолчанию: список фильтров предупреждений по умолчанию пуст в модуле [`warnings`](https://python-all.ru/3.16/library/warnings.html#module-warnings).
- Добавляет `d` в [`sys.abiflags`](https://python-all.ru/3.16/library/sys.html#sys.abiflags).
- Добавляет функцию `sys.gettotalrefcount()`.
- Добавляет опцию командной строки [`-X showrefcount`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).
- Добавляет опцию командной строки [`-d`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-d) и переменную окружения [`PYTHONDEBUG`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDEBUG) для отладки парсера.
- Добавляет поддержку переменной `__lltrace__`: включение низкоуровневой трассировки в цикле выполнения байт-кода, если переменная определена.
- Устанавливает [отладочные привязки на распределители памяти](https://python-all.ru/3.16/c-api/memory.html#default-memory-allocators) для обнаружения переполнения буфера и других ошибок памяти.
- Определяет макросы `Py_DEBUG` и `Py_REF_DEBUG`.
- Добавляет проверки времени выполнения: код, окружённый `#ifdef Py_DEBUG` и `#endif`. Включает утверждения `assert(...)` и `_PyObject_ASSERT(...)`: не устанавливайте макрос `NDEBUG` (см. также опцию конфигурации [`--with-assertions`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-assertions)). Основные проверки времени выполнения:

  - Добавляет проверки корректности аргументов функций.
  - Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неинициализированных объектов.
  - Гарантирует, что функции, которые могут очистить или заменить текущее исключение, не вызываются при возникшем исключении.
  - Проверяется, что функции деаллокации не изменяют текущее исключение.
  - Сборщик мусора (функция [`gc.collect()`](https://python-all.ru/3.16/library/gc.html#gc.collect)) выполняет базовые проверки корректности объектов.
  - Макрос `Py_SAFE_DOWNCAST()` проверяет целочисленное переполнение (underflow и overflow) при понижающем приведении от широких типов к узким.

См. также [режим разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode) и опцию конфигурации [`--with-trace-refs`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs).

Изменено в версии 3.8: Релизные сборки теперь совместимы по ABI с отладочными: определение макроса `Py_DEBUG` больше не подразумевает макрос `Py_TRACE_REFS` (см. опцию [`--with-trace-refs`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs)). Однако отладочные сборки по-прежнему экспортируют больше символов, чем релизные, и код, собранный для отладочной сборки, не обязательно совместим с релизной.

### 3.3.9. Отладочные опции

#### `--with-pydebug`

[Собрать Python в отладочном режиме](https://python-all.ru/3.16/using/configure.html#debug-build): определяет макрос `Py_DEBUG` (отключён по умолчанию).

#### `--with-trace-refs`

Включает отслеживание ссылок для целей отладки (отключено по умолчанию).

Эффекты:

- Определяет макрос `Py_TRACE_REFS`.
- Добавляет функцию [`sys.getobjects()`](https://python-all.ru/3.16/library/sys.html#sys.getobjects).
- Добавляет переменную окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDUMPREFS).

Переменная окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDUMPREFS) может использоваться для дампа объектов и счётчиков ссылок, остающихся активными при завершении Python.

[Статически размещённые объекты](https://python-all.ru/3.16/c-api/typeobj.html#static-types) не отслеживаются.

Добавлено в версии 3.8.

Изменено в версии 3.13: Эта сборка теперь совместима по ABI с релизной сборкой и [отладочной сборкой](https://python-all.ru/3.16/using/configure.html#debug-build).

#### `--with-assertions`

Сборка с включёнными C-утверждениями (по умолчанию нет): `assert(...);` и `_PyObject_ASSERT(...);`.

Если установлен, макрос `NDEBUG` не определяется в переменной компилятора [`OPT`](https://python-all.ru/3.16/using/configure.html#envvar-OPT).

См. также опцию [`--with-pydebug`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-pydebug) ([отладочная сборка](https://python-all.ru/3.16/using/configure.html#debug-build)), которая также включает утверждения.

Добавлено в версии 3.6.

#### `--with-valgrind`

Включить поддержку Valgrind (по умолчанию нет).

#### `--with-dtrace`

Включить поддержку DTrace (по умолчанию нет).

См. [Инструментирование CPython с помощью DTrace и SystemTap](https://python-all.ru/3.16/howto/instrumentation.html#instrumentation).

Добавлено в версии 3.6.

#### `--with-address-sanitizer`

Включить детектор ошибок памяти AddressSanitizer, `asan` (по умолчанию нет). Чтобы улучшить возможности обнаружения ASan, можно также объединить это с [`--without-pymalloc`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-pymalloc) для отключения специализированного аллокатора малых объектов, чьи выделения не отслеживаются ASan.

Добавлено в версии 3.6.

#### `--with-memory-sanitizer`

Включить детектор ошибок выделения памяти MemorySanitizer, `msan` (по умолчанию нет).

Добавлено в версии 3.6.

#### `--with-undefined-behavior-sanitizer`

Включить детектор неопределённого поведения UndefinedBehaviorSanitizer, `ubsan` (по умолчанию нет).

Добавлено в версии 3.6.

#### `--with-thread-sanitizer`

Включает детектор гонок данных ThreadSanitizer, `tsan` (по умолчанию выключено).

Добавлено в версии 3.13.

### 3.3.10. Параметры компоновщика

#### `--enable-shared`

Включает сборку разделяемой библиотеки Python: `libpython` (по умолчанию выключено).

#### `--without-static-libpython`

Не собирать `libpythonMAJOR.MINOR.a` и не устанавливать `python.o` (собирается и устанавливается по умолчанию).

Добавлено в версии 3.10.

#### `--enable-static-libpython-for-interpreter`

Двоичный файл интерпретатора Python (`python3`) не связывается с общей библиотекой Python; вместо этого интерпретатор статически связывается с `libpython`, как если бы `--enable-shared` не использовался, но общая `libpython` продолжает собираться (для использования другими программами).

Эта опция ничего не делает, если `--enable-shared` не используется.

По умолчанию (когда `-enable-shared` используется) интерпретатор Python связывается с собранной общей библиотекой.

Добавлено в версии 3.15.

### 3.3.11. Параметры библиотек

#### `--with-libs='lib1 ...'`

Линковаться с дополнительными библиотеками (по умолчанию нет).

#### `--with-system-expat`

Собирать модуль `pyexpat`, используя установленную библиотеку `expat` (по умолчанию нет).

#### `--with-readline=readline|editline`

Назначить библиотеку-бэкенд для модуля [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline).

- readline: использовать readline в качестве бэкенда.
- editline: использовать editline в качестве бэкенда.

Добавлено в версии 3.10.

#### `--without-readline`

Не собирать модуль [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline) (собирается по умолчанию).

Не определять макрос `HAVE_LIBREADLINE`.

Добавлено в версии 3.10.

#### `--with-libm=STRING`

Переопределить математическую библиотеку `libm` на *STRING* (по умолчанию зависит от системы).

#### `--with-libc=STRING`

Переопределить библиотеку C `libc` на *STRING* (по умолчанию зависит от системы).

#### `--with-openssl=DIR`

Корневой каталог OpenSSL.

Добавлено в версии 3.7.

#### `--with-openssl-rpath=[no|auto|DIR]`

Задать каталог библиотек времени выполнения (rpath) для библиотек OpenSSL:

- `no` (по умолчанию): не устанавливать rpath;
- `auto`: автоматически определять rpath из [`--with-openssl`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-openssl) и `pkg-config`;
- *DIR*: указать явный rpath.

Добавлено в версии 3.10.

### 3.3.12. Параметры безопасности

#### `--with-hash-algorithm=[fnv|siphash13|siphash24]`

Выберите алгоритм хеширования для использования в `Python/pyhash.c`:

- `siphash13` (по умолчанию);
- `siphash24`;
- `fnv`.

Добавлено в версии 3.4.

Добавлено в версии 3.11: `siphash13` добавлен и стал новым значением по умолчанию.

#### `--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2`

Встроенные хеш-модули:

- `md5`;
- `sha1`;
- `sha256`;
- `sha512`;
- `sha3` (с shake);
- `blake2`.

Добавлено в версии 3.9.

#### `--with-ssl-default-suites=[python|openssl|STRING]`

Переопределить строку наборов шифров OpenSSL по умолчанию:

- `python` (по умолчанию): использовать предпочтительный выбор Python;
- `openssl`: оставить настройки OpenSSL по умолчанию без изменений;
- *STRING*: использовать произвольную строку

См. модуль [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl).

Добавлено в версии 3.7.

Изменено в версии 3.10: Настройки `python` и *STRING* также устанавливают TLS 1.2 в качестве минимальной версии протокола.

#### `--disable-safety`

Отключает параметры компилятора, которые [рекомендуются OpenSSF](https://python-all.ru/3.16/using/configure.html) из соображений безопасности без потери производительности. Если эта опция не включена, CPython будет собран с использованием безопасных параметров компилятора без замедления. Если эта опция включена, CPython не будет собран с параметрами компилятора, перечисленными ниже.

Следующие параметры компилятора отключаются с помощью `--disable-safety`:

- [-fstack-protector-strong](https://python-all.ru/3.16/using/configure.html): Включает проверки времени выполнения для переполнения буфера на стеке.
- [-Wtrampolines](https://python-all.ru/3.16/using/configure.html): Включает предупреждения о трамплинах, требующих исполняемых стеков.

Добавлено в версии 3.14.

#### `--enable-slower-safety`

Включает параметры компилятора, которые [рекомендуются OpenSSF](https://python-all.ru/3.16/using/configure.html) из соображений безопасности, но требуют дополнительных затрат производительности. Если эта опция не включена, CPython не будет собран с использованием безопасных параметров компилятора, влияющих на производительность. Если эта опция включена, CPython будет собран с параметрами компилятора, перечисленными ниже.

Следующие параметры компилятора включаются с помощью `--enable-slower-safety`:

- [-D\_FORTIFY\_SOURCE=3](https://python-all.ru/3.16/using/configure.html): Укрепляет исходный код с помощью проверок во время компиляции и выполнения на предмет небезопасного использования libc и переполнения буфера.

Добавлено в версии 3.14.

### 3.3.13. Параметры macOS

См. [Mac/README.rst](https://python-all.ru/src/main/Mac/README.rst).

#### `--enable-universalsdk`

#### `--enable-universalsdk=SDKDIR`

Создание универсальной сборки двоичного файла. *SDKDIR* указывает, какой macOS SDK следует использовать для сборки (по умолчанию нет).

#### `--enable-framework`

#### `--enable-framework=INSTALLDIR`

Создаёт Python.framework вместо традиционной установки в Unix. Необязательный *INSTALLDIR* определяет путь установки (по умолчанию – нет).

#### `--with-universal-archs=ARCH`

Определяет тип универсального бинарного файла, который будет создан. Этот параметр работает, только если указан [`--enable-universalsdk`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-universalsdk).

Варианты:

- `universal2` (x86-64 и arm64);
- `32-bit` (PPC и i386);
- `64-bit` (PPC64 и x86-64);
- `3-way` (i386, PPC и x86-64);
- `intel` (i386 и x86-64);
- `intel-32` (i386);
- `intel-64` (x86-64);
- `all` (PPC, i386, PPC64 и x86-64).

Обратите внимание: значения этого параметра конфигурации *не* совпадают с идентификаторами, используемыми для универсальных бинарных колец (wheels) в macOS. Подробнее о [тегах совместимости платформы упаковки, используемых в macOS,](https://python-all.ru/3.16/using/configure.html) см. в Python Packaging User Guide.

#### `--with-framework-name=FRAMEWORK`

Задаёт имя для python framework в macOS. Работает только при указанном [`--enable-framework`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-framework) (по умолчанию: `Python`).

#### `--with-app-store-compliance`

#### `--with-app-store-compliance=PATCH-FILE`

Стандартная библиотека Python содержит строки, которые, как известно, вызывают ошибки автоматических инструментов проверки при отправке на распространение через App Store macOS и iOS. Если этот параметр включён, будет применён список исправлений, которые устраняют несоответствия требованиям магазинов приложений. Можно также указать собственный файл исправлений. По умолчанию этот параметр отключён.

Добавлено в версии 3.13.

### 3.3.14. Параметры iOS

См. [iOS/README.rst](https://python-all.ru/3.16/using/configure.html).

#### `--enable-framework=INSTALLDIR`

Создаёт Python.framework. В отличие от macOS, аргумент *INSTALLDIR*, указывающий путь установки, обязателен.

#### `--with-framework-name=FRAMEWORK`

Задаёт имя для framework (по умолчанию: `Python`).

### 3.3.15. Параметры кросс-компиляции

Кросс-компиляция (также известная как кросс-сборка) используется для сборки Python под другую архитектуру CPU или платформу. Для кросс-компиляции требуется интерпретатор Python для платформы сборки. Версия Python для сборки должна совпадать с версией Python для целевой платформы, скомпилированной кросс-компилятором.

#### `--build=BUILD`

настройка для сборки на платформе BUILD, обычно определяется с помощью **config.guess**.

#### `--host=HOST`

кросс-компиляция для сборки программ, выполняемых на HOST (целевая платформа)

#### `--with-build-python=path/to/python`

путь к `python` двоичному файлу для кросс-компиляции

Добавлено в версии 3.12.

#### `CONFIG_SITE=file`

Переменная окружения, указывающая на файл с переопределениями configure.

Пример файла *config.site*:

```ini
# config.site-aarch64
ac_cv_buggy_getaddrinfo=no
ac_cv_file__dev_ptmx=yes
ac_cv_file__dev_ptc=no
```

#### `HOSTRUNNER`

Программа, запускающая CPython на хост-платформе для кросс-компиляции.

Добавлено в версии 3.12.

Пример кросс-компиляции:

```sh
CONFIG_SITE=config.site-aarch64 ../configure \
    --build=x86_64-pc-linux-gnu \
    --host=aarch64-unknown-linux-gnu \
    --with-build-python=../x86_64/python
```

## 3.4. Система сборки Python

### 3.4.1. Основные файлы системы сборки

- `configure.ac` =\> `configure`;
- `Makefile.pre.in` =\> `Makefile` (создаётся с помощью `configure`);
- `pyconfig.h` (создаётся с помощью `configure`);
- `Modules/Setup`: расширения на C, собираемые Makefile с помощью `Module/makesetup` shell-скрипта;

### 3.4.2. Основные этапы сборки

- C-файлы (`.c`) компилируются в объектные файлы (`.o`).
- Статическая библиотека `libpython` (`.a`) создаётся из объектных файлов.
- `python.o` и статическая библиотека `libpython` компонуются в итоговую программу `python`.
- Расширения на C собираются с помощью Makefile (см. `Modules/Setup`).

### 3.4.3. Основные цели Makefile

#### 3.4.3.1. make

В большинстве случаев при пересборке после редактирования кода или обновления локальной копии из вышестоящего репозитория достаточно просто выполнить `make`, которая (согласно семантике Make) собирает цель по умолчанию – первую, определённую в Makefile. По традиции (в том числе в проекте CPython) это обычно цель `all`. Скрипт `configure` разворачивает переменную `autoconf`, `@DEF_MAKE_ALL_RULE@`, чтобы точно описать, какие цели будет собирать `make all`. Доступны три варианта:

- `profile-opt` (настроено с помощью `--enable-optimizations`)
- `build_wasm` (выбирается, если хост-платформа совпадает с `wasm32-wasi*` или `wasm32-emscripten`)
- `build_all` (настроено без явного использования других вариантов)

В зависимости от последних изменений исходных файлов Make пересобирает все цели (объектные файлы и исполняемые), которые считает устаревшими, включая повторный запуск `configure` при необходимости. Однако зависимости между исходниками и целями многочисленны и поддерживаются вручную, поэтому иногда Make не располагает всей информацией, необходимой для правильного обнаружения всех целей, требующих пересборки. В зависимости от того, какие цели не были пересобраны, могут возникнуть различные проблемы. Если возникают проблемы со сборкой или тестированием, которые иначе не объяснить, `make clean && make` должен решить большинство проблем с зависимостями, хотя время сборки при этом увеличится.

#### 3.4.3.2. make platform

Собрать программу `python`, но не собирать модули расширения стандартной библиотеки. В результате создаётся файл `platform`, содержащий одну строку с описанием платформы сборки, например `macosx-14.3-arm64-3.12` или `linux-x86_64-3.13`.

#### 3.4.3.3. make profile-opt

Собрать Python с профильной оптимизацией (PGO). Чтобы сделать это целью по умолчанию для команды `make`, можно использовать параметр configure [`--enable-optimizations`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-optimizations) (`make all` или просто `make`).

#### 3.4.3.4. make clean

Удалить собранные файлы.

#### 3.4.3.5. make distclean

Помимо работы, выполненной `make clean`, удалить файлы, созданные скриптом configure. Перед повторной сборкой потребуется запустить `configure`. [\[6\]](https://python-all.ru/3.16/using/configure.html#id16)

#### 3.4.3.6. make install

Собрать цель `all` и установить Python.

#### 3.4.3.7. make test

Собрать цель `all` и запустить набор тестов Python с опцией `--fast-ci` без GUI-тестов. Переменные:

- `TESTOPTS`: дополнительные параметры командной строки regrtest.
- `TESTPYTHONOPTS`: дополнительные параметры командной строки Python.
- `TESTTIMEOUT`: тайм-аут в секундах (по умолчанию: 10 минут).

#### 3.4.3.8. make ci

Это похоже на `make test`, но использует `-ugui` для запуска также GUI-тестов.

Добавлено в версии 3.14.

#### 3.4.3.9. make buildbottest

Это похоже на `make test`, но использует опцию `--slow-ci` и тайм-аут по умолчанию 20 минут вместо опции `--fast-ci`.

#### 3.4.3.10. make regen-all

Перегенерировать (почти) все сгенерированные файлы. Они включают (но не ограничиваются) случаи байткода и файл генератора парсера. `make regen-stdlib-module-names` и `autoconf` должны быть запущены отдельно для остальных [сгенерированных файлов](https://python-all.ru/3.16/using/configure.html#generated-files).

### 3.4.4. Расширения C

Некоторые расширения C собираются как встроенные модули, например модуль `sys`. Они собираются с определённым макросом `Py_BUILD_CORE_BUILTIN`. Встроенные модули не имеют атрибута `__file__`:

```pycon
>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.__file__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute '__file__'
```

Другие расширения C собираются как динамические библиотеки, например модуль `_asyncio`. Они собираются с определённым макросом `Py_BUILD_CORE_MODULE`. Пример на Linux x86-64:

```pycon
>>> import _asyncio
>>> _asyncio
<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
>>> _asyncio.__file__
'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
```

`Modules/Setup` используется для генерации целей Makefile для сборки расширений C. В начале файлов расширения C собираются как встроенные модули. Расширения, определённые после маркера `*shared*`, собираются как динамические библиотеки.

Макросы `PyAPI_FUNC()`, `PyAPI_DATA()` и [`PyMODINIT_FUNC`](https://python-all.ru/3.16/c-api/extension-modules.html#c.PyMODINIT_FUNC) из `Include/exports.h` определяются по-разному в зависимости от того, определён ли макрос `Py_BUILD_CORE_MODULE`:

- Используйте `Py_EXPORTED_SYMBOL`, если `Py_BUILD_CORE_MODULE` определён.
- В противном случае используйте `Py_IMPORTED_SYMBOL`.

Если макрос `Py_BUILD_CORE_BUILTIN` по ошибке используется для расширения C, собранного как разделяемая библиотека, его функция `PyInit_xxx()` не экспортируется, что вызывает [`ImportError`](https://python-all.ru/3.16/library/exceptions.html#ImportError) при импорте.

## 3.5. Флаги компилятора и компоновщика

Параметры, задаваемые сценарием `./configure` и переменными окружения, и используемые `Makefile`.

### 3.5.1. Флаги препроцессора

#### `CONFIGURE_CPPFLAGS`

Значение переменной [`CPPFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CPPFLAGS), передаваемое сценарию `./configure`.

Добавлено в версии 3.6.

#### `CPPFLAGS`

(Objective) C/C++ флаги препроцессора, например `-Iinclude_dir`, если заголовочные файлы находятся в нестандартном каталоге *include\_dir*.

И [`CPPFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.

#### `BASECPPFLAGS`

Добавлено в версии 3.4.

#### `PY_CPPFLAGS`

Дополнительные флаги препроцессора, добавляемые при сборке объектных файлов интерпретатора.

По умолчанию: `$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)`.

Добавлено в версии 3.2.

### 3.5.2. Флаги компилятора

#### `CC`

Команда компилятора C.

Пример: `gcc -pthread`.

#### `CXX`

Команда компилятора C++.

Пример: `g++ -pthread`.

#### `CFLAGS`

Флаги компилятора C.

#### `CFLAGS_NODIST`

[`CFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS_NODIST) используется для сборки интерпретатора и расширений C из стандартной библиотеки. Используйте его, когда флаг компилятора *не* должен быть частью [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS) после установки Python ([gh-65320](https://python-all.ru/3.16/using/configure.html)).

В частности, [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS) не должен содержать:

- флаг компилятора `-I` (для задания пути поиска включаемых файлов). Флаги `-I` обрабатываются слева направо, и любые флаги из [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS) будут иметь приоритет над `-I` флагами, предоставленными пользователем и пакетами.
- флаги усиления защиты, такие как `-Werror`, поскольку дистрибутивы не могут контролировать, соответствуют ли установленные пользователями пакеты таким повышенным стандартам.

Добавлено в версии 3.5.

#### `COMPILEALL_OPTS`

Параметры, передаваемые командной строке [`compileall`](https://python-all.ru/3.16/library/compileall.html#module-compileall) при сборке PYC-файлов в `make install`. По умолчанию: `-j0`.

Добавлено в версии 3.12.

#### `EXTRA_CFLAGS`

Дополнительные флаги компилятора C.

#### `CONFIGURE_CFLAGS`

Значение переменной [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS), передаваемое сценарию `./configure` .

Добавлено в версии 3.2.

#### `CONFIGURE_CFLAGS_NODIST`

Значение переменной [`CFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS_NODIST), передаваемое сценарию `./configure` .

Добавлено в версии 3.5.

#### `BASECFLAGS`

Базовые флаги компилятора.

#### `OPT`

Флаги оптимизации.

#### `CFLAGS_ALIASING`

Флаги строгого или нестрогого алиасинга, используемые для компиляции `Python/dtoa.c`.

Добавлено в версии 3.7.

#### `CFLAGS_CEVAL`

Флаги, используемые для компиляции `Python/ceval.c`.

Добавлено в версии 3.14.5.

#### `CCSHARED`

Флаги компилятора, используемые для сборки разделяемой библиотеки.

Например, `-fPIC` используется в Linux и BSD.

#### `CFLAGSFORSHARED`

Дополнительные флаги C, добавляемые для сборки объектных файлов интерпретатора.

По умолчанию: `$(CCSHARED)` при использовании [`--enable-shared`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-shared), иначе пустая строка.

#### `PY_CFLAGS`

По умолчанию: `$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)`.

#### `PY_CFLAGS_NODIST`

По умолчанию: `$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal`.

Добавлено в версии 3.5.

#### `PY_STDMODULE_CFLAGS`

Флаги C, используемые для сборки объектных файлов интерпретатора.

По умолчанию: `$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)`.

Добавлено в версии 3.7.

#### `PY_CORE_CFLAGS`

По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE`.

Добавлено в версии 3.2.

#### `PY_BUILTIN_MODULE_CFLAGS`

Флаги компилятора для сборки модуля расширения стандартной библиотеки как встроенного модуля, подобно модулю [`posix`](https://python-all.ru/3.16/library/posix.html#module-posix).

По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN`.

Добавлено в версии 3.8.

#### `PURIFY`

Команда Purify. Purify – программа для отладки памяти.

По умолчанию: пустая строка (не используется).

### 3.5.3. Флаги компоновщика

#### `LINKCC`

Команда компоновщика, используемая для сборки программ, таких как `python` и `_testembed`.

По умолчанию: `$(PURIFY) $(CC)`.

#### `CONFIGURE_LDFLAGS`

Значение переменной [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS), передаваемое сценарию `./configure`.

Избегайте присваивания [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS), [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) и т.д., чтобы пользователи могли использовать их в командной строке для добавления к этим значениям, не перезаписывая предустановленные.

Добавлено в версии 3.2.

#### `LDFLAGS_NODIST`

[`LDFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS_NODIST) используется так же, как [`CFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS_NODIST). Используйте его, когда флаг компоновщика *не* должен быть частью [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) после установки Python ([gh-65320](https://python-all.ru/3.16/using/configure.html)).

В частности, [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) не должен содержать:

- флаг компилятора `-L` (для установки пути поиска библиотек). Флаги `-L` обрабатываются слева направо, и любые флаги в [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) будут иметь приоритет над флагами `-L`, предоставленными пользователем или пакетом.

#### `CONFIGURE_LDFLAGS_NODIST`

Значение переменной [`LDFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS_NODIST), передаваемое сценарию `./configure` .

Добавлено в версии 3.8.

#### `LDFLAGS`

Флаги компоновщика, например, `-Llib_dir`, если библиотеки находятся в нестандартном каталоге *lib\_dir*.

И [`CPPFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.

Рекомендуется использовать `EXE_LDFLAGS`, если предоставленные флаги компоновщика относятся к конкретному исполняемому файлу, например к флагу `-pie` GCC.

#### `LIBS`

Флаги компоновщика для передачи библиотек компоновщику при компоновке исполняемого файла Python.

Пример: `-lrt`.

#### `LDSHARED`

Команда для сборки разделяемой библиотеки.

По умолчанию: `@LDSHARED@ $(PY_LDFLAGS)`.

#### `BLDSHARED`

Команда для сборки разделяемой библиотеки `libpython`.

По умолчанию: `@BLDSHARED@ $(PY_CORE_LDFLAGS)`.

#### `PY_LDFLAGS`

По умолчанию: `$(CONFIGURE_LDFLAGS) $(LDFLAGS)`.

#### `PY_LDFLAGS_NODIST`

По умолчанию: `$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)`.

Добавлено в версии 3.8.

#### `PY_CORE_LDFLAGS`

Флаги компоновщика, используемые для сборки объектных файлов интерпретатора.

Добавлено в версии 3.8.

#### `EXE_LDFLAGS`

Флаги компоновщика, используемые для сборки исполняемых целей, например интерпретатора. Если они указаны, [`PY_CORE_EXE_LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-PY_CORE_EXE_LDFLAGS) будут использоваться вместо [`PY_CORE_LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-PY_CORE_LDFLAGS).

Добавлено в версии 3.15.

#### `CONFIGURE_EXE_LDFLAGS`

Значение переменной [`EXE_LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-EXE_LDFLAGS), передаваемое сценарию `./configure` .

Добавлено в версии 3.15.

#### `PY_CORE_EXE_LDFLAGS`

Флаги компоновщика, используемые для сборки интерпретатора и исполняемых целей.

По умолчанию: `$(PY_CORE_LDFLAGS)`

Добавлено в версии 3.15.

Сноски

\[[6](https://python-all.ru/3.16/using/configure.html#id14)\]

`git clean -fdx` – ещё более радикальный способ «очистить» рабочую копию. Он удаляет все файлы, не известные Git. При поиске ошибок с помощью `git bisect` это [рекомендуется между проверками](https://python-all.ru/3.16/using/configure.html) для гарантии полностью чистой сборки. **Используйте с осторожностью**, так как будут удалены все файлы, не отслеживаемые Git, включая ваши новые, несохранённые наработки.
