configure.md
1> **Источник:** https://python-all.ru/3.15/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.15/using/configure.html). [Опциональные возможности C11](https://python-all.ru/3.15/using/configure.html) не требуются.14- В Windows требуется Microsoft Visual Studio 2017 или новее.15- Поддержка [IEEE 754](https://python-all.ru/3.15/using/configure.html) чисел с плавающей запятой и [нечисла (NaN)](https://python-all.ru/3.15/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.15/using/configure.html) и [**PEP 11** «Поддержка платформ CPython»](https://python-all.ru/3.15/using/configure.html).2728### 3.1.1. Требования к опциональным модулям2930Некоторые [опциональные модули](https://python-all.ru/3.15/glossary.html#term-optional-module) стандартной библиотеки требуют установки сторонних библиотек для разработки (например, должны быть доступны заголовочные файлы).3132Отсутствующие требования выводятся в `configure`. Модули, отсутствующие из-за неудовлетворённых зависимостей, перечисляются ближе к концу вывода `make`, иногда под внутренним именем, например, `_ctypes` для модуля [`ctypes`](https://python-all.ru/3.15/library/ctypes.html#module-ctypes) .3334При распространении интерпретатора CPython без опциональных модулей рекомендуется уведомлять пользователей, которые обычно ожидают, что модули стандартной библиотеки доступны.3536Зависимости для сборки опциональных модулей:3738| Зависимость | Минимальная версия | Модуль Python |39| --- | --- | --- |40| [libbz2](https://python-all.ru/3.15/using/configure.html) | | [`bz2`](https://python-all.ru/3.15/library/bz2.html#module-bz2) |41| [libffi](https://python-all.ru/3.15/using/configure.html) | Рекомендуется 3.3.0 | [`ctypes`](https://python-all.ru/3.15/library/ctypes.html#module-ctypes) |42| [liblzma](https://python-all.ru/3.15/using/configure.html) | | [`lzma`](https://python-all.ru/3.15/library/lzma.html#module-lzma) |43| [libmpdec](https://python-all.ru/3.15/using/configure.html) | 2.5.0 | [`decimal`](https://python-all.ru/3.15/library/decimal.html#module-decimal) [\[1\]](https://python-all.ru/3.15/using/configure.html#id7) |44| [libreadline](https://python-all.ru/3.15/using/configure.html) или [libedit](https://python-all.ru/3.15/using/configure.html) [\[2\]](https://python-all.ru/3.15/using/configure.html#id8) | | [`readline`](https://python-all.ru/3.15/library/readline.html#module-readline) |45| [libuuid](https://python-all.ru/3.15/using/configure.html) | | `_uuid` [\[3\]](https://python-all.ru/3.15/using/configure.html#id9) |46| [ncurses](https://python-all.ru/3.15/using/configure.html) [\[4\]](https://python-all.ru/3.15/using/configure.html#id10) | | [`curses`](https://python-all.ru/3.15/library/curses.html#module-curses) |47| [OpenSSL](https://python-all.ru/3.15/using/configure.html) | Рекомендуется 3.0.18 (минимум 1.1.1) | [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl), [`hashlib`](https://python-all.ru/3.15/library/hashlib.html#module-hashlib) [\[5\]](https://python-all.ru/3.15/using/configure.html#id11) |48| [SQLite](https://python-all.ru/3.15/using/configure.html) | 3.15.2 | [`sqlite3`](https://python-all.ru/3.15/library/sqlite3.html#module-sqlite3) |49| [Tcl/Tk](https://python-all.ru/3.15/using/configure.html) | 8.5.12 | [`tkinter`](https://python-all.ru/3.15/library/tkinter.html#module-tkinter), [IDLE](https://python-all.ru/3.15/library/idle.html#idle), [`turtle`](https://python-all.ru/3.15/library/turtle.html#module-turtle) |50| [zlib](https://python-all.ru/3.15/using/configure.html) | 1.2.2.1 | [`zlib`](https://python-all.ru/3.15/library/zlib.html#module-zlib), [`gzip`](https://python-all.ru/3.15/library/gzip.html#module-gzip), [`ensurepip`](https://python-all.ru/3.15/library/ensurepip.html#module-ensurepip) |51| [zstd](https://python-all.ru/3.15/using/configure.html) | 1.4.5 | [`compression.zstd`](https://python-all.ru/3.15/library/compression.zstd.html#module-compression.zstd) |5253\[[1](https://python-all.ru/3.15/using/configure.html#id2)\]5455Если *libmpdec* недоступен, модуль [`decimal`](https://python-all.ru/3.15/library/decimal.html#module-decimal) будет использовать чисто-Python реализацию. Подробнее см. [`--with-system-libmpdec`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-system-libmpdec).5657\[[2](https://python-all.ru/3.15/using/configure.html#id3)\]5859См. [`--with-readline`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-readline) о выборе бэкенда для модуля [`readline`](https://python-all.ru/3.15/library/readline.html#module-readline).6061\[[3](https://python-all.ru/3.15/using/configure.html#id4)\]6263Модуль [`uuid`](https://python-all.ru/3.15/library/uuid.html#module-uuid) использует `_uuid` для генерации «безопасных» UUID. Подробнее см. документацию модуля.6465\[[4](https://python-all.ru/3.15/using/configure.html#id5)\]6667Модуль [`curses`](https://python-all.ru/3.15/library/curses.html#module-curses) требует библиотеку `libncurses` или `libncursesw`. Модуль [`curses.panel`](https://python-all.ru/3.15/library/curses.panel.html#module-curses.panel) дополнительно требует библиотеку `libpanel` или `libpanelw`.6869\[[5](https://python-all.ru/3.15/using/configure.html#id6)\]7071Если OpenSSL недоступен, модуль [`hashlib`](https://python-all.ru/3.15/library/hashlib.html#module-hashlib) будет использовать встроенные реализации нескольких хеш-функций. См. [`--with-builtin-hashlib-hashes`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-builtin-hashlib-hashes), чтобы *принудительно использовать* OpenSSL.7273Обратите внимание, что таблица включает не все опциональные модули; в частности, платформенно-зависимые модули, такие как [`winreg`](https://python-all.ru/3.15/library/winreg.html#module-winreg), здесь не перечислены.7475> **См. также**76>77> - [Руководство разработчика](https://python-all.ru/3.15/using/configure.html) содержит полный список зависимостей, необходимых для сборки всех модулей, и инструкции по их установке на распространённых платформах.78> - [`--with-system-expat`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-system-expat) позволяет сборку с внешней библиотекой [libexpat](https://python-all.ru/3.15/using/configure.html).79> - [Параметры для сторонних зависимостей](https://python-all.ru/3.15/using/configure.html#configure-options-for-dependencies)8081Изменено в версии 3.1: Теперь для [`tkinter`](https://python-all.ru/3.15/library/tkinter.html#module-tkinter) требуется Tcl/Tk версии 8.3.1.8283Изменено в версии 3.5: Теперь для [`tkinter`](https://python-all.ru/3.15/library/tkinter.html#module-tkinter) требуется Tcl/Tk версии 8.4.8485Изменено в версии 3.7: Теперь для [`hashlib`](https://python-all.ru/3.15/library/hashlib.html#module-hashlib) и [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl) требуется OpenSSL 1.0.2.8687Изменено в версии 3.10: Теперь для [`hashlib`](https://python-all.ru/3.15/library/hashlib.html#module-hashlib) и [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl) требуется OpenSSL 1.1.1. Для [`sqlite3`](https://python-all.ru/3.15/library/sqlite3.html#module-sqlite3) теперь требуется SQLite 3.7.15.8889Изменено в версии 3.11: Теперь требуется Tcl/Tk версии 8.5.12 для [`tkinter`](https://python-all.ru/3.15/library/tkinter.html#module-tkinter).9091Изменено в версии 3.13: Теперь требуется SQLite 3.15.2 для [`sqlite3`](https://python-all.ru/3.15/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.15/using/configure.html) 2.72, `aclocal` из [Automake](https://python-all.ru/3.15/using/configure.html) 1.16.5, и [pkg-config](https://python-all.ru/3.15/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.15/library/sqlite3.html#module-sqlite3).137138См. метод [`sqlite3.Connection.enable_load_extension()`](https://python-all.ru/3.15/library/sqlite3.html#sqlite3.Connection.enable_load_extension) модуля [`sqlite3`](https://python-all.ru/3.15/library/sqlite3.html#module-sqlite3).139140Добавлено в версии 3.6.141142#### `--disable-ipv6`143144Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль [`socket`](https://python-all.ru/3.15/library/socket.html#module-socket).145146#### `--enable-big-digits=[15|30]`147148Определить размер в битах цифр Python [`int`](https://python-all.ru/3.15/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.15/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.15/library/zoneinfo.html#zoneinfo.TZPATH). См. [конфигурацию времени компиляции](https://python-all.ru/3.15/library/zoneinfo.html#zoneinfo-data-compile-time-config) модуля [`zoneinfo`](https://python-all.ru/3.15/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.15/library/os.html#os.pathsep).171172Добавлено в версии 3.9.173174#### `--without-decimal-contextvar`175176Сборка модуля расширения `_decimal` с контекстом, локальным для потока, а не с контекстом, локальным для корутины (по умолчанию). См. модуль [`decimal`](https://python-all.ru/3.15/library/decimal.html#module-decimal).177178См. [`decimal.HAVE_CONTEXTVAR`](https://python-all.ru/3.15/library/decimal.html#decimal.HAVE_CONTEXTVAR) и модуль [`contextvars`](https://python-all.ru/3.15/library/contextvars.html#module-contextvars).179180Добавлено в версии 3.9.181182#### `--with-dbmliborder=<list of backend names>`183184Переопределяет порядок проверки бэкендов БД для модуля [`dbm`](https://python-all.ru/3.15/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.15/using/cmdline.html#envvar-PYTHONCOERCECLOCALE) и [**PEP 538**](https://python-all.ru/3.15/using/configure.html).199200#### `--with-platlibdir=DIRNAME`201202Имя каталога библиотек Python (по умолчанию `lib`).203204Fedora и SuSE используют `lib64` на 64-разрядных платформах.205206См. [`sys.platlibdir`](https://python-all.ru/3.15/library/sys.html#sys.platlibdir).207208Добавлено в версии 3.9.209210#### `--with-wheel-pkg-dir=PATH`211212Каталог пакетов wheel, используемых модулем [`ensurepip`](https://python-all.ru/3.15/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.15/using/configure.html), содержащему пользовательские сообщения об ошибках для отсутствующих модулей [стандартной библиотеки](https://python-all.ru/3.15/glossary.html#term-standard-library).231232Эта опция предназначена для распространителей Python, желающих предоставлять специфичные для дистрибутива рекомендации, когда пользователи сталкиваются с модулями стандартной библиотеки, которые отсутствуют или упакованы отдельно.233234JSON-файл должен сопоставлять имена отсутствующих модулей со строками пользовательских сообщений об ошибках. Например, если дистрибутив распространяет [`tkinter`](https://python-all.ru/3.15/library/tkinter.html#module-tkinter) и [`_tkinter`](https://python-all.ru/3.15/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.15/using/cmdline.html#cmdoption-X).257- Добавляет переменную окружения `PYTHONSTATS`.258- Определяет макрос `Py_STATS`.259- Добавляет функции в модуль [`sys`](https://python-all.ru/3.15/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.15/glossary.html#term-global-interpreter-lock) (GIL): [сборка без блокировок](https://python-all.ru/3.15/glossary.html#term-free-threaded-build).307308Определяет макрос `Py_GIL_DISABLED` и добавляет `"t"` в\\n[`sys.abiflags`](https://python-all.ru/3.15/library/sys.html#sys.abiflags).309310Подробнее см. [Free-threaded CPython](https://python-all.ru/3.15/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.15/whatsnew/3.14.html#whatsnew314-jit-compiler).317318- `no`: Не собирать JIT.319- `yes`: Включить JIT. Чтобы отключить его во время выполнения, установите переменную окружения [`PYTHON_JIT=0`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHON_JIT).320- `yes-off`: Собрать JIT, но по умолчанию отключить его. Чтобы включить его во время выполнения, установите переменную окружения [`PYTHON_JIT=1`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHON_JIT).321- `interpreter`: Включить «JIT-интерпретатор» (полезно только для отладки самого JIT). Чтобы отключить его во время выполнения, установите переменную окружения [`PYTHON_JIT=0`](https://python-all.ru/3.15/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.15/library/select.html#select.epoll) не будет присутствовать, даже если система предоставляет функцию *[epoll\_create](https://python-all.ru/3.15/using/configure.html)*. Это может быть использовано в системах, где *epoll\_create* или *[epoll\_create1](https://python-all.ru/3.15/using/configure.html)* доступен, но несовместим с семантикой Linux.344345Добавлено в версии 3.15.346347### 3.3.2. Параметры компилятора C348349#### `CC`350351Команда компилятора C.352353#### `CFLAGS`354355Флаги компилятора C.356357#### `CPP`358359Команда препроцессора C.360361#### `CPPFLAGS`362363Флаги препроцессора C, например `-Iinclude_dir`.364365### 3.3.3. Параметры компоновщика366367#### `LDFLAGS`368369Флаги компоновщика, например `-Llibrary_directory`.370371#### `LIBS`372373Библиотеки для передачи компоновщику, например `-llibrary`.374375#### `MACHDEP`376377Имя для машинно-зависимых файлов библиотек.378379### 3.3.4. Параметры для сторонних зависимостей380381Добавлено в версии 3.12.382383#### `BZIP2_CFLAGS`384385#### `BZIP2_LIBS`386387Флаги компилятора C и компоновщика для связывания Python с `libbz2`, используемые модулем [`bz2`](https://python-all.ru/3.15/library/bz2.html#module-bz2), переопределяющие `pkg-config`.388389#### `CURSES_CFLAGS`390391#### `CURSES_LIBS`392393Флаги компилятора C и компоновщика для `libncurses` или `libncursesw`, используемые модулем [`curses`](https://python-all.ru/3.15/library/curses.html#module-curses), переопределяющие `pkg-config`.394395#### `GDBM_CFLAGS`396397#### `GDBM_LIBS`398399Флаги компилятора C и компоновщика для `gdbm`.400401#### `LIBEDIT_CFLAGS`402403#### `LIBEDIT_LIBS`404405Флаги компилятора C и компоновщика для `libedit`, используемые модулем [`readline`](https://python-all.ru/3.15/library/readline.html#module-readline), переопределяющие `pkg-config`.406407#### `LIBFFI_CFLAGS`408409#### `LIBFFI_LIBS`410411Флаги компилятора C и компоновщика для `libffi`, используемые модулем [`ctypes`](https://python-all.ru/3.15/library/ctypes.html#module-ctypes), переопределяющие `pkg-config`.412413#### `LIBMPDEC_CFLAGS`414415#### `LIBMPDEC_LIBS`416417Флаги компилятора C и компоновщика для `libmpdec`, используемые модулем [`decimal`](https://python-all.ru/3.15/library/decimal.html#module-decimal), переопределяющие `pkg-config`.418419> **Примечание**420>421> Эти переменные окружения не действуют, если не указан [`--with-system-libmpdec`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-system-libmpdec).422423#### `LIBLZMA_CFLAGS`424425#### `LIBLZMA_LIBS`426427Флаги компилятора C и компоновщика для `liblzma`, используемые модулем [`lzma`](https://python-all.ru/3.15/library/lzma.html#module-lzma), переопределяющие `pkg-config`.428429#### `LIBREADLINE_CFLAGS`430431#### `LIBREADLINE_LIBS`432433Флаги компилятора C и компоновщика для `libreadline`, используемые модулем [`readline`](https://python-all.ru/3.15/library/readline.html#module-readline), переопределяющие `pkg-config`.434435#### `LIBSQLITE3_CFLAGS`436437#### `LIBSQLITE3_LIBS`438439Флаги компилятора C и компоновщика для `libsqlite3`, используемые модулем [`sqlite3`](https://python-all.ru/3.15/library/sqlite3.html#module-sqlite3), переопределяющие `pkg-config`.440441#### `LIBUUID_CFLAGS`442443#### `LIBUUID_LIBS`444445Флаги компилятора C и компоновщика для `libuuid`, используемые модулем [`uuid`](https://python-all.ru/3.15/library/uuid.html#module-uuid), переопределяющие `pkg-config`.446447#### `LIBZSTD_CFLAGS`448449#### `LIBZSTD_LIBS`450451Флаги компилятора C и компоновщика для `libzstd`, используемые модулем [`compression.zstd`](https://python-all.ru/3.15/library/compression.zstd.html#module-compression.zstd), переопределяющие `pkg-config`.452453Добавлено в версии 3.14.454455#### `PANEL_CFLAGS`456457#### `PANEL_LIBS`458459Флаги компилятора C и компоновщика для PANEL, переопределяющие `pkg-config`.460461Флаги компилятора C и компоновщика для `libpanel` или `libpanelw`, используемые модулем [`curses.panel`](https://python-all.ru/3.15/library/curses.panel.html#module-curses.panel), переопределяющие `pkg-config`.462463#### `TCLTK_CFLAGS`464465#### `TCLTK_LIBS`466467Флаги компилятора C и компоновщика для TCLTK, переопределяющие `pkg-config`.468469#### `ZLIB_CFLAGS`470471#### `ZLIB_LIBS`472473Флаги компилятора C и компоновщика для `libzlib`, используемые модулем [`gzip`](https://python-all.ru/3.15/library/gzip.html#module-gzip), переопределяющие `pkg-config`.474475### 3.3.5. Параметры WebAssembly476477#### `--enable-wasm-dynamic-linking`478479Включить поддержку динамической компоновки для WASM.480481Динамическая компоновка включает `dlopen`. Размер исполняемого файла увеличивается из-за ограниченного удаления мёртвого кода и дополнительных возможностей.482483Добавлено в версии 3.12.484485#### `--enable-wasm-pthreads`486487Включить поддержку pthreads для WASM.488489Добавлено в версии 3.12.490491### 3.3.6. Параметры установки492493#### `--prefix=PREFIX`494495Устанавливает архитектурно-независимые файлы в PREFIX. В Unix по умолчанию используется `/usr/local`.496497Это значение можно получить во время выполнения с помощью [`sys.prefix`](https://python-all.ru/3.15/library/sys.html#sys.prefix).498499Например, можно использовать `--prefix="$HOME/.local/"` для установки Python в домашний каталог.500501#### `--exec-prefix=EPREFIX`502503Устанавливает архитектурно-зависимые файлы в EPREFIX, по умолчанию [`--prefix`](https://python-all.ru/3.15/using/configure.html#cmdoption-prefix).504505Это значение можно получить во время выполнения с помощью [`sys.exec_prefix`](https://python-all.ru/3.15/library/sys.html#sys.exec_prefix).506507#### `--disable-test-modules`508509Не собирать и не устанавливать тестовые модули, такие как пакет [`test`](https://python-all.ru/3.15/library/test.html#module-test) или модуль расширения `_testcapi` (собирается и устанавливается по умолчанию).510511Добавлено в версии 3.10.512513#### `--with-ensurepip=[upgrade|install|no]`514515Выбирает команду [`ensurepip`](https://python-all.ru/3.15/library/ensurepip.html#module-ensurepip), запускаемую при установке Python:516517- `upgrade` (по умолчанию): запустить команду `python -m ensurepip --altinstall --upgrade` .518- `install`: запустить команду `python -m ensurepip --altinstall`;519- `no`: не запускать ensurepip;520521Добавлено в версии 3.6.522523### 3.3.7. Параметры производительности524525Для достижения максимальной производительности рекомендуется настраивать Python с помощью `--enable-optimizations --with-lto` (PGO + LTO). Экспериментальный флаг `--enable-bolt` также можно использовать для повышения производительности.526527#### `--enable-optimizations`528529Включает профильную оптимизацию (PGO) с помощью [`PROFILE_TASK`](https://python-all.ru/3.15/using/configure.html#envvar-PROFILE_TASK) (по умолчанию отключено).530531Компилятору Clang требуется программа `llvm-profdata` для PGO. На macOS она также требуется GCC: GCC – это просто псевдоним Clang на macOS.532533Также отключает семантическое переопределение символов в libpython, если используются `--enable-shared` и GCC: добавьте `-fno-semantic-interposition` в флаги компилятора и компоновщика.534535> **Примечание**536>537> В процессе сборки могут появляться предупреждения компилятора о недоступности данных профиля для некоторых исходных файлов. Эти предупреждения безвредны, так как при сборе данных профиля выполняется лишь часть кода. Чтобы отключить эти предупреждения в Clang, вручную подавите их, добавив `-Wno-profile-instr-unprofiled` к [`CFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS).538539Добавлено в версии 3.6.540541Изменено в версии 3.10: Используйте `-fno-semantic-interposition` в GCC.542543#### `PROFILE_TASK`544545Переменная окружения, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.546547По умолчанию: `-m test --pgo --timeout=$(TESTTIMEOUT)`.548549Добавлено в версии 3.8.550551Изменено в версии 3.13: Сбой задачи больше не игнорируется без уведомления.552553#### `--with-lto=[full|thin|no|yes]`554555Включает оптимизацию во время компоновки (LTO) в любой сборке (по умолчанию отключено).556557Компилятору Clang требуется `llvm-ar` для LTO (`ar` в macOS), а также компоновщик, поддерживающий LTO (`ld.gold` или `lld`).558559Добавлено в версии 3.6.560561Добавлено в версии 3.11: Для использования функции ThinLTO используйте `--with-lto=thin` в Clang.562563Изменено в версии 3.12: Используйте ThinLTO в качестве политики оптимизации по умолчанию в Clang, если компилятор поддерживает этот флаг.564565#### `--enable-bolt`566567Включает использование [оптимизатора бинарных файлов после компоновки BOLT](https://python-all.ru/3.15/using/configure.html) (по умолчанию отключено).568569BOLT является частью проекта LLVM, но не всегда входит в их бинарные дистрибутивы. Этот флаг требует наличия `llvm-bolt` и `merge-fdata`.570571BOLT – всё ещё относительно новый проект, поэтому этот флаг пока следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успех зависит от комбинации окружения сборки, других аргументов конфигурации оптимизации и архитектуры CPU, и не все комбинации поддерживаются. Известно, что версии BOLT до LLVM 16 аварийно завершаются в некоторых сценариях. Настоятельно рекомендуется использовать LLVM 16 или новее для оптимизации BOLT.572573Переменные `BOLT_INSTRUMENT_FLAGS` и `BOLT_APPLY_FLAGS` **configure** можно определить, чтобы переопределить набор аргументов по умолчанию для **llvm-bolt** для инструментирования и применения данных BOLT к бинарным файлам соответственно.574575Добавлено в версии 3.12.576577#### `BOLT_APPLY_FLAGS`578579Аргументы для `llvm-bolt` при создании [оптимизированного BOLT бинарного файла](https://python-all.ru/3.15/using/configure.html).580581Добавлено в версии 3.12.582583#### `BOLT_INSTRUMENT_FLAGS`584585Аргументы для `llvm-bolt` при инструментировании бинарных файлов.586587Добавлено в версии 3.12.588589#### `--with-computed-gotos`590591Включает вычисляемые переходы в цикле вычислений (включено по умолчанию на поддерживаемых компиляторах).592593#### `--with-tail-call-interp`594595Включает интерпретаторы, использующие хвостовые вызовы в CPython. Если эта опция включена, настоятельно рекомендуется также включить PGO ([`--enable-optimizations`](https://python-all.ru/3.15/using/configure.html#cmdoption-enable-optimizations)). Эта опция требует компилятор C с поддержкой хвостовых вызовов и соглашения о вызовах [preserve\_none](https://python-all.ru/3.15/using/configure.html). Например, Clang 19 и новее поддерживает эту функцию.596597Добавлено в версии 3.14.598599#### `--without-frame-pointers`600601Отключает указатели фреймов, которые включены по умолчанию (см. [**PEP 831**](https://python-all.ru/3.15/using/configure.html)).602603По умолчанию сборка добавляет флаги для генерации указателей фреймов или обратной цепочки к `BASECFLAGS`:604605- `-fno-omit-frame-pointer` и/или `-mno-omit-leaf-frame-pointer` добавляются, если компилятор их поддерживает.606- `-marm` и/или `-mno-thumb` добавляется на 32-битной ARM при поддержке,607- на платформах s390x, при поддержке, `-mbackchain` добавляется *вместо*. указанных выше флагов указателей фреймов.608- на платформах ppc64le флаги компилятора не требуются, так как ABI Power требует, чтобы компиляторы по умолчанию поддерживали обратную цепочку.609610Указатели фреймов позволяют профилировщикам, отладчикам и системным инструментам трассировки (`perf`, `eBPF`, `dtrace`, `gdb`) обходить стек вызовов C без метаданных DWARF. Эти флаги передаются сторонним расширениям C через [`sysconfig`](https://python-all.ru/3.15/library/sysconfig.html#module-sysconfig). На компиляторах, которые их не понимают, сборка молча их пропускает.611612Распространителям пакетов и авторам нативных библиотек, собираемых с помощью пользовательских систем сборки, следует устанавливать те же флаги, чтобы цепочка размотки оставалась непрерывной во всех нативных фреймах.613614Добавлено в версии 3.15.615616#### `--without-mimalloc`617618Отключает быстрый распределитель [mimalloc](https://python-all.ru/3.15/c-api/memory.html#mimalloc) (включён по умолчанию).619620Эту опцию нельзя использовать вместе с [`--disable-gil`](https://python-all.ru/3.15/using/configure.html#cmdoption-disable-gil), так как [сборка без GIL](https://python-all.ru/3.15/glossary.html#term-free-threading) требует mimalloc.621622См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHONMALLOC).623624#### `--without-pymalloc`625626Отключает специализированный распределитель памяти Python [pymalloc](https://python-all.ru/3.15/c-api/memory.html#pymalloc) (включён по умолчанию).627628См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHONMALLOC).629630#### `--with-pymalloc-hugepages`631632Включает поддержку больших страниц для арен [pymalloc](https://python-all.ru/3.15/c-api/memory.html#pymalloc) (отключено по умолчанию). При включении размер арены на 64-битных платформах увеличивается до 2 МиБ, и для выделения арен используется `MAP_HUGETLB` (Linux) или `MEM_LARGE_PAGES` (Windows) с автоматическим возвратом к обычным страницам.633634Даже если сборка выполнена с этим параметром, большие страницы **не** используются во время выполнения, пока переменная окружения [`PYTHON_PYMALLOC_HUGEPAGES`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHON_PYMALLOC_HUGEPAGES) не установлена в `1`. Этот добровольный выбор необходим, потому что большие страницы635636- несут риски в Linux: если пул больших страниц исчерпан, сбои страниц (включая сбои копирования при записи после [`os.fork()`](https://python-all.ru/3.15/library/os.html#os.fork)) приводят к `SIGBUS` и убивают процесс.637- требуют специальных привилегий в Windows. Подробнее см. [документацию Windows по большим страницам](https://python-all.ru/3.15/using/configure.html). Python завершится ошибкой при запуске, если у пользователя нет необходимой привилегии [SeLockMemoryPrivilege](https://python-all.ru/3.15/using/configure.html).638639Скрипт configure проверяет, поддерживает ли платформа `MAP_HUGETLB`, и выводит предупреждение, если это не так.640641В Windows используйте флаг `--pymalloc-hugepages` с `build.bat` или установите свойство MSBuild `UsePymallocHugepages`.642643Добавлено в версии 3.15.644645#### `--without-doc-strings`646647Отключает статические строки документации для уменьшения потребления памяти (включено по умолчанию). Строки документации, определённые в Python, не затрагиваются.648649Не определять макрос `WITH_DOC_STRINGS`.650651См. макрос `PyDoc_STRVAR()`.652653#### `--enable-profiling`654655Включает профилирование кода на уровне C с помощью `gprof` (отключено по умолчанию).656657#### `--with-strict-overflow`658659Добавляет `-fstrict-overflow` в флаги компилятора C (по умолчанию добавляется `-fno-strict-overflow`).660661#### `--without-remote-debug`662663Отключает поддержку удаленной отладки, описанную в [**PEP 768**](https://python-all.ru/3.15/using/configure.html) (включена по умолчанию). Когда этот флаг указан, код, который позволяет интерпретатору планировать выполнение файла Python в отдельном процессе, как описано в [**PEP 768**](https://python-all.ru/3.15/using/configure.html), не компилируется. Это включает как функциональность для планирования выполняемого кода, так и функциональность для получения кода для выполнения.664665#### `Py_REMOTE_DEBUG`666667Этот макрос определяется по умолчанию, если Python не сконфигурирован с [`--without-remote-debug`](https://python-all.ru/3.15/using/configure.html#cmdoption-without-remote-debug).668669Обратите внимание, что даже если макрос определён, удаленная отладка может быть недоступна (например, на несовместимой платформе).670671Добавлено в версии 3.14.672673### 3.3.8. Отладочная сборка Python674675Отладочная сборка – это Python, собранный с опцией конфигурации [`--with-pydebug`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-pydebug).676677Эффекты отладочной сборки:678679- Показывать все предупреждения по умолчанию: список фильтров предупреждений по умолчанию пуст в модуле [`warnings`](https://python-all.ru/3.15/library/warnings.html#module-warnings).680- Добавляет `d` в [`sys.abiflags`](https://python-all.ru/3.15/library/sys.html#sys.abiflags).681- Добавляет функцию `sys.gettotalrefcount()`.682- Добавляет опцию командной строки [`-X showrefcount`](https://python-all.ru/3.15/using/cmdline.html#cmdoption-X).683- Добавляет опцию командной строки [`-d`](https://python-all.ru/3.15/using/cmdline.html#cmdoption-d) и переменную окружения [`PYTHONDEBUG`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHONDEBUG) для отладки парсера.684- Добавляет поддержку переменной `__lltrace__`: включение низкоуровневой трассировки в цикле выполнения байт-кода, если переменная определена.685- Устанавливает [отладочные привязки на распределители памяти](https://python-all.ru/3.15/c-api/memory.html#default-memory-allocators) для обнаружения переполнения буфера и других ошибок памяти.686- Определяет макросы `Py_DEBUG` и `Py_REF_DEBUG`.687- Добавляет проверки времени выполнения: код, окружённый `#ifdef Py_DEBUG` и `#endif`. Включает утверждения `assert(...)` и `_PyObject_ASSERT(...)`: не устанавливайте макрос `NDEBUG` (см. также опцию конфигурации [`--with-assertions`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-assertions)). Основные проверки времени выполнения:688689 - Добавляет проверки корректности аргументов функций.690 - Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неинициализированных объектов.691 - Гарантирует, что функции, которые могут очистить или заменить текущее исключение, не вызываются при возникшем исключении.692 - Проверяется, что функции деаллокации не изменяют текущее исключение.693 - Сборщик мусора (функция [`gc.collect()`](https://python-all.ru/3.15/library/gc.html#gc.collect)) выполняет базовые проверки корректности объектов.694 - Макрос `Py_SAFE_DOWNCAST()` проверяет целочисленное переполнение (underflow и overflow) при понижающем приведении от широких типов к узким.695696См. также [режим разработки Python](https://python-all.ru/3.15/library/devmode.html#devmode) и опцию конфигурации [`--with-trace-refs`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-trace-refs).697698Изменено в версии 3.8: Релизные сборки теперь совместимы по ABI с отладочными: определение макроса `Py_DEBUG` больше не подразумевает макрос `Py_TRACE_REFS` (см. опцию [`--with-trace-refs`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-trace-refs)). Однако отладочные сборки по-прежнему экспортируют больше символов, чем релизные, и код, собранный для отладочной сборки, не обязательно совместим с релизной.699700### 3.3.9. Отладочные опции701702#### `--with-pydebug`703704[Собрать Python в отладочном режиме](https://python-all.ru/3.15/using/configure.html#debug-build): определяет макрос `Py_DEBUG` (отключён по умолчанию).705706#### `--with-trace-refs`707708Включает отслеживание ссылок для целей отладки (отключено по умолчанию).709710Эффекты:711712- Определяет макрос `Py_TRACE_REFS`.713- Добавляет функцию [`sys.getobjects()`](https://python-all.ru/3.15/library/sys.html#sys.getobjects).714- Добавляет переменную окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHONDUMPREFS).715716Переменная окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.15/using/cmdline.html#envvar-PYTHONDUMPREFS) может использоваться для дампа объектов и счётчиков ссылок, остающихся активными при завершении Python.717718[Статически размещённые объекты](https://python-all.ru/3.15/c-api/typeobj.html#static-types) не отслеживаются.719720Добавлено в версии 3.8.721722Изменено в версии 3.13: Эта сборка теперь совместима по ABI с релизной сборкой и [отладочной сборкой](https://python-all.ru/3.15/using/configure.html#debug-build).723724#### `--with-assertions`725726Сборка с включёнными C-утверждениями (по умолчанию нет): `assert(...);` и `_PyObject_ASSERT(...);`.727728Если установлен, макрос `NDEBUG` не определяется в переменной компилятора [`OPT`](https://python-all.ru/3.15/using/configure.html#envvar-OPT).729730См. также опцию [`--with-pydebug`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-pydebug) ([отладочная сборка](https://python-all.ru/3.15/using/configure.html#debug-build)), которая также включает утверждения.731732Добавлено в версии 3.6.733734#### `--with-valgrind`735736Включить поддержку Valgrind (по умолчанию нет).737738#### `--with-dtrace`739740Включить поддержку DTrace (по умолчанию нет).741742См. [Инструментирование CPython с помощью DTrace и SystemTap](https://python-all.ru/3.15/howto/instrumentation.html#instrumentation).743744Добавлено в версии 3.6.745746#### `--with-address-sanitizer`747748Включить детектор ошибок памяти AddressSanitizer, `asan` (по умолчанию нет). Чтобы улучшить возможности обнаружения ASan, можно также объединить это с [`--without-pymalloc`](https://python-all.ru/3.15/using/configure.html#cmdoption-without-pymalloc) для отключения специализированного аллокатора малых объектов, чьи выделения не отслеживаются ASan.749750Добавлено в версии 3.6.751752#### `--with-memory-sanitizer`753754Включить детектор ошибок выделения памяти MemorySanitizer, `msan` (по умолчанию нет).755756Добавлено в версии 3.6.757758#### `--with-undefined-behavior-sanitizer`759760Включить детектор неопределённого поведения UndefinedBehaviorSanitizer, `ubsan` (по умолчанию нет).761762Добавлено в версии 3.6.763764#### `--with-thread-sanitizer`765766Включает детектор гонок данных ThreadSanitizer, `tsan` (по умолчанию выключено).767768Добавлено в версии 3.13.769770### 3.3.10. Параметры компоновщика771772#### `--enable-shared`773774Включает сборку разделяемой библиотеки Python: `libpython` (по умолчанию выключено).775776#### `--without-static-libpython`777778Не собирать `libpythonMAJOR.MINOR.a` и не устанавливать `python.o` (собирается и устанавливается по умолчанию).779780Добавлено в версии 3.10.781782#### `--enable-static-libpython-for-interpreter`783784Двоичный файл интерпретатора Python (`python3`) не связывается с общей библиотекой Python; вместо этого интерпретатор статически связывается с `libpython`, как если бы `--enable-shared` не использовался, но общая `libpython` продолжает собираться (для использования другими программами).785786Эта опция ничего не делает, если `--enable-shared` не используется.787788По умолчанию (когда `-enable-shared` используется) интерпретатор Python связывается с собранной общей библиотекой.789790Добавлено в версии 3.15.791792### 3.3.11. Параметры библиотек793794#### `--with-libs='lib1 ...'`795796Линковаться с дополнительными библиотеками (по умолчанию нет).797798#### `--with-system-expat`799800Собирать модуль `pyexpat`, используя установленную библиотеку `expat` (по умолчанию нет).801802#### `--with-system-libmpdec`803804Собирать модуль расширения `_decimal`, используя установленную библиотеку `mpdecimal` , см. модуль [`decimal`](https://python-all.ru/3.15/library/decimal.html#module-decimal) (по умолчанию включено).805806Добавлено в версии 3.3.807808Изменено в версии 3.13: По умолчанию используется установленная библиотека `mpdecimal`.809810Изменено в версии 3.15: Встроенная копия библиотеки больше не будет выбираться неявно, если установленная библиотека `mpdecimal` не найдена. Только в Python 3.15 её можно явно выбрать с помощью `--with-system-libmpdec=no` или `--without-system-libmpdec`.811812Устарело с версии 3.13, будет удалено в версии 3.16: Копия исходных кодов библиотеки `mpdecimal` больше не будет распространяться с Python 3.16.813814> **См. также**815>816> [`LIBMPDEC_CFLAGS`](https://python-all.ru/3.15/using/configure.html#cmdoption-arg-LIBMPDEC_CFLAGS) и [`LIBMPDEC_LIBS`](https://python-all.ru/3.15/using/configure.html#cmdoption-arg-LIBMPDEC_LIBS).817818#### `--with-readline=readline|editline`819820Назначить библиотеку-бэкенд для модуля [`readline`](https://python-all.ru/3.15/library/readline.html#module-readline).821822- readline: использовать readline в качестве бэкенда.823- editline: использовать editline в качестве бэкенда.824825Добавлено в версии 3.10.826827#### `--without-readline`828829Не собирать модуль [`readline`](https://python-all.ru/3.15/library/readline.html#module-readline) (собирается по умолчанию).830831Не определять макрос `HAVE_LIBREADLINE`.832833Добавлено в версии 3.10.834835#### `--with-libm=STRING`836837Переопределить математическую библиотеку `libm` на *STRING* (по умолчанию зависит от системы).838839#### `--with-libc=STRING`840841Переопределить библиотеку C `libc` на *STRING* (по умолчанию зависит от системы).842843#### `--with-openssl=DIR`844845Корневой каталог OpenSSL.846847Добавлено в версии 3.7.848849#### `--with-openssl-rpath=[no|auto|DIR]`850851Задать каталог библиотек времени выполнения (rpath) для библиотек OpenSSL:852853- `no` (по умолчанию): не устанавливать rpath;854- `auto`: автоматически определять rpath из [`--with-openssl`](https://python-all.ru/3.15/using/configure.html#cmdoption-with-openssl) и `pkg-config`;855- *DIR*: указать явный rpath.856857Добавлено в версии 3.10.858859### 3.3.12. Параметры безопасности860861#### `--with-hash-algorithm=[fnv|siphash13|siphash24]`862863Выберите алгоритм хеширования для использования в `Python/pyhash.c`:864865- `siphash13` (по умолчанию);866- `siphash24`;867- `fnv`.868869Добавлено в версии 3.4.870871Добавлено в версии 3.11: `siphash13` добавлен и стал новым значением по умолчанию.872873#### `--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2`874875Встроенные хеш-модули:876877- `md5`;878- `sha1`;879- `sha256`;880- `sha512`;881- `sha3` (с shake);882- `blake2`.883884Добавлено в версии 3.9.885886#### `--with-ssl-default-suites=[python|openssl|STRING]`887888Переопределить строку наборов шифров OpenSSL по умолчанию:889890- `python` (по умолчанию): использовать предпочтительный выбор Python;891- `openssl`: оставить настройки OpenSSL по умолчанию без изменений;892- *STRING*: использовать произвольную строку893894См. модуль [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl).895896Добавлено в версии 3.7.897898Изменено в версии 3.10: Настройки `python` и *STRING* также устанавливают TLS 1.2 в качестве минимальной версии протокола.899900#### `--disable-safety`901902Отключает параметры компилятора, которые [рекомендуются OpenSSF](https://python-all.ru/3.15/using/configure.html) из соображений безопасности без потери производительности. Если эта опция не включена, CPython будет собран с использованием безопасных параметров компилятора без замедления. Если эта опция включена, CPython не будет собран с параметрами компилятора, перечисленными ниже.903904Следующие параметры компилятора отключаются с помощью `--disable-safety`:905906- [-fstack-protector-strong](https://python-all.ru/3.15/using/configure.html): Включает проверки времени выполнения для переполнения буфера на стеке.907- [-Wtrampolines](https://python-all.ru/3.15/using/configure.html): Включает предупреждения о трамплинах, требующих исполняемых стеков.908909Добавлено в версии 3.14.910911#### `--enable-slower-safety`912913Включает параметры компилятора, которые [рекомендуются OpenSSF](https://python-all.ru/3.15/using/configure.html) из соображений безопасности, но требуют дополнительных затрат производительности. Если эта опция не включена, CPython не будет собран с использованием безопасных параметров компилятора, влияющих на производительность. Если эта опция включена, CPython будет собран с параметрами компилятора, перечисленными ниже.914915Следующие параметры компилятора включаются с помощью `--enable-slower-safety`:916917- [-D\_FORTIFY\_SOURCE=3](https://python-all.ru/3.15/using/configure.html): Укрепляет исходный код с помощью проверок во время компиляции и выполнения на предмет небезопасного использования libc и переполнения буфера.918919Добавлено в версии 3.14.920921### 3.3.13. Параметры macOS922923См. [Mac/README.rst](https://python-all.ru/src/3.15/Mac/README.rst).924925#### `--enable-universalsdk`926927#### `--enable-universalsdk=SDKDIR`928929Создание универсальной сборки двоичного файла. *SDKDIR* указывает, какой macOS SDK следует использовать для сборки (по умолчанию нет).930931#### `--enable-framework`932933#### `--enable-framework=INSTALLDIR`934935Создаёт Python.framework вместо традиционной установки в Unix. Необязательный *INSTALLDIR* определяет путь установки (по умолчанию – нет).936937#### `--with-universal-archs=ARCH`938939Определяет тип универсального бинарного файла, который будет создан. Этот параметр работает, только если указан [`--enable-universalsdk`](https://python-all.ru/3.15/using/configure.html#cmdoption-enable-universalsdk).940941Варианты:942943- `universal2` (x86-64 и arm64);944- `32-bit` (PPC и i386);945- `64-bit` (PPC64 и x86-64);946- `3-way` (i386, PPC и x86-64);947- `intel` (i386 и x86-64);948- `intel-32` (i386);949- `intel-64` (x86-64);950- `all` (PPC, i386, PPC64 и x86-64).951952Обратите внимание: значения этого параметра конфигурации *не* совпадают с идентификаторами, используемыми для универсальных бинарных колец (wheels) в macOS. Подробнее о [тегах совместимости платформы упаковки, используемых в macOS,](https://python-all.ru/3.15/using/configure.html) см. в Python Packaging User Guide.953954#### `--with-framework-name=FRAMEWORK`955956Задаёт имя для python framework в macOS. Работает только при указанном [`--enable-framework`](https://python-all.ru/3.15/using/configure.html#cmdoption-enable-framework) (по умолчанию: `Python`).957958#### `--with-app-store-compliance`959960#### `--with-app-store-compliance=PATCH-FILE`961962Стандартная библиотека Python содержит строки, которые, как известно, вызывают ошибки автоматических инструментов проверки при отправке на распространение через App Store macOS и iOS. Если этот параметр включён, будет применён список исправлений, которые устраняют несоответствия требованиям магазинов приложений. Можно также указать собственный файл исправлений. По умолчанию этот параметр отключён.963964Добавлено в версии 3.13.965966### 3.3.14. Параметры iOS967968См. [iOS/README.rst](https://python-all.ru/3.15/using/configure.html).969970#### `--enable-framework=INSTALLDIR`971972Создаёт Python.framework. В отличие от macOS, аргумент *INSTALLDIR*, указывающий путь установки, обязателен.973974#### `--with-framework-name=FRAMEWORK`975976Задаёт имя для framework (по умолчанию: `Python`).977978### 3.3.15. Параметры кросс-компиляции979980Кросс-компиляция (также известная как кросс-сборка) используется для сборки Python под другую архитектуру CPU или платформу. Для кросс-компиляции требуется интерпретатор Python для платформы сборки. Версия Python для сборки должна совпадать с версией Python для целевой платформы, скомпилированной кросс-компилятором.981982#### `--build=BUILD`983984настройка для сборки на платформе BUILD, обычно определяется с помощью **config.guess**.985986#### `--host=HOST`987988кросс-компиляция для сборки программ, выполняемых на HOST (целевая платформа)989990#### `--with-build-python=path/to/python`991992путь к `python` двоичному файлу для кросс-компиляции993994Добавлено в версии 3.12.995996#### `CONFIG_SITE=file`997998Переменная окружения, указывающая на файл с переопределениями configure.9991000Пример файла *config.site*:10011002```ini1003# config.site-aarch641004ac_cv_buggy_getaddrinfo=no1005ac_cv_file__dev_ptmx=yes1006ac_cv_file__dev_ptc=no1007```10081009#### `HOSTRUNNER`10101011Программа, запускающая CPython на хост-платформе для кросс-компиляции.10121013Добавлено в версии 3.12.10141015Пример кросс-компиляции:10161017```sh1018CONFIG_SITE=config.site-aarch64 ../configure \1019 --build=x86_64-pc-linux-gnu \1020 --host=aarch64-unknown-linux-gnu \1021 --with-build-python=../x86_64/python1022```10231024## 3.4. Система сборки Python10251026### 3.4.1. Основные файлы системы сборки10271028- `configure.ac` =\> `configure`;1029- `Makefile.pre.in` =\> `Makefile` (создаётся с помощью `configure`);1030- `pyconfig.h` (создаётся с помощью `configure`);1031- `Modules/Setup`: расширения на C, собираемые Makefile с помощью `Module/makesetup` shell-скрипта;10321033### 3.4.2. Основные этапы сборки10341035- C-файлы (`.c`) компилируются в объектные файлы (`.o`).1036- Статическая библиотека `libpython` (`.a`) создаётся из объектных файлов.1037- `python.o` и статическая библиотека `libpython` компонуются в итоговую программу `python`.1038- Расширения на C собираются с помощью Makefile (см. `Modules/Setup`).10391040### 3.4.3. Основные цели Makefile10411042#### 3.4.3.1. make10431044В большинстве случаев при пересборке после редактирования кода или обновления локальной копии из вышестоящего репозитория достаточно просто выполнить `make`, которая (согласно семантике Make) собирает цель по умолчанию – первую, определённую в Makefile. По традиции (в том числе в проекте CPython) это обычно цель `all`. Скрипт `configure` разворачивает переменную `autoconf`, `@DEF_MAKE_ALL_RULE@`, чтобы точно описать, какие цели будет собирать `make all`. Доступны три варианта:10451046- `profile-opt` (настроено с помощью `--enable-optimizations`)1047- `build_wasm` (выбирается, если хост-платформа совпадает с `wasm32-wasi*` или `wasm32-emscripten`)1048- `build_all` (настроено без явного использования других вариантов)10491050В зависимости от последних изменений исходных файлов Make пересобирает все цели (объектные файлы и исполняемые), которые считает устаревшими, включая повторный запуск `configure` при необходимости. Однако зависимости между исходниками и целями многочисленны и поддерживаются вручную, поэтому иногда Make не располагает всей информацией, необходимой для правильного обнаружения всех целей, требующих пересборки. В зависимости от того, какие цели не были пересобраны, могут возникнуть различные проблемы. Если возникают проблемы со сборкой или тестированием, которые иначе не объяснить, `make clean && make` должен решить большинство проблем с зависимостями, хотя время сборки при этом увеличится.10511052#### 3.4.3.2. make platform10531054Собрать программу `python`, но не собирать модули расширения стандартной библиотеки. В результате создаётся файл `platform`, содержащий одну строку с описанием платформы сборки, например `macosx-14.3-arm64-3.12` или `linux-x86_64-3.13`.10551056#### 3.4.3.3. make profile-opt10571058Собрать Python с профильной оптимизацией (PGO). Чтобы сделать это целью по умолчанию для команды `make`, можно использовать параметр configure [`--enable-optimizations`](https://python-all.ru/3.15/using/configure.html#cmdoption-enable-optimizations) (`make all` или просто `make`).10591060#### 3.4.3.4. make clean10611062Удалить собранные файлы.10631064#### 3.4.3.5. make distclean10651066Помимо работы, выполненной `make clean`, удалить файлы, созданные скриптом configure. Перед повторной сборкой потребуется запустить `configure`. [\[6\]](https://python-all.ru/3.15/using/configure.html#id16)10671068#### 3.4.3.6. make install10691070Собрать цель `all` и установить Python.10711072#### 3.4.3.7. make test10731074Собрать цель `all` и запустить набор тестов Python с опцией `--fast-ci` без GUI-тестов. Переменные:10751076- `TESTOPTS`: дополнительные параметры командной строки regrtest.1077- `TESTPYTHONOPTS`: дополнительные параметры командной строки Python.1078- `TESTTIMEOUT`: тайм-аут в секундах (по умолчанию: 10 минут).10791080#### 3.4.3.8. make ci10811082Это похоже на `make test`, но использует `-ugui` для запуска также GUI-тестов.10831084Добавлено в версии 3.14.10851086#### 3.4.3.9. make buildbottest10871088Это похоже на `make test`, но использует опцию `--slow-ci` и тайм-аут по умолчанию 20 минут вместо опции `--fast-ci`.10891090#### 3.4.3.10. make regen-all10911092Перегенерировать (почти) все сгенерированные файлы. Они включают (но не ограничиваются) случаи байткода и файл генератора парсера. `make regen-stdlib-module-names` и `autoconf` должны быть запущены отдельно для остальных [сгенерированных файлов](https://python-all.ru/3.15/using/configure.html#generated-files).10931094### 3.4.4. Расширения C10951096Некоторые расширения C собираются как встроенные модули, например модуль `sys`. Они собираются с определённым макросом `Py_BUILD_CORE_BUILTIN`. Встроенные модули не имеют атрибута `__file__`:10971098```pycon1099>>> import sys1100>>> sys1101<module 'sys' (built-in)>1102>>> sys.__file__1103Traceback (most recent call last):1104 File "<stdin>", line 1, in <module>1105AttributeError: module 'sys' has no attribute '__file__'1106```11071108Другие расширения C собираются как динамические библиотеки, например модуль `_asyncio`. Они собираются с определённым макросом `Py_BUILD_CORE_MODULE`. Пример на Linux x86-64:11091110```pycon1111>>> import _asyncio1112>>> _asyncio1113<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>1114>>> _asyncio.__file__1115'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'1116```11171118`Modules/Setup` используется для генерации целей Makefile для сборки расширений C. В начале файлов расширения C собираются как встроенные модули. Расширения, определённые после маркера `*shared*`, собираются как динамические библиотеки.11191120Макросы `PyAPI_FUNC()`, `PyAPI_DATA()` и [`PyMODINIT_FUNC`](https://python-all.ru/3.15/c-api/extension-modules.html#c.PyMODINIT_FUNC) из `Include/exports.h` определяются по-разному в зависимости от того, определён ли макрос `Py_BUILD_CORE_MODULE`:11211122- Используйте `Py_EXPORTED_SYMBOL`, если `Py_BUILD_CORE_MODULE` определён.1123- В противном случае используйте `Py_IMPORTED_SYMBOL`.11241125Если макрос `Py_BUILD_CORE_BUILTIN` по ошибке используется для расширения C, собранного как разделяемая библиотека, его функция `PyInit_xxx()` не экспортируется, что вызывает [`ImportError`](https://python-all.ru/3.15/library/exceptions.html#ImportError) при импорте.11261127## 3.5. Флаги компилятора и компоновщика11281129Параметры, задаваемые сценарием `./configure` и переменными окружения, и используемые `Makefile`.11301131### 3.5.1. Флаги препроцессора11321133#### `CONFIGURE_CPPFLAGS`11341135Значение переменной [`CPPFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CPPFLAGS), передаваемое сценарию `./configure`.11361137Добавлено в версии 3.6.11381139#### `CPPFLAGS`11401141(Objective) C/C++ флаги препроцессора, например `-Iinclude_dir`, если заголовочные файлы находятся в нестандартном каталоге *include\_dir*.11421143И [`CPPFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.11441145#### `BASECPPFLAGS`11461147Добавлено в версии 3.4.11481149#### `PY_CPPFLAGS`11501151Дополнительные флаги препроцессора, добавляемые при сборке объектных файлов интерпретатора.11521153По умолчанию: `$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)`.11541155Добавлено в версии 3.2.11561157### 3.5.2. Флаги компилятора11581159#### `CC`11601161Команда компилятора C.11621163Пример: `gcc -pthread`.11641165#### `CXX`11661167Команда компилятора C++.11681169Пример: `g++ -pthread`.11701171#### `CFLAGS`11721173Флаги компилятора C.11741175#### `CFLAGS_NODIST`11761177[`CFLAGS_NODIST`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS_NODIST) используется для сборки интерпретатора и расширений C из стандартной библиотеки. Используйте его, когда флаг компилятора *не* должен быть частью [`CFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS) после установки Python ([gh-65320](https://python-all.ru/3.15/using/configure.html)).11781179В частности, [`CFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS) не должен содержать:11801181- флаг компилятора `-I` (для задания пути поиска включаемых файлов). Флаги `-I` обрабатываются слева направо, и любые флаги из [`CFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS) будут иметь приоритет над `-I` флагами, предоставленными пользователем и пакетами.1182- флаги усиления защиты, такие как `-Werror`, поскольку дистрибутивы не могут контролировать, соответствуют ли установленные пользователями пакеты таким повышенным стандартам.11831184Добавлено в версии 3.5.11851186#### `COMPILEALL_OPTS`11871188Параметры, передаваемые командной строке [`compileall`](https://python-all.ru/3.15/library/compileall.html#module-compileall) при сборке PYC-файлов в `make install`. По умолчанию: `-j0`.11891190Добавлено в версии 3.12.11911192#### `EXTRA_CFLAGS`11931194Дополнительные флаги компилятора C.11951196#### `CONFIGURE_CFLAGS`11971198Значение переменной [`CFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS), передаваемое сценарию `./configure` .11991200Добавлено в версии 3.2.12011202#### `CONFIGURE_CFLAGS_NODIST`12031204Значение переменной [`CFLAGS_NODIST`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS_NODIST), передаваемое сценарию `./configure` .12051206Добавлено в версии 3.5.12071208#### `BASECFLAGS`12091210Базовые флаги компилятора.12111212#### `OPT`12131214Флаги оптимизации.12151216#### `CFLAGS_ALIASING`12171218Флаги строгого или нестрогого алиасинга, используемые для компиляции `Python/dtoa.c`.12191220Добавлено в версии 3.7.12211222#### `CFLAGS_CEVAL`12231224Флаги, используемые для компиляции `Python/ceval.c`.12251226Добавлено в версии 3.14.5.12271228#### `CCSHARED`12291230Флаги компилятора, используемые для сборки разделяемой библиотеки.12311232Например, `-fPIC` используется в Linux и BSD.12331234#### `CFLAGSFORSHARED`12351236Дополнительные флаги C, добавляемые для сборки объектных файлов интерпретатора.12371238По умолчанию: `$(CCSHARED)` при использовании [`--enable-shared`](https://python-all.ru/3.15/using/configure.html#cmdoption-enable-shared), иначе пустая строка.12391240#### `PY_CFLAGS`12411242По умолчанию: `$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)`.12431244#### `PY_CFLAGS_NODIST`12451246По умолчанию: `$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal`.12471248Добавлено в версии 3.5.12491250#### `PY_STDMODULE_CFLAGS`12511252Флаги C, используемые для сборки объектных файлов интерпретатора.12531254По умолчанию: `$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)`.12551256Добавлено в версии 3.7.12571258#### `PY_CORE_CFLAGS`12591260По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE`.12611262Добавлено в версии 3.2.12631264#### `PY_BUILTIN_MODULE_CFLAGS`12651266Флаги компилятора для сборки модуля расширения стандартной библиотеки как встроенного модуля, подобно модулю [`posix`](https://python-all.ru/3.15/library/posix.html#module-posix).12671268По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN`.12691270Добавлено в версии 3.8.12711272#### `PURIFY`12731274Команда Purify. Purify – программа для отладки памяти.12751276По умолчанию: пустая строка (не используется).12771278### 3.5.3. Флаги компоновщика12791280#### `LINKCC`12811282Команда компоновщика, используемая для сборки программ, таких как `python` и `_testembed`.12831284По умолчанию: `$(PURIFY) $(CC)`.12851286#### `CONFIGURE_LDFLAGS`12871288Значение переменной [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS), передаваемое сценарию `./configure`.12891290Избегайте присваивания [`CFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS), [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS) и т.д., чтобы пользователи могли использовать их в командной строке для добавления к этим значениям, не перезаписывая предустановленные.12911292Добавлено в версии 3.2.12931294#### `LDFLAGS_NODIST`12951296[`LDFLAGS_NODIST`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS_NODIST) используется так же, как [`CFLAGS_NODIST`](https://python-all.ru/3.15/using/configure.html#envvar-CFLAGS_NODIST). Используйте его, когда флаг компоновщика *не* должен быть частью [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS) после установки Python ([gh-65320](https://python-all.ru/3.15/using/configure.html)).12971298В частности, [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS) не должен содержать:12991300- флаг компилятора `-L` (для установки пути поиска библиотек). Флаги `-L` обрабатываются слева направо, и любые флаги в [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS) будут иметь приоритет над флагами `-L`, предоставленными пользователем или пакетом.13011302#### `CONFIGURE_LDFLAGS_NODIST`13031304Значение переменной [`LDFLAGS_NODIST`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS_NODIST), передаваемое сценарию `./configure` .13051306Добавлено в версии 3.8.13071308#### `LDFLAGS`13091310Флаги компоновщика, например, `-Llib_dir`, если библиотеки находятся в нестандартном каталоге *lib\_dir*.13111312И [`CPPFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.13131314Рекомендуется использовать `EXE_LDFLAGS`, если предоставленные флаги компоновщика относятся к конкретному исполняемому файлу, например к флагу `-pie` GCC.13151316#### `LIBS`13171318Флаги компоновщика для передачи библиотек компоновщику при компоновке исполняемого файла Python.13191320Пример: `-lrt`.13211322#### `LDSHARED`13231324Команда для сборки разделяемой библиотеки.13251326По умолчанию: `@LDSHARED@ $(PY_LDFLAGS)`.13271328#### `BLDSHARED`13291330Команда для сборки разделяемой библиотеки `libpython`.13311332По умолчанию: `@BLDSHARED@ $(PY_CORE_LDFLAGS)`.13331334#### `PY_LDFLAGS`13351336По умолчанию: `$(CONFIGURE_LDFLAGS) $(LDFLAGS)`.13371338#### `PY_LDFLAGS_NODIST`13391340По умолчанию: `$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)`.13411342Добавлено в версии 3.8.13431344#### `PY_CORE_LDFLAGS`13451346Флаги компоновщика, используемые для сборки объектных файлов интерпретатора.13471348Добавлено в версии 3.8.13491350#### `EXE_LDFLAGS`13511352Флаги компоновщика, используемые для сборки исполняемых целей, например интерпретатора. Если они указаны, [`PY_CORE_EXE_LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-PY_CORE_EXE_LDFLAGS) будут использоваться вместо [`PY_CORE_LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-PY_CORE_LDFLAGS).13531354Добавлено в версии 3.15.13551356#### `CONFIGURE_EXE_LDFLAGS`13571358Значение переменной [`EXE_LDFLAGS`](https://python-all.ru/3.15/using/configure.html#envvar-EXE_LDFLAGS), передаваемое сценарию `./configure` .13591360Добавлено в версии 3.15.13611362#### `PY_CORE_EXE_LDFLAGS`13631364Флаги компоновщика, используемые для сборки интерпретатора и исполняемых целей.13651366По умолчанию: `$(PY_CORE_LDFLAGS)`13671368Добавлено в версии 3.15.13691370Сноски13711372\[[6](https://python-all.ru/3.15/using/configure.html#id14)\]13731374`git clean -fdx` – ещё более радикальный способ «очистить» рабочую копию. Он удаляет все файлы, не известные Git. При поиске ошибок с помощью `git bisect` это [рекомендуется между проверками](https://python-all.ru/3.15/using/configure.html) для гарантии полностью чистой сборки. **Используйте с осторожностью**, так как будут удалены все файлы, не отслеживаемые Git, включая ваши новые, несохранённые наработки.1375