Документация Python неофициальный перевод

configure.md

860 строк · 48.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.12/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.12/using/configure.html). [Опциональные возможности C11](https://python-all.ru/3.12/using/configure.html) не требуются.14- Поддержка [IEEE 754](https://python-all.ru/3.12/using/configure.html) чисел с плавающей запятой и [нечисла (NaN)](https://python-all.ru/3.12/using/configure.html).15- Поддержка потоков.16- OpenSSL версии 1.1.1 или новее для модулей [`ssl`](https://python-all.ru/3.12/library/ssl.html#module-ssl) и [`hashlib`](https://python-all.ru/3.12/library/hashlib.html#module-hashlib).17- В Windows требуется Microsoft Visual Studio 2017 или новее.1819Изменено в версии 3.5: В Windows требуется Visual Studio 2015 или новее.2021Изменено в версии 3.6: Теперь требуются отдельные возможности C99, такие как функции `<stdint.h>` и `static inline`.2223Изменено в версии 3.7: Теперь требуются поддержка потоков и OpenSSL 1.0.2.2425Изменено в версии 3.10: Теперь требуется OpenSSL 1.1.1.2627Изменено в версии 3.11: Теперь требуются компилятор C11, поддержка IEEE 754 и NaN. В Windows требуется Visual Studio 2017 или новее.2829См. также [**PEP 7** «Руководство по стилю C»](https://python-all.ru/3.12/using/configure.html) и [**PEP 11** «Поддержка платформ CPython»](https://python-all.ru/3.12/using/configure.html).3031## 3.2. Сгенерированные файлы3233Чтобы уменьшить зависимости сборки, исходный код Python содержит несколько сгенерированных файлов. Команды для перегенерации всех сгенерированных файлов:3435```sh36make regen-all37make regen-stdlib-module-names38make regen-limited-abi39make regen-configure40```4142Файл `Makefile.pre.in` документирует сгенерированные файлы, их входные данные и используемые инструменты для их перегенерации. Ищите цели make `regen-*`.4344### 3.2.1. Сценарий configure4546Команда `make regen-configure` перегенерирует файл `aclocal.m4` и сценарий `configure` с помощью сценария оболочки `Tools/build/regen-configure.sh`, который использует контейнер Ubuntu для получения тех же версий инструментов и обеспечения воспроизводимого результата.4748Контейнер необязателен, следующую команду можно выполнить локально:4950```sh51autoreconf -ivf -Werror52```5354Сгенерированные файлы могут измениться в зависимости от точных версий `autoconf-archive`, `aclocal` и `pkg-config`.5556## 3.3. Параметры configure5758Выведите список всех параметров сценария `./configure` с помощью:5960```sh61./configure --help62```6364См. также `Misc/SpecialBuilds.txt` в дистрибутиве исходного кода Python.6566### 3.3.1. Общие параметры6768#### `--enable-loadable-sqlite-extensions`6970Поддержка загружаемых расширений в модуле расширения `_sqlite` (по умолчанию отключено) модуля [`sqlite3`](https://python-all.ru/3.12/library/sqlite3.html#module-sqlite3).7172См. метод [`sqlite3.Connection.enable_load_extension()`](https://python-all.ru/3.12/library/sqlite3.html#sqlite3.Connection.enable_load_extension) модуля [`sqlite3`](https://python-all.ru/3.12/library/sqlite3.html#module-sqlite3).7374Добавлено в версии 3.6.7576#### `--disable-ipv6`7778Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль [`socket`](https://python-all.ru/3.12/library/socket.html#module-socket).7980#### `--enable-big-digits=[15|30]`8182Определить размер в битах цифр Python [`int`](https://python-all.ru/3.12/library/functions.html#int): 15 или 30 бит.8384По умолчанию размер цифр равен 30.8586Определить `PYLONG_BITS_IN_DIGIT` как `15` или `30`.8788См. [`sys.int_info.bits_per_digit`](https://python-all.ru/3.12/library/sys.html#sys.int_info).8990#### `--with-suffix=SUFFIX`9192Установить суффикс исполняемого файла Python равным *SUFFIX*.9394Суффикс по умолчанию: `.exe` в Windows и macOS (`python.exe` исполняемый файл), `.js` в Emscripten node, `.html` в Emscripten browser, `.wasm` в WASI, и пустая строка на других платформах (`python` исполняемый файл).9596Изменено в версии 3.11: Суффикс по умолчанию на платформе WASM – один из `.js`, `.html` или `.wasm`.9798#### `--with-tzpath=<list of absolute paths separated by pathsep>`99100Выбрать путь поиска часового пояса по умолчанию для [`zoneinfo.TZPATH`](https://python-all.ru/3.12/library/zoneinfo.html#zoneinfo.TZPATH). См. [конфигурацию времени компиляции](https://python-all.ru/3.12/library/zoneinfo.html#zoneinfo-data-compile-time-config) модуля [`zoneinfo`](https://python-all.ru/3.12/library/zoneinfo.html#module-zoneinfo).101102По умолчанию: `/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo`.103104См. разделитель путей [`os.pathsep`](https://python-all.ru/3.12/library/os.html#os.pathsep).105106Добавлено в версии 3.9.107108#### `--without-decimal-contextvar`109110Сборка модуля расширения `_decimal` с контекстом, локальным для потока, а не с контекстом, локальным для корутины (по умолчанию). См. модуль [`decimal`](https://python-all.ru/3.12/library/decimal.html#module-decimal).111112См. [`decimal.HAVE_CONTEXTVAR`](https://python-all.ru/3.12/library/decimal.html#decimal.HAVE_CONTEXTVAR) и модуль [`contextvars`](https://python-all.ru/3.12/library/contextvars.html#module-contextvars).113114Добавлено в версии 3.9.115116#### `--with-dbmliborder=<list of backend names>`117118Переопределяет порядок проверки бэкендов БД для модуля [`dbm`](https://python-all.ru/3.12/library/dbm.html#module-dbm).119120Допустимое значение – строка с именами бэкендов, разделённая двоеточиями (`:`):121122- `ndbm`;123- `gdbm`;124- `bdb`.125126#### `--without-c-locale-coercion`127128Отключает приведение локали C к локали на основе UTF-8 (включено по умолчанию).129130Не определять макрос `PY_COERCE_C_LOCALE`.131132См. [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.12/using/cmdline.html#envvar-PYTHONCOERCECLOCALE) и [**PEP 538**](https://python-all.ru/3.12/using/configure.html).133134#### `--without-freelists`135136Отключить все freelists, кроме синглтона пустого кортежа.137138Добавлено в версии 3.12.139140#### `--with-platlibdir=DIRNAME`141142Имя каталога библиотек Python (по умолчанию `lib`).143144Fedora и SuSE используют `lib64` на 64-разрядных платформах.145146См. [`sys.platlibdir`](https://python-all.ru/3.12/library/sys.html#sys.platlibdir).147148Добавлено в версии 3.9.149150#### `--with-wheel-pkg-dir=PATH`151152Каталог пакетов wheel, используемых модулем [`ensurepip`](https://python-all.ru/3.12/library/ensurepip.html#module-ensurepip) (по умолчанию отсутствует).153154Некоторые политики упаковки дистрибутивов Linux рекомендуют не включать зависимости. Например, Fedora устанавливает пакеты wheel в каталог `/usr/share/python-wheels/` и не устанавливает пакет `ensurepip._bundled`.155156Добавлено в версии 3.10.157158#### `--with-pkg-config=[check|yes|no]`159160Должен ли configure использовать **pkg-config** для обнаружения зависимостей сборки.161162- `check` (по умолчанию): **pkg-config** необязателен163- `yes`: **pkg-config** обязателен164- `no`: configure не использует **pkg-config**, даже если он присутствует165166Добавлено в версии 3.12.167168#### `--enable-pystats`169170Включить сбор внутренней статистики.171172Статистика будет сохранена в произвольный (вероятно, уникальный) файл в `/tmp/py_stats/`, или `C:\temp\py_stats\` в Windows. Если этот каталог не существует, результаты будут выведены в stdout.173174Используйте `Tools/scripts/summarize_stats.py` для чтения статистики.175176Добавлено в версии 3.12.177178### 3.3.2. Параметры WebAssembly179180#### `--with-emscripten-target=[browser|node]`181182Устанавливает вариант сборки для `wasm32-emscripten`.183184- `browser` (по умолчанию): предзагружать минимальную стандартную библиотеку, по умолчанию MEMFS.185- `node`: поддержка NODERAWFS и pthread.186187Добавлено в версии 3.12.188189#### `--enable-wasm-dynamic-linking`190191Включить поддержку динамической компоновки для WASM.192193Динамическая компоновка включает `dlopen`. Размер исполняемого файла увеличивается из-за ограниченного удаления мёртвого кода и дополнительных возможностей.194195Добавлено в версии 3.12.196197#### `--enable-wasm-pthreads`198199Включить поддержку pthreads для WASM.200201Добавлено в версии 3.12.202203### 3.3.3. Параметры установки204205#### `--prefix=PREFIX`206207Устанавливает архитектурно-независимые файлы в PREFIX. В Unix по умолчанию используется `/usr/local`.208209Это значение можно получить во время выполнения с помощью [`sys.prefix`](https://python-all.ru/3.12/library/sys.html#sys.prefix).210211Например, можно использовать `--prefix="$HOME/.local/"` для установки Python в домашний каталог.212213#### `--exec-prefix=EPREFIX`214215Устанавливает архитектурно-зависимые файлы в EPREFIX, по умолчанию [`--prefix`](https://python-all.ru/3.12/using/configure.html#cmdoption-prefix).216217Это значение можно получить во время выполнения с помощью [`sys.exec_prefix`](https://python-all.ru/3.12/library/sys.html#sys.exec_prefix).218219#### `--disable-test-modules`220221Не собирать и не устанавливать тестовые модули, такие как пакет [`test`](https://python-all.ru/3.12/library/test.html#module-test) или модуль расширения `_testcapi` (собирается и устанавливается по умолчанию).222223Добавлено в версии 3.10.224225#### `--with-ensurepip=[upgrade|install|no]`226227Выбирает команду [`ensurepip`](https://python-all.ru/3.12/library/ensurepip.html#module-ensurepip), запускаемую при установке Python:228229- `upgrade` (по умолчанию): запустить команду `python -m ensurepip --altinstall --upgrade` .230- `install`: запустить команду `python -m ensurepip --altinstall`;231- `no`: не запускать ensurepip;232233Добавлено в версии 3.6.234235### 3.3.4. Параметры производительности236237Для достижения максимальной производительности рекомендуется настраивать Python с помощью `--enable-optimizations --with-lto` (PGO + LTO). Экспериментальный флаг `--enable-bolt` также можно использовать для повышения производительности.238239#### `--enable-optimizations`240241Включает профильную оптимизацию (PGO) с помощью [`PROFILE_TASK`](https://python-all.ru/3.12/using/configure.html#envvar-PROFILE_TASK) (по умолчанию отключено).242243Компилятору Clang требуется программа `llvm-profdata` для PGO. На macOS она также требуется GCC: GCC – это просто псевдоним Clang на macOS.244245Также отключает семантическое переопределение символов в libpython, если используются `--enable-shared` и GCC: добавьте `-fno-semantic-interposition` в флаги компилятора и компоновщика.246247> **Примечание**248>249> В процессе сборки могут появляться предупреждения компилятора о недоступности данных профиля для некоторых исходных файлов. Эти предупреждения безвредны, так как при сборе данных профиля выполняется лишь часть кода. Чтобы отключить эти предупреждения в Clang, вручную подавите их, добавив `-Wno-profile-instr-unprofiled` к [`CFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS).250251Добавлено в версии 3.6.252253Изменено в версии 3.10: Используйте `-fno-semantic-interposition` в GCC.254255#### `PROFILE_TASK`256257Переменная окружения, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.258259По умолчанию: `-m test --pgo --timeout=$(TESTTIMEOUT)`.260261Добавлено в версии 3.8.262263#### `--with-lto=[full|thin|no|yes]`264265Включает оптимизацию во время компоновки (LTO) в любой сборке (по умолчанию отключено).266267Компилятору Clang требуется `llvm-ar` для LTO (`ar` в macOS), а также компоновщик, поддерживающий LTO (`ld.gold` или `lld`).268269Добавлено в версии 3.6.270271Добавлено в версии 3.11: Для использования функции ThinLTO используйте `--with-lto=thin` в Clang.272273Изменено в версии 3.12: Используйте ThinLTO в качестве политики оптимизации по умолчанию в Clang, если компилятор поддерживает этот флаг.274275#### `--enable-bolt`276277Включает использование [оптимизатора бинарных файлов после компоновки BOLT](https://python-all.ru/3.12/using/configure.html) (по умолчанию отключено).278279BOLT является частью проекта LLVM, но не всегда входит в их бинарные дистрибутивы. Этот флаг требует наличия `llvm-bolt` и `merge-fdata`.280281BOLT – всё ещё относительно новый проект, поэтому этот флаг пока следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успех зависит от комбинации окружения сборки, других аргументов конфигурации оптимизации и архитектуры CPU, и не все комбинации поддерживаются. Известно, что версии BOLT до LLVM 16 аварийно завершаются в некоторых сценариях. Настоятельно рекомендуется использовать LLVM 16 или новее для оптимизации BOLT.282283Переменные `BOLT_INSTRUMENT_FLAGS` и `BOLT_APPLY_FLAGS` **configure** можно определить, чтобы переопределить набор аргументов по умолчанию для **llvm-bolt** для инструментирования и применения данных BOLT к бинарным файлам соответственно.284285Добавлено в версии 3.12.286287#### `--with-computed-gotos`288289Включает вычисляемые переходы в цикле вычислений (включено по умолчанию на поддерживаемых компиляторах).290291#### `--without-pymalloc`292293Отключает специализированный распределитель памяти Python [pymalloc](https://python-all.ru/3.12/c-api/memory.html#pymalloc) (включён по умолчанию).294295См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.12/using/cmdline.html#envvar-PYTHONMALLOC).296297#### `--without-doc-strings`298299Отключает статические строки документации для уменьшения потребления памяти (включено по умолчанию). Строки документации, определённые в Python, не затрагиваются.300301Не определять макрос `WITH_DOC_STRINGS`.302303См. макрос `PyDoc_STRVAR()`.304305#### `--enable-profiling`306307Включает профилирование кода на уровне C с помощью `gprof` (отключено по умолчанию).308309#### `--with-strict-overflow`310311Добавляет `-fstrict-overflow` в флаги компилятора C (по умолчанию добавляется `-fno-strict-overflow`).312313### 3.3.5. Отладочная сборка Python314315Отладочная сборка – это Python, собранный с опцией конфигурации [`--with-pydebug`](https://python-all.ru/3.12/using/configure.html#cmdoption-with-pydebug).316317Эффекты отладочной сборки:318319- Показывать все предупреждения по умолчанию: список фильтров предупреждений по умолчанию пуст в модуле [`warnings`](https://python-all.ru/3.12/library/warnings.html#module-warnings).320- Добавляет `d` в [`sys.abiflags`](https://python-all.ru/3.12/library/sys.html#sys.abiflags).321- Добавляет функцию `sys.gettotalrefcount()`.322- Добавляет опцию командной строки [`-X showrefcount`](https://python-all.ru/3.12/using/cmdline.html#cmdoption-X).323- Добавляет опцию командной строки [`-d`](https://python-all.ru/3.12/using/cmdline.html#cmdoption-d) и переменную окружения [`PYTHONDEBUG`](https://python-all.ru/3.12/using/cmdline.html#envvar-PYTHONDEBUG) для отладки парсера.324- Добавляет поддержку переменной `__lltrace__`: включение низкоуровневой трассировки в цикле выполнения байт-кода, если переменная определена.325- Устанавливает [отладочные привязки на распределители памяти](https://python-all.ru/3.12/c-api/memory.html#default-memory-allocators) для обнаружения переполнения буфера и других ошибок памяти.326- Определяет макросы `Py_DEBUG` и `Py_REF_DEBUG`.327- Добавляет проверки времени выполнения: код, окружённый `#ifdef Py_DEBUG` и `#endif`. Включает утверждения `assert(...)` и `_PyObject_ASSERT(...)`: не устанавливайте макрос `NDEBUG` (см. также опцию конфигурации [`--with-assertions`](https://python-all.ru/3.12/using/configure.html#cmdoption-with-assertions)). Основные проверки времени выполнения:328329  - Добавляет проверки корректности аргументов функций.330  - Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неинициализированных объектов.331  - Гарантирует, что функции, которые могут очистить или заменить текущее исключение, не вызываются при возникшем исключении.332  - Проверяется, что функции деаллокации не изменяют текущее исключение.333  - Сборщик мусора (функция [`gc.collect()`](https://python-all.ru/3.12/library/gc.html#gc.collect)) выполняет базовые проверки корректности объектов.334  - Макрос `Py_SAFE_DOWNCAST()` проверяет целочисленное переполнение (underflow и overflow) при понижающем приведении от широких типов к узким.335336См. также [режим разработки Python](https://python-all.ru/3.12/library/devmode.html#devmode) и опцию конфигурации [`--with-trace-refs`](https://python-all.ru/3.12/using/configure.html#cmdoption-with-trace-refs).337338Изменено в версии 3.8: Сборки для выпуска и отладочные сборки теперь совместимы по ABI: определение макроса `Py_DEBUG` больше не подразумевает макрос `Py_TRACE_REFS` (см. опцию [`--with-trace-refs`](https://python-all.ru/3.12/using/configure.html#cmdoption-with-trace-refs)), который вводил единственную несовместимость ABI.339340### 3.3.6. Отладочные опции341342#### `--with-pydebug`343344[Собрать Python в отладочном режиме](https://python-all.ru/3.12/using/configure.html#debug-build): определяет макрос `Py_DEBUG` (отключён по умолчанию).345346#### `--with-trace-refs`347348Включает отслеживание ссылок для целей отладки (отключено по умолчанию).349350Эффекты:351352- Определяет макрос `Py_TRACE_REFS`.353- Добавляет функцию [`sys.getobjects()`](https://python-all.ru/3.12/library/sys.html#sys.getobjects).354- Добавляет переменную окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.12/using/cmdline.html#envvar-PYTHONDUMPREFS).355356Эта сборка несовместима по ABI со сборкой для выпуска (сборкой по умолчанию) или отладочной сборкой (макросы `Py_DEBUG` и `Py_REF_DEBUG`).357358Добавлено в версии 3.8.359360#### `--with-assertions`361362Сборка с включёнными C-утверждениями (по умолчанию нет): `assert(...);` и `_PyObject_ASSERT(...);`.363364Если установлен, макрос `NDEBUG` не определяется в переменной компилятора [`OPT`](https://python-all.ru/3.12/using/configure.html#envvar-OPT).365366См. также опцию [`--with-pydebug`](https://python-all.ru/3.12/using/configure.html#cmdoption-with-pydebug) ([отладочная сборка](https://python-all.ru/3.12/using/configure.html#debug-build)), которая также включает утверждения.367368Добавлено в версии 3.6.369370#### `--with-valgrind`371372Включить поддержку Valgrind (по умолчанию нет).373374#### `--with-dtrace`375376Включить поддержку DTrace (по умолчанию нет).377378См. [Инструментирование CPython с помощью DTrace и SystemTap](https://python-all.ru/3.12/howto/instrumentation.html#instrumentation).379380Добавлено в версии 3.6.381382#### `--with-address-sanitizer`383384Включает детектор ошибок памяти AddressSanitizer, `asan` (по умолчанию нет).385386Добавлено в версии 3.6.387388#### `--with-memory-sanitizer`389390Включить детектор ошибок выделения памяти MemorySanitizer, `msan` (по умолчанию нет).391392Добавлено в версии 3.6.393394#### `--with-undefined-behavior-sanitizer`395396Включить детектор неопределённого поведения UndefinedBehaviorSanitizer, `ubsan` (по умолчанию нет).397398Добавлено в версии 3.6.399400### 3.3.7. Параметры компоновщика401402#### `--enable-shared`403404Включает сборку разделяемой библиотеки Python: `libpython` (по умолчанию выключено).405406#### `--without-static-libpython`407408Не собирать `libpythonMAJOR.MINOR.a` и не устанавливать `python.o` (собирается и устанавливается по умолчанию).409410Добавлено в версии 3.10.411412### 3.3.8. Параметры библиотек413414#### `--with-libs='lib1 ...'`415416Линковаться с дополнительными библиотеками (по умолчанию нет).417418#### `--with-system-expat`419420Собирать модуль `pyexpat`, используя установленную библиотеку `expat` (по умолчанию нет).421422#### `--with-system-libmpdec`423424Собрать модуль расширения `_decimal`, используя установленную библиотеку `mpdec`; см. модуль [`decimal`](https://python-all.ru/3.12/library/decimal.html#module-decimal) (по умолчанию нет).425426Добавлено в версии 3.3.427428#### `--with-readline=editline`429430Использовать библиотеку `editline` в качестве бэкенда модуля [`readline`](https://python-all.ru/3.12/library/readline.html#module-readline).431432Определяет макрос `WITH_EDITLINE`.433434Добавлено в версии 3.10.435436#### `--without-readline`437438Не собирать модуль [`readline`](https://python-all.ru/3.12/library/readline.html#module-readline) (собирается по умолчанию).439440Не определять макрос `HAVE_LIBREADLINE`.441442Добавлено в версии 3.10.443444#### `--with-libm=STRING`445446Переопределить математическую библиотеку `libm` на *STRING* (по умолчанию зависит от системы).447448#### `--with-libc=STRING`449450Переопределить библиотеку C `libc` на *STRING* (по умолчанию зависит от системы).451452#### `--with-openssl=DIR`453454Корневой каталог OpenSSL.455456Добавлено в версии 3.7.457458#### `--with-openssl-rpath=[no|auto|DIR]`459460Задать каталог библиотек времени выполнения (rpath) для библиотек OpenSSL:461462- `no` (по умолчанию): не устанавливать rpath;463- `auto`: автоматически определять rpath из [`--with-openssl`](https://python-all.ru/3.12/using/configure.html#cmdoption-with-openssl) и `pkg-config`;464- *DIR*: указать явный rpath.465466Добавлено в версии 3.10.467468### 3.3.9. Параметры безопасности469470#### `--with-hash-algorithm=[fnv|siphash13|siphash24]`471472Выберите алгоритм хеширования для использования в `Python/pyhash.c`:473474- `siphash13` (по умолчанию);475- `siphash24`;476- `fnv`.477478Добавлено в версии 3.4.479480Добавлено в версии 3.11: `siphash13` добавлен и стал новым значением по умолчанию.481482#### `--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2`483484Встроенные хеш-модули:485486- `md5`;487- `sha1`;488- `sha256`;489- `sha512`;490- `sha3` (с shake);491- `blake2`.492493Добавлено в версии 3.9.494495#### `--with-ssl-default-suites=[python|openssl|STRING]`496497Переопределить строку наборов шифров OpenSSL по умолчанию:498499- `python` (по умолчанию): использовать предпочтительный выбор Python;500- `openssl`: оставить настройки OpenSSL по умолчанию без изменений;501- *STRING*: использовать произвольную строку502503См. модуль [`ssl`](https://python-all.ru/3.12/library/ssl.html#module-ssl).504505Добавлено в версии 3.7.506507Изменено в версии 3.10: Настройки `python` и *STRING* также устанавливают TLS 1.2 в качестве минимальной версии протокола.508509### 3.3.10. Параметры macOS510511См. `Mac/README.rst`.512513#### `--enable-universalsdk`514515#### `--enable-universalsdk=SDKDIR`516517Создание универсальной сборки двоичного файла. *SDKDIR* указывает, какой macOS SDK следует использовать для сборки (по умолчанию нет).518519#### `--enable-framework`520521#### `--enable-framework=INSTALLDIR`522523Создаёт Python.framework вместо традиционной установки в Unix. Необязательный *INSTALLDIR* определяет путь установки (по умолчанию – нет).524525#### `--with-universal-archs=ARCH`526527Определяет тип универсального бинарного файла, который будет создан. Этот параметр работает, только если указан [`--enable-universalsdk`](https://python-all.ru/3.12/using/configure.html#cmdoption-enable-universalsdk).528529Варианты:530531- `universal2` (x86-64 и arm64);532- `32-bit` (PPC и i386);533- `64-bit` (PPC64 и x86-64);534- `3-way` (i386, PPC и x86-64);535- `intel` (i386 и x86-64);536- `intel-32` (i386);537- `intel-64` (x86-64);538- `all` (PPC, i386, PPC64 и x86-64).539540Обратите внимание: значения этого параметра конфигурации *не* совпадают с идентификаторами, используемыми для универсальных бинарных колец (wheels) в macOS. Подробнее о [тегах совместимости платформы упаковки, используемых в macOS,](https://python-all.ru/3.12/using/configure.html) см. в Python Packaging User Guide.541542#### `--with-framework-name=FRAMEWORK`543544Задаёт имя для python framework в macOS. Работает только при указанном [`--enable-framework`](https://python-all.ru/3.12/using/configure.html#cmdoption-enable-framework) (по умолчанию: `Python`).545546### 3.3.11. Параметры кросс-компиляции547548Кросс-компиляция (также известная как кросс-сборка) используется для сборки Python под другую архитектуру CPU или платформу. Для кросс-компиляции требуется интерпретатор Python для платформы сборки. Версия Python для сборки должна совпадать с версией Python для целевой платформы, скомпилированной кросс-компилятором.549550#### `--build=BUILD`551552настройка для сборки на платформе BUILD, обычно определяется с помощью **config.guess**.553554#### `--host=HOST`555556кросс-компиляция для сборки программ, выполняемых на HOST (целевая платформа)557558#### `--with-build-python=path/to/python`559560путь к `python` двоичному файлу для кросс-компиляции561562Добавлено в версии 3.12.563564#### `CONFIG_SITE=file`565566Переменная окружения, указывающая на файл с переопределениями configure.567568Пример файла *config.site*:569570```ini571# config.site-aarch64572ac_cv_buggy_getaddrinfo=no573ac_cv_file__dev_ptmx=yes574ac_cv_file__dev_ptc=no575```576577Пример кросс-компиляции:578579```sh580CONFIG_SITE=config.site-aarch64 ../configure \581    --build=x86_64-pc-linux-gnu \582    --host=aarch64-unknown-linux-gnu \583    --with-build-python=../x86_64/python584```585586## 3.4. Система сборки Python587588### 3.4.1. Основные файлы системы сборки589590- `configure.ac` =\> `configure`;591- `Makefile.pre.in` =\> `Makefile` (создаётся с помощью `configure`);592- `pyconfig.h` (создаётся с помощью `configure`);593- `Modules/Setup`: расширения на C, собираемые Makefile с помощью `Module/makesetup` shell-скрипта;594595### 3.4.2. Основные этапы сборки596597- C-файлы (`.c`) компилируются в объектные файлы (`.o`).598- Статическая библиотека `libpython` (`.a`) создаётся из объектных файлов.599- `python.o` и статическая библиотека `libpython` компонуются в итоговую программу `python`.600- Расширения на C собираются с помощью Makefile (см. `Modules/Setup`).601602### 3.4.3. Основные цели Makefile603604- `make`: Собрать Python со стандартной библиотекой.605- `make platform:`: собрать программу `python`, но не собирать модули расширений стандартной библиотеки.606- `make profile-opt`: собрать Python с использованием профильной оптимизации (PGO). Чтобы сделать это целью по умолчанию команды `make` (`make all` или просто `make`), можно использовать опцию configure [`--enable-optimizations`](https://python-all.ru/3.12/using/configure.html#cmdoption-enable-optimizations).607- `make buildbottest`: собрать Python и запустить тестовый набор Python, так же как сборочные боты тестируют Python. Установите переменную `TESTTIMEOUT` (в секундах), чтобы изменить тайм-аут теста (по умолчанию 1200: 20 минут).608- `make install`: собрать и установить Python.609- `make regen-all`: перегенерировать (почти) все сгенерированные файлы; `make regen-stdlib-module-names` и `autoconf` должны быть запущены отдельно для оставшихся сгенерированных файлов.610- `make clean`: удалить собранные файлы.611- `make distclean`: то же, что `make clean`, но также удаляет файлы, созданные скриптом configure.612613### 3.4.4. Расширения C614615Некоторые расширения C собираются как встроенные модули, например модуль `sys`. Они собираются с определённым макросом `Py_BUILD_CORE_BUILTIN`. Встроенные модули не имеют атрибута `__file__`:616617```pycon618>>> import sys619>>> sys620<module 'sys' (built-in)>621>>> sys.__file__622Traceback (most recent call last):623  File "<stdin>", line 1, in <module>624AttributeError: module 'sys' has no attribute '__file__'625```626627Другие расширения C собираются как динамические библиотеки, например модуль `_asyncio`. Они собираются с определённым макросом `Py_BUILD_CORE_MODULE`. Пример на Linux x86-64:628629```pycon630>>> import _asyncio631>>> _asyncio632<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>633>>> _asyncio.__file__634'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'635```636637`Modules/Setup` используется для генерации целей Makefile для сборки расширений C. В начале файлов расширения C собираются как встроенные модули. Расширения, определённые после маркера `*shared*`, собираются как динамические библиотеки.638639Макросы `PyAPI_FUNC()`, `PyAPI_DATA()` и [`PyMODINIT_FUNC`](https://python-all.ru/3.12/c-api/intro.html#c.PyMODINIT_FUNC) из `Include/exports.h` определяются по-разному в зависимости от того, определён ли макрос `Py_BUILD_CORE_MODULE`:640641- Используйте `Py_EXPORTED_SYMBOL`, если `Py_BUILD_CORE_MODULE` определён.642- В противном случае используйте `Py_IMPORTED_SYMBOL`.643644Если макрос `Py_BUILD_CORE_BUILTIN` по ошибке используется для расширения C, собранного как разделяемая библиотека, его функция `PyInit_xxx()` не экспортируется, что вызывает [`ImportError`](https://python-all.ru/3.12/library/exceptions.html#ImportError) при импорте.645646## 3.5. Флаги компилятора и компоновщика647648Параметры, задаваемые сценарием `./configure` и переменными окружения, и используемые `Makefile`.649650### 3.5.1. Флаги препроцессора651652#### `CONFIGURE_CPPFLAGS`653654Значение переменной [`CPPFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CPPFLAGS), передаваемое сценарию `./configure`.655656Добавлено в версии 3.6.657658#### `CPPFLAGS`659660(Objective) C/C++ флаги препроцессора, например `-Iinclude_dir`, если заголовочные файлы находятся в нестандартном каталоге *include\_dir*.661662И [`CPPFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.663664#### `BASECPPFLAGS`665666Добавлено в версии 3.4.667668#### `PY_CPPFLAGS`669670Дополнительные флаги препроцессора, добавляемые при сборке объектных файлов интерпретатора.671672По умолчанию: `$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)`.673674Добавлено в версии 3.2.675676### 3.5.2. Флаги компилятора677678#### `CC`679680Команда компилятора C.681682Пример: `gcc -pthread`.683684#### `CXX`685686Команда компилятора C++.687688Пример: `g++ -pthread`.689690#### `CFLAGS`691692Флаги компилятора C.693694#### `CFLAGS_NODIST`695696[`CFLAGS_NODIST`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS_NODIST) используется для сборки интерпретатора и расширений C из стандартной библиотеки. Используйте его, когда флаг компилятора *не* должен быть частью [`CFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS) после установки Python ([gh-65320](https://python-all.ru/3.12/using/configure.html)).697698В частности, [`CFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS) не должен содержать:699700- флаг компилятора `-I` (для задания пути поиска включаемых файлов). Флаги `-I` обрабатываются слева направо, и любые флаги из [`CFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS) будут иметь приоритет над `-I` флагами, предоставленными пользователем и пакетами.701- флаги усиления защиты, такие как `-Werror`, поскольку дистрибутивы не могут контролировать, соответствуют ли установленные пользователями пакеты таким повышенным стандартам.702703Добавлено в версии 3.5.704705#### `COMPILEALL_OPTS`706707Параметры, передаваемые командной строке [`compileall`](https://python-all.ru/3.12/library/compileall.html#module-compileall) при сборке PYC-файлов в `make install`. По умолчанию: `-j0`.708709Добавлено в версии 3.12.710711#### `EXTRA_CFLAGS`712713Дополнительные флаги компилятора C.714715#### `CONFIGURE_CFLAGS`716717Значение переменной [`CFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS), передаваемое сценарию `./configure` .718719Добавлено в версии 3.2.720721#### `CONFIGURE_CFLAGS_NODIST`722723Значение переменной [`CFLAGS_NODIST`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS_NODIST), передаваемое сценарию `./configure` .724725Добавлено в версии 3.5.726727#### `BASECFLAGS`728729Базовые флаги компилятора.730731#### `OPT`732733Флаги оптимизации.734735#### `CFLAGS_ALIASING`736737Флаги строгого или нестрогого алиасинга, используемые для компиляции `Python/dtoa.c`.738739Добавлено в версии 3.7.740741#### `CCSHARED`742743Флаги компилятора, используемые для сборки разделяемой библиотеки.744745Например, `-fPIC` используется в Linux и BSD.746747#### `CFLAGSFORSHARED`748749Дополнительные флаги C, добавляемые для сборки объектных файлов интерпретатора.750751По умолчанию: `$(CCSHARED)` при использовании [`--enable-shared`](https://python-all.ru/3.12/using/configure.html#cmdoption-enable-shared), иначе пустая строка.752753#### `PY_CFLAGS`754755По умолчанию: `$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)`.756757#### `PY_CFLAGS_NODIST`758759По умолчанию: `$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal`.760761Добавлено в версии 3.5.762763#### `PY_STDMODULE_CFLAGS`764765Флаги C, используемые для сборки объектных файлов интерпретатора.766767По умолчанию: `$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)`.768769Добавлено в версии 3.7.770771#### `PY_CORE_CFLAGS`772773По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE`.774775Добавлено в версии 3.2.776777#### `PY_BUILTIN_MODULE_CFLAGS`778779Флаги компилятора для сборки модуля расширения стандартной библиотеки как встроенного модуля, подобно модулю [`posix`](https://python-all.ru/3.12/library/posix.html#module-posix).780781По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN`.782783Добавлено в версии 3.8.784785#### `PURIFY`786787Команда Purify. Purify – программа для отладки памяти.788789По умолчанию: пустая строка (не используется).790791### 3.5.3. Флаги компоновщика792793#### `LINKCC`794795Команда компоновщика, используемая для сборки программ, таких как `python` и `_testembed`.796797По умолчанию: `$(PURIFY) $(CC)`.798799#### `CONFIGURE_LDFLAGS`800801Значение переменной [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS), передаваемое сценарию `./configure`.802803Избегайте присваивания [`CFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS), [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS) и т.д., чтобы пользователи могли использовать их в командной строке для добавления к этим значениям, не перезаписывая предустановленные.804805Добавлено в версии 3.2.806807#### `LDFLAGS_NODIST`808809[`LDFLAGS_NODIST`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS_NODIST) используется так же, как [`CFLAGS_NODIST`](https://python-all.ru/3.12/using/configure.html#envvar-CFLAGS_NODIST). Используйте его, когда флаг компоновщика *не* должен быть частью [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS) после установки Python ([gh-65320](https://python-all.ru/3.12/using/configure.html)).810811В частности, [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS) не должен содержать:812813- флаг компилятора `-L` (для установки пути поиска библиотек). Флаги `-L` обрабатываются слева направо, и любые флаги в [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS) будут иметь приоритет над флагами `-L`, предоставленными пользователем или пакетом.814815#### `CONFIGURE_LDFLAGS_NODIST`816817Значение переменной [`LDFLAGS_NODIST`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS_NODIST), передаваемое сценарию `./configure` .818819Добавлено в версии 3.8.820821#### `LDFLAGS`822823Флаги компоновщика, например, `-Llib_dir`, если библиотеки находятся в нестандартном каталоге *lib\_dir*.824825И [`CPPFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.12/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.826827#### `LIBS`828829Флаги компоновщика для передачи библиотек компоновщику при компоновке исполняемого файла Python.830831Пример: `-lrt`.832833#### `LDSHARED`834835Команда для сборки разделяемой библиотеки.836837По умолчанию: `@LDSHARED@ $(PY_LDFLAGS)`.838839#### `BLDSHARED`840841Команда для сборки разделяемой библиотеки `libpython`.842843По умолчанию: `@BLDSHARED@ $(PY_CORE_LDFLAGS)`.844845#### `PY_LDFLAGS`846847По умолчанию: `$(CONFIGURE_LDFLAGS) $(LDFLAGS)`.848849#### `PY_LDFLAGS_NODIST`850851По умолчанию: `$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)`.852853Добавлено в версии 3.8.854855#### `PY_CORE_LDFLAGS`856857Флаги компоновщика, используемые для сборки объектных файлов интерпретатора.858859Добавлено в версии 3.8.860