configure.md
1> **Источник:** https://python-all.ru/3.16/using/configure.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Настройка Python89## 3.1. Требования к сборке1011Для сборки CPython потребуется:1213- Компилятор [C11](https://python-all.ru/3.16/using/configure.html). [Опциональные возможности C11](https://python-all.ru/3.16/using/configure.html) не требуются.14- В Windows требуется Microsoft Visual Studio 2017 или новее.15- Поддержка [IEEE 754](https://python-all.ru/3.16/using/configure.html) чисел с плавающей запятой и [нечисла (NaN)](https://python-all.ru/3.16/using/configure.html).16- Поддержка потоков.1718Изменено в версии 3.5: В Windows теперь требуется Visual Studio 2015 или новее.1920Изменено в версии 3.6: Отдельные возможности C99, такие как функции `<stdint.h>` и `static inline`, теперь требуются.2122Изменено в версии 3.7: Поддержка потоков теперь обязательна.2324Изменено в версии 3.11: Теперь требуются компилятор C11, поддержка IEEE 754 и NaN. В Windows требуется Visual Studio 2017 или новее.2526См. также [**PEP 7** «Руководство по стилю C»](https://python-all.ru/3.16/using/configure.html) и [**PEP 11** «Поддержка платформ CPython»](https://python-all.ru/3.16/using/configure.html).2728### 3.1.1. Требования к опциональным модулям2930Некоторые [опциональные модули](https://python-all.ru/3.16/glossary.html#term-optional-module) стандартной библиотеки требуют установки сторонних библиотек для разработки (например, должны быть доступны заголовочные файлы).3132Отсутствующие требования выводятся в `configure`. Модули, отсутствующие из-за неудовлетворённых зависимостей, перечисляются ближе к концу вывода `make`, иногда под внутренним именем, например, `_ctypes` для модуля [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes) .3334При распространении интерпретатора CPython без опциональных модулей рекомендуется уведомлять пользователей, которые обычно ожидают, что модули стандартной библиотеки доступны.3536Зависимости для сборки опциональных модулей:3738| Зависимость | Минимальная версия | Модуль Python |39| --- | --- | --- |40| [libbz2](https://python-all.ru/3.16/using/configure.html) | | [`bz2`](https://python-all.ru/3.16/library/bz2.html#module-bz2) |41| [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) |42| [liblzma](https://python-all.ru/3.16/using/configure.html) | | [`lzma`](https://python-all.ru/3.16/library/lzma.html#module-lzma) |43| [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) |44| [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) |45| [libuuid](https://python-all.ru/3.16/using/configure.html) | | `_uuid` [\[3\]](https://python-all.ru/3.16/using/configure.html#id9) |46| [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) |47| [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) |48| [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) |49| [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) |50| [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) |51| [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) |5253\[[1](https://python-all.ru/3.16/using/configure.html#id2)\]5455Если *libmpdec* недоступен, модуль [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal) будет использовать реализацию на чистом Python.5657\[[2](https://python-all.ru/3.16/using/configure.html#id3)\]5859См. [`--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).6061\[[3](https://python-all.ru/3.16/using/configure.html#id4)\]6263Модуль [`uuid`](https://python-all.ru/3.16/library/uuid.html#module-uuid) использует `_uuid` для генерации «безопасных» UUID. Подробнее см. документацию модуля.6465\[[4](https://python-all.ru/3.16/using/configure.html#id5)\]6667Модуль [`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`.6869\[[5](https://python-all.ru/3.16/using/configure.html#id6)\]7071Если 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.7273Обратите внимание, что таблица включает не все опциональные модули; в частности, платформенно-зависимые модули, такие как [`winreg`](https://python-all.ru/3.16/library/winreg.html#module-winreg), здесь не перечислены.7475> **См. также**76>77> - [Руководство разработчика](https://python-all.ru/3.16/using/configure.html) содержит полный список зависимостей, необходимых для сборки всех модулей, и инструкции по их установке на распространённых платформах.78> - [`--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).79> - [Параметры для сторонних зависимостей](https://python-all.ru/3.16/using/configure.html#configure-options-for-dependencies)8081Изменено в версии 3.1: Теперь для [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) требуется Tcl/Tk версии 8.3.1.8283Изменено в версии 3.5: Теперь для [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) требуется Tcl/Tk версии 8.4.8485Изменено в версии 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.8687Изменено в версии 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.8889Изменено в версии 3.11: Теперь требуется Tcl/Tk версии 8.5.12 для [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter).9091Изменено в версии 3.13: Теперь требуется SQLite 3.15.2 для [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3).9293## 3.2. Сгенерированные файлы9495Чтобы уменьшить зависимости сборки, исходный код Python содержит несколько сгенерированных файлов. Команды для перегенерации всех сгенерированных файлов:9697```sh98make regen-all99make regen-stdlib-module-names100make regen-limited-abi101make regen-configure102```103104Файл `Makefile.pre.in` документирует сгенерированные файлы, их входные данные и используемые инструменты для их перегенерации. Ищите цели make `regen-*`.105106### 3.2.1. Сценарий configure107108Команда `make regen-configure` перегенерирует файл `aclocal.m4` и сценарий `configure` с помощью сценария оболочки `Tools/build/regen-configure.sh`, который использует контейнер Ubuntu для получения тех же версий инструментов и обеспечения воспроизводимого результата.109110Контейнер необязателен, следующую команду можно выполнить локально:111112```sh113autoreconf -ivf -Werror114```115116Сгенерированные файлы могут изменяться в зависимости от точных версий используемых инструментов. Контейнер, используемый 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.117118Изменено в версии 3.13: Теперь используются Autoconf 2.71 и aclocal 1.16.5 для перегенерации `configure`.119120Изменено в версии 3.14: Теперь используется Autoconf 2.72 для перегенерации `configure`.121122## 3.3. Параметры configure123124Выведите список всех параметров сценария `configure` с помощью:125126```sh127./configure --help128```129130См. также `Misc/SpecialBuilds.txt` в дистрибутиве исходного кода Python.131132### 3.3.1. Общие параметры133134#### `--enable-loadable-sqlite-extensions`135136Поддержка загружаемых расширений в модуле расширения `_sqlite` (по умолчанию отключено) модуля [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3).137138См. метод [`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).139140Добавлено в версии 3.6.141142#### `--disable-ipv6`143144Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль [`socket`](https://python-all.ru/3.16/library/socket.html#module-socket).145146#### `--enable-big-digits=[15|30]`147148Определить размер в битах цифр Python [`int`](https://python-all.ru/3.16/library/functions.html#int): 15 или 30 бит.149150По умолчанию размер цифр равен 30.151152Определить `PYLONG_BITS_IN_DIGIT` как `15` или `30`.153154См. [`sys.int_info.bits_per_digit`](https://python-all.ru/3.16/library/sys.html#sys.int_info).155156#### `--with-suffix=SUFFIX`157158Установить суффикс исполняемого файла Python равным *SUFFIX*.159160Суффикс по умолчанию: `.exe` в Windows и macOS (`python.exe` исполняемый файл), `.js` в Emscripten node, `.html` в Emscripten browser, `.wasm` в WASI, и пустая строка на других платформах (`python` исполняемый файл).161162Изменено в версии 3.11: Суффикс по умолчанию на платформе WASM – один из `.js`, `.html` или `.wasm`.163164#### `--with-tzpath=<list of absolute paths separated by pathsep>`165166Выбрать путь поиска часового пояса по умолчанию для [`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).167168По умолчанию: `/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo`.169170См. разделитель путей [`os.pathsep`](https://python-all.ru/3.16/library/os.html#os.pathsep).171172Добавлено в версии 3.9.173174#### `--without-decimal-contextvar`175176Сборка модуля расширения `_decimal` с контекстом, локальным для потока, а не с контекстом, локальным для корутины (по умолчанию). См. модуль [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal).177178См. [`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).179180Добавлено в версии 3.9.181182#### `--with-dbmliborder=<list of backend names>`183184Переопределяет порядок проверки бэкендов БД для модуля [`dbm`](https://python-all.ru/3.16/library/dbm.html#module-dbm).185186Допустимое значение – строка с именами бэкендов, разделённая двоеточиями (`:`):187188- `ndbm`;189- `gdbm`;190- `bdb`.191192#### `--without-c-locale-coercion`193194Отключает приведение локали C к локали на основе UTF-8 (включено по умолчанию).195196Не определять макрос `PY_COERCE_C_LOCALE`.197198См. [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONCOERCECLOCALE) и [**PEP 538**](https://python-all.ru/3.16/using/configure.html).199200#### `--with-platlibdir=DIRNAME`201202Имя каталога библиотек Python (по умолчанию `lib`).203204Fedora и SuSE используют `lib64` на 64-разрядных платформах.205206См. [`sys.platlibdir`](https://python-all.ru/3.16/library/sys.html#sys.platlibdir).207208Добавлено в версии 3.9.209210#### `--with-wheel-pkg-dir=PATH`211212Каталог пакетов wheel, используемых модулем [`ensurepip`](https://python-all.ru/3.16/library/ensurepip.html#module-ensurepip) (по умолчанию отсутствует).213214Некоторые политики упаковки дистрибутивов Linux рекомендуют не включать зависимости. Например, Fedora устанавливает пакеты wheel в каталог `/usr/share/python-wheels/` и не устанавливает пакет `ensurepip._bundled`.215216Добавлено в версии 3.10.217218#### `--with-pkg-config=[check|yes|no]`219220Должен ли configure использовать **pkg-config** для обнаружения зависимостей сборки.221222- `check` (по умолчанию): **pkg-config** необязателен223- `yes`: **pkg-config** обязателен224- `no`: configure не использует **pkg-config**, даже если он присутствует225226Добавлено в версии 3.12.227228#### `--with-missing-stdlib-config=FILE`229230Путь к файлу конфигурации [JSON](https://python-all.ru/3.16/using/configure.html), содержащему пользовательские сообщения об ошибках для отсутствующих модулей [стандартной библиотеки](https://python-all.ru/3.16/glossary.html#term-standard-library).231232Эта опция предназначена для распространителей Python, желающих предоставлять специфичные для дистрибутива рекомендации, когда пользователи сталкиваются с модулями стандартной библиотеки, которые отсутствуют или упакованы отдельно.233234JSON-файл должен сопоставлять имена отсутствующих модулей со строками пользовательских сообщений об ошибках. Например, если дистрибутив распространяет [`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` исключает по юридическим причинам, конфигурация может содержать:235236```json237{238 "_gdbm": "The '_gdbm' module is not available in this distribution",239 "tkinter": "Install the python-tk package to use tkinter",240 "_tkinter": "Install the python-tk package to use tkinter",241}242```243244Добавлено в версии 3.15.245246#### `--enable-pystats`247248Включает сбор внутренней статистики производительности Python.249250По умолчанию сбор статистики выключен. Используйте команду `python3 -X pystats` или установите переменную окружения `PYTHONSTATS=1`, чтобы включить сбор статистики при запуске Python.251252При выходе из Python выгружает статистику, если сбор статистики был включён и не очищен.253254Эффекты:255256- Добавляет опцию командной строки [`-X pystats`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).257- Добавляет переменную окружения `PYTHONSTATS`.258- Определяет макрос `Py_STATS`.259- Добавляет функции в модуль [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys):260261 - `sys._stats_on()`: Включает сбор статистики.262 - `sys._stats_off()`: Выключает сбор статистики.263 - `sys._stats_clear()`: Очищает статистику.264 - `sys._stats_dump()`: Сбрасывает статистику в файл и очищает её.265266Статистика будет сброшена в произвольный (вероятно, уникальный) файл в\\n`/tmp/py_stats/` (Unix) или `C:\temp\py_stats\` (Windows). Если этот\\nкаталог не существует, результаты будут выведены в stderr.267268Используйте `Tools/scripts/summarize_stats.py` для чтения статистики.269270Статистика:271272- Код операции:273274 - Специализация: успех, неудача, попадание, отложено, промах, деоптимизация, сбои;275 - Счётчик выполнения;276 - Счётчик пар.277- Вызов:278279 - Встроенные вызовы Python;280 - Вызовы PyEval;281 - Помещено фреймов;282 - Создано объектов фреймов;283 - Вызовы eval: векторный, генераторный, устаревший, функция VECTORCALL, сборка класса, слот, функция “ex”, API, метод.284- Объект:285286 - incref и decref;287 - интерпретатор incref и decref;288 - выделения: все, 512 байт, 4 КиБ, большие;289 - освобождение;290 - в/из списков свободных блоков;291 - словарь материализован/дематериализован;292 - кэш типов;293 - попытки оптимизации;294 - трассы оптимизации создано/выполнено;295 - выполнено uops.296- Сборщик мусора:297298 - Сборок мусора;299 - Посещено объектов;300 - Собрано объектов.301302Добавлено в версии 3.12.303304#### `--disable-gil`305306Включает поддержку запуска 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).307308Определяет макрос `Py_GIL_DISABLED` и добавляет `"t"` в\\n[`sys.abiflags`](https://python-all.ru/3.16/library/sys.html#sys.abiflags).309310Подробнее см. [Free-threaded CPython](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-free-threaded-cpython).311312Добавлено в версии 3.13.313314#### `--enable-experimental-jit=[no|yes|yes-off|interpreter]`315316Указывает, как интегрировать [экспериментальный JIT-компилятор](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-jit-compiler).317318- `no`: Не собирать JIT.319- `yes`: Включить JIT. Чтобы отключить его во время выполнения, установите переменную окружения [`PYTHON_JIT=0`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT).320- `yes-off`: Собрать JIT, но по умолчанию отключить его. Чтобы включить его во время выполнения, установите переменную окружения [`PYTHON_JIT=1`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT).321- `interpreter`: Включить «JIT-интерпретатор» (полезно только для отладки самого JIT). Чтобы отключить его во время выполнения, установите переменную окружения [`PYTHON_JIT=0`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT).322323`--enable-experimental-jit=no` – поведение по умолчанию, если опция не указана, а `--enable-experimental-jit` – сокращение для `--enable-experimental-jit=yes`. См. `Tools/jit/README.md` для получения дополнительной информации, включая установку необходимых зависимостей времени сборки.324325> **Примечание**326>327> При сборке CPython с включённым JIT убедитесь, что в системе установлен Python 3.11 или новее.328329Добавлено в версии 3.13.330331#### `PKG_CONFIG`332333Путь к утилите `pkg-config`.334335#### `PKG_CONFIG_LIBDIR`336337#### `PKG_CONFIG_PATH`338339Параметры `pkg-config`.340341#### `--disable-epoll`342343Сборка без `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.344345Добавлено в версии 3.15.346347#### `--with-build-details-suffix=[yes|SUFFIX]`348349Переименовать `build-details.json`, чтобы разрешить установку нескольких установок Python в одном месте. Если указан пользовательский `SUFFIX`, он используется дословно, иначе он будет сгенерирован из тега `MULTIARCH` с `-free-threading` и `-debug`, в зависимости от ситуации.350351Добавлено в версии 3.16.352353### 3.3.2. Параметры компилятора C354355#### `CC`356357Команда компилятора C.358359#### `CFLAGS`360361Флаги компилятора C.362363#### `CPP`364365Команда препроцессора C.366367#### `CPPFLAGS`368369Флаги препроцессора C, например `-Iinclude_dir`.370371### 3.3.3. Параметры компоновщика372373#### `LDFLAGS`374375Флаги компоновщика, например `-Llibrary_directory`.376377#### `LIBS`378379Библиотеки для передачи компоновщику, например `-llibrary`.380381#### `MACHDEP`382383Имя для машинно-зависимых файлов библиотек.384385### 3.3.4. Параметры для сторонних зависимостей386387Добавлено в версии 3.12.388389#### `BZIP2_CFLAGS`390391#### `BZIP2_LIBS`392393Флаги компилятора C и компоновщика для связывания Python с `libbz2`, используемые модулем [`bz2`](https://python-all.ru/3.16/library/bz2.html#module-bz2), переопределяющие `pkg-config`.394395#### `CURSES_CFLAGS`396397#### `CURSES_LIBS`398399Флаги компилятора C и компоновщика для `libncurses` или `libncursesw`, используемые модулем [`curses`](https://python-all.ru/3.16/library/curses.html#module-curses), переопределяющие `pkg-config`.400401#### `GDBM_CFLAGS`402403#### `GDBM_LIBS`404405Флаги компилятора C и компоновщика для `gdbm`.406407#### `LIBEDIT_CFLAGS`408409#### `LIBEDIT_LIBS`410411Флаги компилятора C и компоновщика для `libedit`, используемые модулем [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline), переопределяющие `pkg-config`.412413#### `LIBFFI_CFLAGS`414415#### `LIBFFI_LIBS`416417Флаги компилятора C и компоновщика для `libffi`, используемые модулем [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes), переопределяющие `pkg-config`.418419#### `LIBMPDEC_CFLAGS`420421#### `LIBMPDEC_LIBS`422423Флаги компилятора C и компоновщика для `libmpdec`, используемые модулем [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal), переопределяющие `pkg-config`.424425#### `LIBLZMA_CFLAGS`426427#### `LIBLZMA_LIBS`428429Флаги компилятора C и компоновщика для `liblzma`, используемые модулем [`lzma`](https://python-all.ru/3.16/library/lzma.html#module-lzma), переопределяющие `pkg-config`.430431#### `LIBREADLINE_CFLAGS`432433#### `LIBREADLINE_LIBS`434435Флаги компилятора C и компоновщика для `libreadline`, используемые модулем [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline), переопределяющие `pkg-config`.436437#### `LIBSQLITE3_CFLAGS`438439#### `LIBSQLITE3_LIBS`440441Флаги компилятора C и компоновщика для `libsqlite3`, используемые модулем [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3), переопределяющие `pkg-config`.442443#### `LIBUUID_CFLAGS`444445#### `LIBUUID_LIBS`446447Флаги компилятора C и компоновщика для `libuuid`, используемые модулем [`uuid`](https://python-all.ru/3.16/library/uuid.html#module-uuid), переопределяющие `pkg-config`.448449#### `LIBZSTD_CFLAGS`450451#### `LIBZSTD_LIBS`452453Флаги компилятора C и компоновщика для `libzstd`, используемые модулем [`compression.zstd`](https://python-all.ru/3.16/library/compression.zstd.html#module-compression.zstd), переопределяющие `pkg-config`.454455Добавлено в версии 3.14.456457#### `PANEL_CFLAGS`458459#### `PANEL_LIBS`460461Флаги компилятора C и компоновщика для PANEL, переопределяющие `pkg-config`.462463Флаги компилятора C и компоновщика для `libpanel` или `libpanelw`, используемые модулем [`curses.panel`](https://python-all.ru/3.16/library/curses.panel.html#module-curses.panel), переопределяющие `pkg-config`.464465#### `TCLTK_CFLAGS`466467#### `TCLTK_LIBS`468469Флаги компилятора C и компоновщика для TCLTK, переопределяющие `pkg-config`.470471#### `ZLIB_CFLAGS`472473#### `ZLIB_LIBS`474475Флаги компилятора C и компоновщика для `libzlib`, используемые модулем [`gzip`](https://python-all.ru/3.16/library/gzip.html#module-gzip), переопределяющие `pkg-config`.476477### 3.3.5. Параметры WebAssembly478479#### `--enable-wasm-dynamic-linking`480481Включить поддержку динамической компоновки для WASM.482483Динамическая компоновка включает `dlopen`. Размер исполняемого файла увеличивается из-за ограниченного удаления мёртвого кода и дополнительных возможностей.484485Добавлено в версии 3.12.486487#### `--enable-wasm-pthreads`488489Включить поддержку pthreads для WASM.490491Добавлено в версии 3.12.492493### 3.3.6. Параметры установки494495#### `--prefix=PREFIX`496497Устанавливает архитектурно-независимые файлы в PREFIX. В Unix по умолчанию используется `/usr/local`.498499Это значение можно получить во время выполнения с помощью [`sys.prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix).500501Например, можно использовать `--prefix="$HOME/.local/"` для установки Python в домашний каталог.502503#### `--exec-prefix=EPREFIX`504505Устанавливает архитектурно-зависимые файлы в EPREFIX, по умолчанию [`--prefix`](https://python-all.ru/3.16/using/configure.html#cmdoption-prefix).506507Это значение можно получить во время выполнения с помощью [`sys.exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix).508509#### `--disable-test-modules`510511Не собирать и не устанавливать тестовые модули, такие как пакет [`test`](https://python-all.ru/3.16/library/test.html#module-test) или модуль расширения `_testcapi` (собирается и устанавливается по умолчанию).512513Добавлено в версии 3.10.514515#### `--with-ensurepip=[upgrade|install|no]`516517Выбирает команду [`ensurepip`](https://python-all.ru/3.16/library/ensurepip.html#module-ensurepip), запускаемую при установке Python:518519- `upgrade` (по умолчанию): запустить команду `python -m ensurepip --altinstall --upgrade` .520- `install`: запустить команду `python -m ensurepip --altinstall`;521- `no`: не запускать ensurepip;522523Добавлено в версии 3.6.524525### 3.3.7. Параметры производительности526527Для достижения максимальной производительности рекомендуется настраивать Python с помощью `--enable-optimizations --with-lto` (PGO + LTO). Экспериментальный флаг `--enable-bolt` также можно использовать для повышения производительности.528529#### `--enable-optimizations`530531Включает профильную оптимизацию (PGO) с помощью [`PROFILE_TASK`](https://python-all.ru/3.16/using/configure.html#envvar-PROFILE_TASK) (по умолчанию отключено).532533Компилятору Clang требуется программа `llvm-profdata` для PGO. На macOS она также требуется GCC: GCC – это просто псевдоним Clang на macOS.534535Также отключает семантическое переопределение символов в libpython, если используются `--enable-shared` и GCC: добавьте `-fno-semantic-interposition` в флаги компилятора и компоновщика.536537> **Примечание**538>539> В процессе сборки могут появляться предупреждения компилятора о недоступности данных профиля для некоторых исходных файлов. Эти предупреждения безвредны, так как при сборе данных профиля выполняется лишь часть кода. Чтобы отключить эти предупреждения в Clang, вручную подавите их, добавив `-Wno-profile-instr-unprofiled` к [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS).540541Добавлено в версии 3.6.542543Изменено в версии 3.10: Используйте `-fno-semantic-interposition` в GCC.544545#### `PROFILE_TASK`546547Переменная окружения, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.548549По умолчанию: `-m test --pgo --timeout=$(TESTTIMEOUT)`.550551Добавлено в версии 3.8.552553Изменено в версии 3.13: Сбой задачи больше не игнорируется без уведомления.554555#### `--with-lto=[full|thin|no|yes]`556557Включает оптимизацию во время компоновки (LTO) в любой сборке (по умолчанию отключено).558559Компилятору Clang требуется `llvm-ar` для LTO (`ar` в macOS), а также компоновщик, поддерживающий LTO (`ld.gold` или `lld`).560561Добавлено в версии 3.6.562563Добавлено в версии 3.11: Для использования функции ThinLTO используйте `--with-lto=thin` в Clang.564565Изменено в версии 3.12: Используйте ThinLTO в качестве политики оптимизации по умолчанию в Clang, если компилятор поддерживает этот флаг.566567#### `--enable-bolt`568569Включает использование [оптимизатора бинарных файлов после компоновки BOLT](https://python-all.ru/3.16/using/configure.html) (по умолчанию отключено).570571BOLT является частью проекта LLVM, но не всегда входит в их бинарные дистрибутивы. Этот флаг требует наличия `llvm-bolt` и `merge-fdata`.572573BOLT – всё ещё относительно новый проект, поэтому этот флаг пока следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успех зависит от комбинации окружения сборки, других аргументов конфигурации оптимизации и архитектуры CPU, и не все комбинации поддерживаются. Известно, что версии BOLT до LLVM 16 аварийно завершаются в некоторых сценариях. Настоятельно рекомендуется использовать LLVM 16 или новее для оптимизации BOLT.574575Переменные `BOLT_INSTRUMENT_FLAGS` и `BOLT_APPLY_FLAGS` **configure** можно определить, чтобы переопределить набор аргументов по умолчанию для **llvm-bolt** для инструментирования и применения данных BOLT к бинарным файлам соответственно.576577Добавлено в версии 3.12.578579#### `BOLT_APPLY_FLAGS`580581Аргументы для `llvm-bolt` при создании [оптимизированного BOLT бинарного файла](https://python-all.ru/3.16/using/configure.html).582583Добавлено в версии 3.12.584585#### `BOLT_INSTRUMENT_FLAGS`586587Аргументы для `llvm-bolt` при инструментировании бинарных файлов.588589Добавлено в версии 3.12.590591#### `--with-computed-gotos`592593Включает вычисляемые переходы в цикле вычислений (включено по умолчанию на поддерживаемых компиляторах).594595#### `--with-tail-call-interp`596597Включает интерпретаторы, использующие хвостовые вызовы в 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 и новее поддерживает эту функцию.598599Добавлено в версии 3.14.600601#### `--without-frame-pointers`602603Отключает указатели фреймов, которые включены по умолчанию (см. [**PEP 831**](https://python-all.ru/3.16/using/configure.html)).604605По умолчанию сборка добавляет флаги для генерации указателей фреймов или обратной цепочки к `BASECFLAGS`:606607- `-fno-omit-frame-pointer` и/или `-mno-omit-leaf-frame-pointer` добавляются, если компилятор их поддерживает.608- `-marm` и/или `-mno-thumb` добавляется на 32-битной ARM при поддержке,609- на платформах s390x, при поддержке, `-mbackchain` добавляется *вместо*. указанных выше флагов указателей фреймов.610- на платформах ppc64le флаги компилятора не требуются, так как ABI Power требует, чтобы компиляторы по умолчанию поддерживали обратную цепочку.611612Указатели фреймов позволяют профилировщикам, отладчикам и системным инструментам трассировки (`perf`, `eBPF`, `dtrace`, `gdb`) обходить стек вызовов C без метаданных DWARF. Эти флаги передаются сторонним расширениям C через [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig). На компиляторах, которые их не понимают, сборка молча их пропускает.613614Распространителям пакетов и авторам нативных библиотек, собираемых с помощью пользовательских систем сборки, следует устанавливать те же флаги, чтобы цепочка размотки оставалась непрерывной во всех нативных фреймах.615616Добавлено в версии 3.15.617618#### `--without-mimalloc`619620Отключает быстрый распределитель [mimalloc](https://python-all.ru/3.16/c-api/memory.html#mimalloc) (включён по умолчанию).621622Эту опцию нельзя использовать вместе с [`--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.623624См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONMALLOC).625626#### `--without-pymalloc`627628Отключает специализированный распределитель памяти Python [pymalloc](https://python-all.ru/3.16/c-api/memory.html#pymalloc) (включён по умолчанию).629630См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONMALLOC).631632#### `--with-pymalloc-hugepages`633634Включает поддержку больших страниц для арен [pymalloc](https://python-all.ru/3.16/c-api/memory.html#pymalloc) (отключено по умолчанию). При включении размер арены на 64-битных платформах увеличивается до 2 МиБ, и для выделения арен используется `MAP_HUGETLB` (Linux) или `MEM_LARGE_PAGES` (Windows) с автоматическим возвратом к обычным страницам.635636Даже если сборка выполнена с этим параметром, большие страницы **не** используются во время выполнения, пока переменная окружения [`PYTHON_PYMALLOC_HUGEPAGES`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_PYMALLOC_HUGEPAGES) не установлена в `1`. Этот добровольный выбор необходим, потому что большие страницы637638- несут риски в Linux: если пул больших страниц исчерпан, сбои страниц (включая сбои копирования при записи после [`os.fork()`](https://python-all.ru/3.16/library/os.html#os.fork)) приводят к `SIGBUS` и убивают процесс.639- требуют специальных привилегий в Windows. Подробнее см. [документацию Windows по большим страницам](https://python-all.ru/3.16/using/configure.html). Python завершится ошибкой при запуске, если у пользователя нет необходимой привилегии [SeLockMemoryPrivilege](https://python-all.ru/3.16/using/configure.html).640641Скрипт configure проверяет, поддерживает ли платформа `MAP_HUGETLB`, и выводит предупреждение, если это не так.642643В Windows используйте флаг `--pymalloc-hugepages` с `build.bat` или установите свойство MSBuild `UsePymallocHugepages`.644645Добавлено в версии 3.15.646647#### `--without-doc-strings`648649Отключает статические строки документации для уменьшения потребления памяти (включено по умолчанию). Строки документации, определённые в Python, не затрагиваются.650651Не определять макрос `WITH_DOC_STRINGS`.652653См. макрос `PyDoc_STRVAR()`.654655#### `--enable-profiling`656657Включает профилирование кода на уровне C с помощью `gprof` (отключено по умолчанию).658659#### `--with-strict-overflow`660661Добавляет `-fstrict-overflow` в флаги компилятора C (по умолчанию добавляется `-fno-strict-overflow`).662663#### `--without-remote-debug`664665Отключает поддержку удаленной отладки, описанную в [**PEP 768**](https://python-all.ru/3.16/using/configure.html) (включена по умолчанию). Когда этот флаг указан, код, который позволяет интерпретатору планировать выполнение файла Python в отдельном процессе, как описано в [**PEP 768**](https://python-all.ru/3.16/using/configure.html), не компилируется. Это включает как функциональность для планирования выполняемого кода, так и функциональность для получения кода для выполнения.666667#### `Py_REMOTE_DEBUG`668669Этот макрос определяется по умолчанию, если Python не сконфигурирован с [`--without-remote-debug`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-remote-debug).670671Обратите внимание, что даже если макрос определён, удаленная отладка может быть недоступна (например, на несовместимой платформе).672673Добавлено в версии 3.14.674675### 3.3.8. Отладочная сборка Python676677Отладочная сборка – это Python, собранный с опцией конфигурации [`--with-pydebug`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-pydebug).678679Эффекты отладочной сборки:680681- Показывать все предупреждения по умолчанию: список фильтров предупреждений по умолчанию пуст в модуле [`warnings`](https://python-all.ru/3.16/library/warnings.html#module-warnings).682- Добавляет `d` в [`sys.abiflags`](https://python-all.ru/3.16/library/sys.html#sys.abiflags).683- Добавляет функцию `sys.gettotalrefcount()`.684- Добавляет опцию командной строки [`-X showrefcount`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).685- Добавляет опцию командной строки [`-d`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-d) и переменную окружения [`PYTHONDEBUG`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDEBUG) для отладки парсера.686- Добавляет поддержку переменной `__lltrace__`: включение низкоуровневой трассировки в цикле выполнения байт-кода, если переменная определена.687- Устанавливает [отладочные привязки на распределители памяти](https://python-all.ru/3.16/c-api/memory.html#default-memory-allocators) для обнаружения переполнения буфера и других ошибок памяти.688- Определяет макросы `Py_DEBUG` и `Py_REF_DEBUG`.689- Добавляет проверки времени выполнения: код, окружённый `#ifdef Py_DEBUG` и `#endif`. Включает утверждения `assert(...)` и `_PyObject_ASSERT(...)`: не устанавливайте макрос `NDEBUG` (см. также опцию конфигурации [`--with-assertions`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-assertions)). Основные проверки времени выполнения:690691 - Добавляет проверки корректности аргументов функций.692 - Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неинициализированных объектов.693 - Гарантирует, что функции, которые могут очистить или заменить текущее исключение, не вызываются при возникшем исключении.694 - Проверяется, что функции деаллокации не изменяют текущее исключение.695 - Сборщик мусора (функция [`gc.collect()`](https://python-all.ru/3.16/library/gc.html#gc.collect)) выполняет базовые проверки корректности объектов.696 - Макрос `Py_SAFE_DOWNCAST()` проверяет целочисленное переполнение (underflow и overflow) при понижающем приведении от широких типов к узким.697698См. также [режим разработки 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).699700Изменено в версии 3.8: Релизные сборки теперь совместимы по ABI с отладочными: определение макроса `Py_DEBUG` больше не подразумевает макрос `Py_TRACE_REFS` (см. опцию [`--with-trace-refs`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs)). Однако отладочные сборки по-прежнему экспортируют больше символов, чем релизные, и код, собранный для отладочной сборки, не обязательно совместим с релизной.701702### 3.3.9. Отладочные опции703704#### `--with-pydebug`705706[Собрать Python в отладочном режиме](https://python-all.ru/3.16/using/configure.html#debug-build): определяет макрос `Py_DEBUG` (отключён по умолчанию).707708#### `--with-trace-refs`709710Включает отслеживание ссылок для целей отладки (отключено по умолчанию).711712Эффекты:713714- Определяет макрос `Py_TRACE_REFS`.715- Добавляет функцию [`sys.getobjects()`](https://python-all.ru/3.16/library/sys.html#sys.getobjects).716- Добавляет переменную окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDUMPREFS).717718Переменная окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONDUMPREFS) может использоваться для дампа объектов и счётчиков ссылок, остающихся активными при завершении Python.719720[Статически размещённые объекты](https://python-all.ru/3.16/c-api/typeobj.html#static-types) не отслеживаются.721722Добавлено в версии 3.8.723724Изменено в версии 3.13: Эта сборка теперь совместима по ABI с релизной сборкой и [отладочной сборкой](https://python-all.ru/3.16/using/configure.html#debug-build).725726#### `--with-assertions`727728Сборка с включёнными C-утверждениями (по умолчанию нет): `assert(...);` и `_PyObject_ASSERT(...);`.729730Если установлен, макрос `NDEBUG` не определяется в переменной компилятора [`OPT`](https://python-all.ru/3.16/using/configure.html#envvar-OPT).731732См. также опцию [`--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)), которая также включает утверждения.733734Добавлено в версии 3.6.735736#### `--with-valgrind`737738Включить поддержку Valgrind (по умолчанию нет).739740#### `--with-dtrace`741742Включить поддержку DTrace (по умолчанию нет).743744См. [Инструментирование CPython с помощью DTrace и SystemTap](https://python-all.ru/3.16/howto/instrumentation.html#instrumentation).745746Добавлено в версии 3.6.747748#### `--with-address-sanitizer`749750Включить детектор ошибок памяти AddressSanitizer, `asan` (по умолчанию нет). Чтобы улучшить возможности обнаружения ASan, можно также объединить это с [`--without-pymalloc`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-pymalloc) для отключения специализированного аллокатора малых объектов, чьи выделения не отслеживаются ASan.751752Добавлено в версии 3.6.753754#### `--with-memory-sanitizer`755756Включить детектор ошибок выделения памяти MemorySanitizer, `msan` (по умолчанию нет).757758Добавлено в версии 3.6.759760#### `--with-undefined-behavior-sanitizer`761762Включить детектор неопределённого поведения UndefinedBehaviorSanitizer, `ubsan` (по умолчанию нет).763764Добавлено в версии 3.6.765766#### `--with-thread-sanitizer`767768Включает детектор гонок данных ThreadSanitizer, `tsan` (по умолчанию выключено).769770Добавлено в версии 3.13.771772### 3.3.10. Параметры компоновщика773774#### `--enable-shared`775776Включает сборку разделяемой библиотеки Python: `libpython` (по умолчанию выключено).777778#### `--without-static-libpython`779780Не собирать `libpythonMAJOR.MINOR.a` и не устанавливать `python.o` (собирается и устанавливается по умолчанию).781782Добавлено в версии 3.10.783784#### `--enable-static-libpython-for-interpreter`785786Двоичный файл интерпретатора Python (`python3`) не связывается с общей библиотекой Python; вместо этого интерпретатор статически связывается с `libpython`, как если бы `--enable-shared` не использовался, но общая `libpython` продолжает собираться (для использования другими программами).787788Эта опция ничего не делает, если `--enable-shared` не используется.789790По умолчанию (когда `-enable-shared` используется) интерпретатор Python связывается с собранной общей библиотекой.791792Добавлено в версии 3.15.793794### 3.3.11. Параметры библиотек795796#### `--with-libs='lib1 ...'`797798Линковаться с дополнительными библиотеками (по умолчанию нет).799800#### `--with-system-expat`801802Собирать модуль `pyexpat`, используя установленную библиотеку `expat` (по умолчанию нет).803804#### `--with-readline=readline|editline`805806Назначить библиотеку-бэкенд для модуля [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline).807808- readline: использовать readline в качестве бэкенда.809- editline: использовать editline в качестве бэкенда.810811Добавлено в версии 3.10.812813#### `--without-readline`814815Не собирать модуль [`readline`](https://python-all.ru/3.16/library/readline.html#module-readline) (собирается по умолчанию).816817Не определять макрос `HAVE_LIBREADLINE`.818819Добавлено в версии 3.10.820821#### `--with-libm=STRING`822823Переопределить математическую библиотеку `libm` на *STRING* (по умолчанию зависит от системы).824825#### `--with-libc=STRING`826827Переопределить библиотеку C `libc` на *STRING* (по умолчанию зависит от системы).828829#### `--with-openssl=DIR`830831Корневой каталог OpenSSL.832833Добавлено в версии 3.7.834835#### `--with-openssl-rpath=[no|auto|DIR]`836837Задать каталог библиотек времени выполнения (rpath) для библиотек OpenSSL:838839- `no` (по умолчанию): не устанавливать rpath;840- `auto`: автоматически определять rpath из [`--with-openssl`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-openssl) и `pkg-config`;841- *DIR*: указать явный rpath.842843Добавлено в версии 3.10.844845### 3.3.12. Параметры безопасности846847#### `--with-hash-algorithm=[fnv|siphash13|siphash24]`848849Выберите алгоритм хеширования для использования в `Python/pyhash.c`:850851- `siphash13` (по умолчанию);852- `siphash24`;853- `fnv`.854855Добавлено в версии 3.4.856857Добавлено в версии 3.11: `siphash13` добавлен и стал новым значением по умолчанию.858859#### `--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2`860861Встроенные хеш-модули:862863- `md5`;864- `sha1`;865- `sha256`;866- `sha512`;867- `sha3` (с shake);868- `blake2`.869870Добавлено в версии 3.9.871872#### `--with-ssl-default-suites=[python|openssl|STRING]`873874Переопределить строку наборов шифров OpenSSL по умолчанию:875876- `python` (по умолчанию): использовать предпочтительный выбор Python;877- `openssl`: оставить настройки OpenSSL по умолчанию без изменений;878- *STRING*: использовать произвольную строку879880См. модуль [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl).881882Добавлено в версии 3.7.883884Изменено в версии 3.10: Настройки `python` и *STRING* также устанавливают TLS 1.2 в качестве минимальной версии протокола.885886#### `--disable-safety`887888Отключает параметры компилятора, которые [рекомендуются OpenSSF](https://python-all.ru/3.16/using/configure.html) из соображений безопасности без потери производительности. Если эта опция не включена, CPython будет собран с использованием безопасных параметров компилятора без замедления. Если эта опция включена, CPython не будет собран с параметрами компилятора, перечисленными ниже.889890Следующие параметры компилятора отключаются с помощью `--disable-safety`:891892- [-fstack-protector-strong](https://python-all.ru/3.16/using/configure.html): Включает проверки времени выполнения для переполнения буфера на стеке.893- [-Wtrampolines](https://python-all.ru/3.16/using/configure.html): Включает предупреждения о трамплинах, требующих исполняемых стеков.894895Добавлено в версии 3.14.896897#### `--enable-slower-safety`898899Включает параметры компилятора, которые [рекомендуются OpenSSF](https://python-all.ru/3.16/using/configure.html) из соображений безопасности, но требуют дополнительных затрат производительности. Если эта опция не включена, CPython не будет собран с использованием безопасных параметров компилятора, влияющих на производительность. Если эта опция включена, CPython будет собран с параметрами компилятора, перечисленными ниже.900901Следующие параметры компилятора включаются с помощью `--enable-slower-safety`:902903- [-D\_FORTIFY\_SOURCE=3](https://python-all.ru/3.16/using/configure.html): Укрепляет исходный код с помощью проверок во время компиляции и выполнения на предмет небезопасного использования libc и переполнения буфера.904905Добавлено в версии 3.14.906907### 3.3.13. Параметры macOS908909См. [Mac/README.rst](https://python-all.ru/src/main/Mac/README.rst).910911#### `--enable-universalsdk`912913#### `--enable-universalsdk=SDKDIR`914915Создание универсальной сборки двоичного файла. *SDKDIR* указывает, какой macOS SDK следует использовать для сборки (по умолчанию нет).916917#### `--enable-framework`918919#### `--enable-framework=INSTALLDIR`920921Создаёт Python.framework вместо традиционной установки в Unix. Необязательный *INSTALLDIR* определяет путь установки (по умолчанию – нет).922923#### `--with-universal-archs=ARCH`924925Определяет тип универсального бинарного файла, который будет создан. Этот параметр работает, только если указан [`--enable-universalsdk`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-universalsdk).926927Варианты:928929- `universal2` (x86-64 и arm64);930- `32-bit` (PPC и i386);931- `64-bit` (PPC64 и x86-64);932- `3-way` (i386, PPC и x86-64);933- `intel` (i386 и x86-64);934- `intel-32` (i386);935- `intel-64` (x86-64);936- `all` (PPC, i386, PPC64 и x86-64).937938Обратите внимание: значения этого параметра конфигурации *не* совпадают с идентификаторами, используемыми для универсальных бинарных колец (wheels) в macOS. Подробнее о [тегах совместимости платформы упаковки, используемых в macOS,](https://python-all.ru/3.16/using/configure.html) см. в Python Packaging User Guide.939940#### `--with-framework-name=FRAMEWORK`941942Задаёт имя для python framework в macOS. Работает только при указанном [`--enable-framework`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-framework) (по умолчанию: `Python`).943944#### `--with-app-store-compliance`945946#### `--with-app-store-compliance=PATCH-FILE`947948Стандартная библиотека Python содержит строки, которые, как известно, вызывают ошибки автоматических инструментов проверки при отправке на распространение через App Store macOS и iOS. Если этот параметр включён, будет применён список исправлений, которые устраняют несоответствия требованиям магазинов приложений. Можно также указать собственный файл исправлений. По умолчанию этот параметр отключён.949950Добавлено в версии 3.13.951952### 3.3.14. Параметры iOS953954См. [iOS/README.rst](https://python-all.ru/3.16/using/configure.html).955956#### `--enable-framework=INSTALLDIR`957958Создаёт Python.framework. В отличие от macOS, аргумент *INSTALLDIR*, указывающий путь установки, обязателен.959960#### `--with-framework-name=FRAMEWORK`961962Задаёт имя для framework (по умолчанию: `Python`).963964### 3.3.15. Параметры кросс-компиляции965966Кросс-компиляция (также известная как кросс-сборка) используется для сборки Python под другую архитектуру CPU или платформу. Для кросс-компиляции требуется интерпретатор Python для платформы сборки. Версия Python для сборки должна совпадать с версией Python для целевой платформы, скомпилированной кросс-компилятором.967968#### `--build=BUILD`969970настройка для сборки на платформе BUILD, обычно определяется с помощью **config.guess**.971972#### `--host=HOST`973974кросс-компиляция для сборки программ, выполняемых на HOST (целевая платформа)975976#### `--with-build-python=path/to/python`977978путь к `python` двоичному файлу для кросс-компиляции979980Добавлено в версии 3.12.981982#### `CONFIG_SITE=file`983984Переменная окружения, указывающая на файл с переопределениями configure.985986Пример файла *config.site*:987988```ini989# config.site-aarch64990ac_cv_buggy_getaddrinfo=no991ac_cv_file__dev_ptmx=yes992ac_cv_file__dev_ptc=no993```994995#### `HOSTRUNNER`996997Программа, запускающая CPython на хост-платформе для кросс-компиляции.998999Добавлено в версии 3.12.10001001Пример кросс-компиляции:10021003```sh1004CONFIG_SITE=config.site-aarch64 ../configure \1005 --build=x86_64-pc-linux-gnu \1006 --host=aarch64-unknown-linux-gnu \1007 --with-build-python=../x86_64/python1008```10091010## 3.4. Система сборки Python10111012### 3.4.1. Основные файлы системы сборки10131014- `configure.ac` =\> `configure`;1015- `Makefile.pre.in` =\> `Makefile` (создаётся с помощью `configure`);1016- `pyconfig.h` (создаётся с помощью `configure`);1017- `Modules/Setup`: расширения на C, собираемые Makefile с помощью `Module/makesetup` shell-скрипта;10181019### 3.4.2. Основные этапы сборки10201021- C-файлы (`.c`) компилируются в объектные файлы (`.o`).1022- Статическая библиотека `libpython` (`.a`) создаётся из объектных файлов.1023- `python.o` и статическая библиотека `libpython` компонуются в итоговую программу `python`.1024- Расширения на C собираются с помощью Makefile (см. `Modules/Setup`).10251026### 3.4.3. Основные цели Makefile10271028#### 3.4.3.1. make10291030В большинстве случаев при пересборке после редактирования кода или обновления локальной копии из вышестоящего репозитория достаточно просто выполнить `make`, которая (согласно семантике Make) собирает цель по умолчанию – первую, определённую в Makefile. По традиции (в том числе в проекте CPython) это обычно цель `all`. Скрипт `configure` разворачивает переменную `autoconf`, `@DEF_MAKE_ALL_RULE@`, чтобы точно описать, какие цели будет собирать `make all`. Доступны три варианта:10311032- `profile-opt` (настроено с помощью `--enable-optimizations`)1033- `build_wasm` (выбирается, если хост-платформа совпадает с `wasm32-wasi*` или `wasm32-emscripten`)1034- `build_all` (настроено без явного использования других вариантов)10351036В зависимости от последних изменений исходных файлов Make пересобирает все цели (объектные файлы и исполняемые), которые считает устаревшими, включая повторный запуск `configure` при необходимости. Однако зависимости между исходниками и целями многочисленны и поддерживаются вручную, поэтому иногда Make не располагает всей информацией, необходимой для правильного обнаружения всех целей, требующих пересборки. В зависимости от того, какие цели не были пересобраны, могут возникнуть различные проблемы. Если возникают проблемы со сборкой или тестированием, которые иначе не объяснить, `make clean && make` должен решить большинство проблем с зависимостями, хотя время сборки при этом увеличится.10371038#### 3.4.3.2. make platform10391040Собрать программу `python`, но не собирать модули расширения стандартной библиотеки. В результате создаётся файл `platform`, содержащий одну строку с описанием платформы сборки, например `macosx-14.3-arm64-3.12` или `linux-x86_64-3.13`.10411042#### 3.4.3.3. make profile-opt10431044Собрать Python с профильной оптимизацией (PGO). Чтобы сделать это целью по умолчанию для команды `make`, можно использовать параметр configure [`--enable-optimizations`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-optimizations) (`make all` или просто `make`).10451046#### 3.4.3.4. make clean10471048Удалить собранные файлы.10491050#### 3.4.3.5. make distclean10511052Помимо работы, выполненной `make clean`, удалить файлы, созданные скриптом configure. Перед повторной сборкой потребуется запустить `configure`. [\[6\]](https://python-all.ru/3.16/using/configure.html#id16)10531054#### 3.4.3.6. make install10551056Собрать цель `all` и установить Python.10571058#### 3.4.3.7. make test10591060Собрать цель `all` и запустить набор тестов Python с опцией `--fast-ci` без GUI-тестов. Переменные:10611062- `TESTOPTS`: дополнительные параметры командной строки regrtest.1063- `TESTPYTHONOPTS`: дополнительные параметры командной строки Python.1064- `TESTTIMEOUT`: тайм-аут в секундах (по умолчанию: 10 минут).10651066#### 3.4.3.8. make ci10671068Это похоже на `make test`, но использует `-ugui` для запуска также GUI-тестов.10691070Добавлено в версии 3.14.10711072#### 3.4.3.9. make buildbottest10731074Это похоже на `make test`, но использует опцию `--slow-ci` и тайм-аут по умолчанию 20 минут вместо опции `--fast-ci`.10751076#### 3.4.3.10. make regen-all10771078Перегенерировать (почти) все сгенерированные файлы. Они включают (но не ограничиваются) случаи байткода и файл генератора парсера. `make regen-stdlib-module-names` и `autoconf` должны быть запущены отдельно для остальных [сгенерированных файлов](https://python-all.ru/3.16/using/configure.html#generated-files).10791080### 3.4.4. Расширения C10811082Некоторые расширения C собираются как встроенные модули, например модуль `sys`. Они собираются с определённым макросом `Py_BUILD_CORE_BUILTIN`. Встроенные модули не имеют атрибута `__file__`:10831084```pycon1085>>> import sys1086>>> sys1087<module 'sys' (built-in)>1088>>> sys.__file__1089Traceback (most recent call last):1090 File "<stdin>", line 1, in <module>1091AttributeError: module 'sys' has no attribute '__file__'1092```10931094Другие расширения C собираются как динамические библиотеки, например модуль `_asyncio`. Они собираются с определённым макросом `Py_BUILD_CORE_MODULE`. Пример на Linux x86-64:10951096```pycon1097>>> import _asyncio1098>>> _asyncio1099<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>1100>>> _asyncio.__file__1101'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'1102```11031104`Modules/Setup` используется для генерации целей Makefile для сборки расширений C. В начале файлов расширения C собираются как встроенные модули. Расширения, определённые после маркера `*shared*`, собираются как динамические библиотеки.11051106Макросы `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`:11071108- Используйте `Py_EXPORTED_SYMBOL`, если `Py_BUILD_CORE_MODULE` определён.1109- В противном случае используйте `Py_IMPORTED_SYMBOL`.11101111Если макрос `Py_BUILD_CORE_BUILTIN` по ошибке используется для расширения C, собранного как разделяемая библиотека, его функция `PyInit_xxx()` не экспортируется, что вызывает [`ImportError`](https://python-all.ru/3.16/library/exceptions.html#ImportError) при импорте.11121113## 3.5. Флаги компилятора и компоновщика11141115Параметры, задаваемые сценарием `./configure` и переменными окружения, и используемые `Makefile`.11161117### 3.5.1. Флаги препроцессора11181119#### `CONFIGURE_CPPFLAGS`11201121Значение переменной [`CPPFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CPPFLAGS), передаваемое сценарию `./configure`.11221123Добавлено в версии 3.6.11241125#### `CPPFLAGS`11261127(Objective) C/C++ флаги препроцессора, например `-Iinclude_dir`, если заголовочные файлы находятся в нестандартном каталоге *include\_dir*.11281129И [`CPPFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.11301131#### `BASECPPFLAGS`11321133Добавлено в версии 3.4.11341135#### `PY_CPPFLAGS`11361137Дополнительные флаги препроцессора, добавляемые при сборке объектных файлов интерпретатора.11381139По умолчанию: `$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)`.11401141Добавлено в версии 3.2.11421143### 3.5.2. Флаги компилятора11441145#### `CC`11461147Команда компилятора C.11481149Пример: `gcc -pthread`.11501151#### `CXX`11521153Команда компилятора C++.11541155Пример: `g++ -pthread`.11561157#### `CFLAGS`11581159Флаги компилятора C.11601161#### `CFLAGS_NODIST`11621163[`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)).11641165В частности, [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS) не должен содержать:11661167- флаг компилятора `-I` (для задания пути поиска включаемых файлов). Флаги `-I` обрабатываются слева направо, и любые флаги из [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS) будут иметь приоритет над `-I` флагами, предоставленными пользователем и пакетами.1168- флаги усиления защиты, такие как `-Werror`, поскольку дистрибутивы не могут контролировать, соответствуют ли установленные пользователями пакеты таким повышенным стандартам.11691170Добавлено в версии 3.5.11711172#### `COMPILEALL_OPTS`11731174Параметры, передаваемые командной строке [`compileall`](https://python-all.ru/3.16/library/compileall.html#module-compileall) при сборке PYC-файлов в `make install`. По умолчанию: `-j0`.11751176Добавлено в версии 3.12.11771178#### `EXTRA_CFLAGS`11791180Дополнительные флаги компилятора C.11811182#### `CONFIGURE_CFLAGS`11831184Значение переменной [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS), передаваемое сценарию `./configure` .11851186Добавлено в версии 3.2.11871188#### `CONFIGURE_CFLAGS_NODIST`11891190Значение переменной [`CFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS_NODIST), передаваемое сценарию `./configure` .11911192Добавлено в версии 3.5.11931194#### `BASECFLAGS`11951196Базовые флаги компилятора.11971198#### `OPT`11991200Флаги оптимизации.12011202#### `CFLAGS_ALIASING`12031204Флаги строгого или нестрогого алиасинга, используемые для компиляции `Python/dtoa.c`.12051206Добавлено в версии 3.7.12071208#### `CFLAGS_CEVAL`12091210Флаги, используемые для компиляции `Python/ceval.c`.12111212Добавлено в версии 3.14.5.12131214#### `CCSHARED`12151216Флаги компилятора, используемые для сборки разделяемой библиотеки.12171218Например, `-fPIC` используется в Linux и BSD.12191220#### `CFLAGSFORSHARED`12211222Дополнительные флаги C, добавляемые для сборки объектных файлов интерпретатора.12231224По умолчанию: `$(CCSHARED)` при использовании [`--enable-shared`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-shared), иначе пустая строка.12251226#### `PY_CFLAGS`12271228По умолчанию: `$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)`.12291230#### `PY_CFLAGS_NODIST`12311232По умолчанию: `$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal`.12331234Добавлено в версии 3.5.12351236#### `PY_STDMODULE_CFLAGS`12371238Флаги C, используемые для сборки объектных файлов интерпретатора.12391240По умолчанию: `$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)`.12411242Добавлено в версии 3.7.12431244#### `PY_CORE_CFLAGS`12451246По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE`.12471248Добавлено в версии 3.2.12491250#### `PY_BUILTIN_MODULE_CFLAGS`12511252Флаги компилятора для сборки модуля расширения стандартной библиотеки как встроенного модуля, подобно модулю [`posix`](https://python-all.ru/3.16/library/posix.html#module-posix).12531254По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN`.12551256Добавлено в версии 3.8.12571258#### `PURIFY`12591260Команда Purify. Purify – программа для отладки памяти.12611262По умолчанию: пустая строка (не используется).12631264### 3.5.3. Флаги компоновщика12651266#### `LINKCC`12671268Команда компоновщика, используемая для сборки программ, таких как `python` и `_testembed`.12691270По умолчанию: `$(PURIFY) $(CC)`.12711272#### `CONFIGURE_LDFLAGS`12731274Значение переменной [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS), передаваемое сценарию `./configure`.12751276Избегайте присваивания [`CFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CFLAGS), [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) и т.д., чтобы пользователи могли использовать их в командной строке для добавления к этим значениям, не перезаписывая предустановленные.12771278Добавлено в версии 3.2.12791280#### `LDFLAGS_NODIST`12811282[`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)).12831284В частности, [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) не должен содержать:12851286- флаг компилятора `-L` (для установки пути поиска библиотек). Флаги `-L` обрабатываются слева направо, и любые флаги в [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) будут иметь приоритет над флагами `-L`, предоставленными пользователем или пакетом.12871288#### `CONFIGURE_LDFLAGS_NODIST`12891290Значение переменной [`LDFLAGS_NODIST`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS_NODIST), передаваемое сценарию `./configure` .12911292Добавлено в версии 3.8.12931294#### `LDFLAGS`12951296Флаги компоновщика, например, `-Llib_dir`, если библиотеки находятся в нестандартном каталоге *lib\_dir*.12971298И [`CPPFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.12991300Рекомендуется использовать `EXE_LDFLAGS`, если предоставленные флаги компоновщика относятся к конкретному исполняемому файлу, например к флагу `-pie` GCC.13011302#### `LIBS`13031304Флаги компоновщика для передачи библиотек компоновщику при компоновке исполняемого файла Python.13051306Пример: `-lrt`.13071308#### `LDSHARED`13091310Команда для сборки разделяемой библиотеки.13111312По умолчанию: `@LDSHARED@ $(PY_LDFLAGS)`.13131314#### `BLDSHARED`13151316Команда для сборки разделяемой библиотеки `libpython`.13171318По умолчанию: `@BLDSHARED@ $(PY_CORE_LDFLAGS)`.13191320#### `PY_LDFLAGS`13211322По умолчанию: `$(CONFIGURE_LDFLAGS) $(LDFLAGS)`.13231324#### `PY_LDFLAGS_NODIST`13251326По умолчанию: `$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)`.13271328Добавлено в версии 3.8.13291330#### `PY_CORE_LDFLAGS`13311332Флаги компоновщика, используемые для сборки объектных файлов интерпретатора.13331334Добавлено в версии 3.8.13351336#### `EXE_LDFLAGS`13371338Флаги компоновщика, используемые для сборки исполняемых целей, например интерпретатора. Если они указаны, [`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).13391340Добавлено в версии 3.15.13411342#### `CONFIGURE_EXE_LDFLAGS`13431344Значение переменной [`EXE_LDFLAGS`](https://python-all.ru/3.16/using/configure.html#envvar-EXE_LDFLAGS), передаваемое сценарию `./configure` .13451346Добавлено в версии 3.15.13471348#### `PY_CORE_EXE_LDFLAGS`13491350Флаги компоновщика, используемые для сборки интерпретатора и исполняемых целей.13511352По умолчанию: `$(PY_CORE_LDFLAGS)`13531354Добавлено в версии 3.15.13551356Сноски13571358\[[6](https://python-all.ru/3.16/using/configure.html#id14)\]13591360`git clean -fdx` – ещё более радикальный способ «очистить» рабочую копию. Он удаляет все файлы, не известные Git. При поиске ошибок с помощью `git bisect` это [рекомендуется между проверками](https://python-all.ru/3.16/using/configure.html) для гарантии полностью чистой сборки. **Используйте с осторожностью**, так как будут удалены все файлы, не отслеживаемые Git, включая ваши новые, несохранённые наработки.1361