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

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

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

Возможности и минимальные версии, необходимые для сборки CPython:

  • Компилятор C11. Опциональные возможности C11 не требуются.

  • В Windows требуется Microsoft Visual Studio 2017 или новее.

  • Поддержка IEEE 754 чисел с плавающей запятой и нечисла (NaN).

  • Поддержка потоков.

  • OpenSSL 1.1.1 – минимальная версия, а OpenSSL 3.0.18 – рекомендуемая минимальная версия для модулей расширения ssl и hashlib.

  • SQLite 3.15.2 для модуля расширения sqlite3.

  • Tcl/Tk 8.5.12 для модуля tkinter.

  • libmpdec 2.5.0 для модуля decimal.

  • Для повторной генерации скрипта configure требуются Autoconf 2.71 и aclocal 1.16.5.

Изменено в версии 3.1: Теперь требуется Tcl/Tk версии 8.3.1.

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

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

Изменено в версии 3.7: Теперь требуются поддержка потоков и OpenSSL 1.0.2.

Изменено в версии 3.10: Теперь требуется OpenSSL 1.1.1. Требуется SQLite 3.7.15.

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

Изменено в версии 3.13: Теперь требуются Autoconf 2.71, aclocal 1.16.5 и SQLite 3.15.2.

См. также PEP 7 «Руководство по стилю C» и PEP 11 «Поддержка платформ CPython».

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

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

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

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

3.2.1. Сценарий configureconfigure script

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

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

autoreconf -ivf -Werror

Сгенерированные файлы могут измениться в зависимости от точных версий autoconf-archive, aclocal и pkg-config.

3.3. Параметры configureConfigure Options

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

./configure --help

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

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

--enable-loadable-sqlite-extensions

Поддержка загружаемых расширений в модуле расширения _sqlite (по умолчанию отключено) модуля sqlite3.

См. метод sqlite3.Connection.enable_load_extension() модуля sqlite3.

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

--disable-ipv6

Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль socket.

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

Определить размер в битах цифр Python int: 15 или 30 бит.

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

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

См. sys.int_info.bits_per_digit.

--with-suffix=SUFFIX

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

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

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

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

Выбрать путь поиска часового пояса по умолчанию для zoneinfo.TZPATH. См. конфигурацию времени компиляции модуля zoneinfo.

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

См. разделитель путей os.pathsep.

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

--without-decimal-contextvar

Сборка модуля расширения _decimal с контекстом, локальным для потока, а не с контекстом, локальным для корутины (по умолчанию). См. модуль decimal.

См. decimal.HAVE_CONTEXTVAR и модуль contextvars.

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

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

Переопределяет порядок проверки бэкендов БД для модуля dbm.

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

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

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

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

См. PYTHONCOERCECLOCALE и PEP 538.

--without-freelists

Отключить все freelists, кроме синглтона пустого кортежа.

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

--with-platlibdir=DIRNAME

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

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

См. sys.platlibdir.

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

--with-wheel-pkg-dir=PATH

Каталог пакетов wheel, используемых модулем ensurepip (по умолчанию отсутствует).

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

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

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

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

  • check (по умолчанию): pkg-config необязателен

  • yes: pkg-config обязателен

  • no: configure не использует pkg-config, даже если он присутствует

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

--enable-pystats

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

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

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

Эффекты:

  • Добавляет опцию командной строки -X pystats.

  • Добавляет переменную окружения PYTHONSTATS.

  • Определяет макрос Py_STATS.

  • Добавляет функции в модуль sys:

    • sys._stats_on(): Включает сбор статистики.

    • sys._stats_off(): Выключает сбор статистики.

    • sys._stats_clear(): Очищает статистику.

    • sys._stats_dump(): Сбрасывает статистику в файл и очищает её.

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

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

Статистика:

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

    • Специализация: успех, неудача, попадание, отложено, промах, деоптимизация, сбои;

    • Счётчик выполнения;

    • Счётчик пар.

  • Вызов:

    • Встроенные вызовы Python;

    • Вызовы PyEval;

    • Помещено фреймов;

    • Создано объектов фреймов;

    • Вызовы eval: векторный, генераторный, устаревший, функция VECTORCALL, сборка класса, слот, функция “ex”, API, метод.

  • Объект:

    • incref и decref;

    • интерпретатор incref и decref;

    • выделения: все, 512 байт, 4 КиБ, большие;

    • освобождение;

    • в/из списков свободных блоков;

    • словарь материализован/дематериализован;

    • кэш типов;

    • попытки оптимизации;

    • трассы оптимизации создано/выполнено;

    • выполнено uops.

  • Сборщик мусора:

    • Сборок мусора;

    • Посещено объектов;

    • Собрано объектов.

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

--disable-gil

Включает экспериментальную поддержку запуска Python без глобальной блокировки интерпретатора (GIL): сборка со свободной многопоточностью.

Определяет макрос Py_GIL_DISABLED и добавляет "t" в\nsys.abiflags.

Подробнее см. Free-threaded CPython.

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

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

Указывает способ интеграции JIT-компилятора.

  • no – сборка интерпретатора без JIT.

  • yes – сборка интерпретатора с JIT.

  • yes-off – сборка интерпретатора с JIT, но отключённым по умолчанию.

  • interpreter – сборка интерпретатора без JIT, но с включённым интерпретатором второго уровня (tier 2).

По соглашению, --enable-experimental-jit – это сокращение для --enable-experimental-jit=yes.

Примечание

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

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

PKG_CONFIG

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

PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH

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

3.3.2. Параметры компилятора CC compiler options

CC

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

CFLAGS

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

CPP

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

CPPFLAGS

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

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

LDFLAGS

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

LIBS

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

MACHDEP

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

3.3.4. Параметры для сторонних зависимостейOptions for third-party dependencies

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

BZIP2_CFLAGS
BZIP2_LIBS

Флаги компилятора C и компоновщика для связывания Python с libbz2, используемые модулем bz2, переопределяющие pkg-config.

CURSES_CFLAGS
CURSES_LIBS

Флаги компилятора C и компоновщика для libncurses или libncursesw, используемые модулем curses, переопределяющие pkg-config.

GDBM_CFLAGS
GDBM_LIBS

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

LIBB2_CFLAGS
LIBB2_LIBS

Флаги компилятора C и компоновщика для libb2 (BLAKE2), используемые модулем hashlib, переопределяют pkg-config.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

Флаги компилятора C и компоновщика для libedit, используемые модулем readline, переопределяющие pkg-config.

LIBFFI_CFLAGS
LIBFFI_LIBS

Флаги компилятора C и компоновщика для libffi, используемые модулем ctypes, переопределяющие pkg-config.

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

Флаги компилятора C и компоновщика для libmpdec, используемые модулем decimal, переопределяющие pkg-config.

Примечание

Эти переменные окружения не действуют, если не указан --with-system-libmpdec.

LIBLZMA_CFLAGS
LIBLZMA_LIBS

Флаги компилятора C и компоновщика для liblzma, используемые модулем lzma, переопределяющие pkg-config.

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

Флаги компилятора C и компоновщика для libreadline, используемые модулем readline, переопределяющие pkg-config.

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

Флаги компилятора C и компоновщика для libsqlite3, используемые модулем sqlite3, переопределяющие pkg-config.

LIBUUID_CFLAGS
LIBUUID_LIBS

Флаги компилятора C и компоновщика для libuuid, используемые модулем uuid, переопределяющие pkg-config.

PANEL_CFLAGS
PANEL_LIBS

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

Флаги компилятора C и компоновщика для libpanel или libpanelw, используемые модулем curses.panel, переопределяющие pkg-config.

TCLTK_CFLAGS
TCLTK_LIBS

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

ZLIB_CFLAGS
ZLIB_LIBS

Флаги компилятора C и компоновщика для libzlib, используемые модулем gzip, переопределяющие pkg-config.

3.3.5. Параметры WebAssemblyWebAssembly Options

--with-emscripten-target=[browser|node]

Устанавливает вариант сборки для wasm32-emscripten.

  • browser (по умолчанию): предзагружать минимальную стандартную библиотеку, по умолчанию MEMFS.

  • node: поддержка NODERAWFS и pthread.

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

--enable-wasm-dynamic-linking

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

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

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

--enable-wasm-pthreads

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

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

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

--prefix=PREFIX

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

Это значение можно получить во время выполнения с помощью sys.prefix.

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

--exec-prefix=EPREFIX

Устанавливает архитектурно-зависимые файлы в EPREFIX, по умолчанию --prefix.

Это значение можно получить во время выполнения с помощью sys.exec_prefix.

--disable-test-modules

Не собирать и не устанавливать тестовые модули, такие как пакет test или модуль расширения _testcapi (собирается и устанавливается по умолчанию).

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

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

Выбирает команду ensurepip, запускаемую при установке Python:

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

  • install: запустить команду python -m ensurepip --altinstall;

  • no: не запускать ensurepip;

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

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

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

--enable-optimizations

Включает профильную оптимизацию (PGO) с помощью PROFILE_TASK (по умолчанию отключено).

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

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

Примечание

В процессе сборки могут появляться предупреждения компилятора о недоступности данных профиля для некоторых исходных файлов. Эти предупреждения безвредны, так как при сборе данных профиля выполняется лишь часть кода. Чтобы отключить эти предупреждения в Clang, вручную подавите их, добавив -Wno-profile-instr-unprofiled к CFLAGS.

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

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

PROFILE_TASK

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

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

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

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

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

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

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

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

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

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

--enable-bolt

Включает использование оптимизатора бинарных файлов после компоновки BOLT (по умолчанию отключено).

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

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

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

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

BOLT_APPLY_FLAGS

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

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

BOLT_INSTRUMENT_FLAGS

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

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

--with-computed-gotos

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

--without-mimalloc

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

См. также переменную окружения PYTHONMALLOC.

--without-pymalloc

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

См. также переменную окружения PYTHONMALLOC.

--without-doc-strings

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

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

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

--enable-profiling

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

--with-strict-overflow

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

3.3.8. Отладочная сборка PythonPython Debug Build

Отладочная сборка – это Python, собранный с опцией конфигурации --with-pydebug.

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

  • Показывать все предупреждения по умолчанию: список фильтров предупреждений по умолчанию пуст в модуле warnings.

  • Добавляет d в sys.abiflags.

  • Добавляет функцию sys.gettotalrefcount().

  • Добавляет опцию командной строки -X showrefcount.

  • Добавляет опцию командной строки -d и переменную окружения PYTHONDEBUG для отладки парсера.

  • Добавляет поддержку переменной __lltrace__: включение низкоуровневой трассировки в цикле выполнения байт-кода, если переменная определена.

  • Устанавливает отладочные привязки на распределители памяти для обнаружения переполнения буфера и других ошибок памяти.

  • Определяет макросы Py_DEBUG и Py_REF_DEBUG.

  • Добавляет проверки времени выполнения: код, окружённый #ifdef Py_DEBUG и #endif. Включает утверждения assert(...) и _PyObject_ASSERT(...): не устанавливайте макрос NDEBUG (см. также опцию конфигурации --with-assertions). Основные проверки времени выполнения:

    • Добавляет проверки корректности аргументов функций.

    • Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неинициализированных объектов.

    • Гарантирует, что функции, которые могут очистить или заменить текущее исключение, не вызываются при возникшем исключении.

    • Проверяется, что функции деаллокации не изменяют текущее исключение.

    • Сборщик мусора (функция gc.collect()) выполняет базовые проверки корректности объектов.

    • Макрос Py_SAFE_DOWNCAST() проверяет целочисленное переполнение (underflow и overflow) при понижающем приведении от широких типов к узким.

См. также режим разработки Python и опцию конфигурации --with-trace-refs.

Изменено в версии 3.8: Релизные сборки теперь совместимы по ABI с отладочными: определение макроса Py_DEBUG больше не подразумевает макрос Py_TRACE_REFS (см. опцию --with-trace-refs). Однако отладочные сборки по-прежнему экспортируют больше символов, чем релизные, и код, собранный для отладочной сборки, не обязательно совместим с релизной.

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

--with-pydebug

Собрать Python в отладочном режиме: определяет макрос Py_DEBUG (отключён по умолчанию).

--with-trace-refs

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

Эффекты:

  • Определяет макрос Py_TRACE_REFS.

  • Добавляет функцию sys.getobjects().

  • Добавляет переменную окружения PYTHONDUMPREFS.

Переменная окружения PYTHONDUMPREFS может использоваться для дампа объектов и счётчиков ссылок, остающихся активными при завершении Python.

Статически размещённые объекты не отслеживаются.

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

Изменено в версии 3.13: Эта сборка теперь совместима по ABI с релизной сборкой и отладочной сборкой.

--with-assertions

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

Если установлен, макрос NDEBUG не определяется в переменной компилятора OPT.

См. также опцию --with-pydebug (отладочная сборка), которая также включает утверждения.

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

--with-valgrind

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

--with-dtrace

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

См. Инструментирование CPython с помощью DTrace и SystemTap.

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

--with-address-sanitizer

Включить детектор ошибок памяти AddressSanitizer, asan (по умолчанию нет). Чтобы улучшить возможности обнаружения ASan, можно также объединить это с --without-pymalloc для отключения специализированного аллокатора малых объектов, чьи выделения не отслеживаются ASan.

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

--with-memory-sanitizer

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

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

--with-undefined-behavior-sanitizer

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

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

--with-thread-sanitizer

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

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

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

--enable-shared

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

--without-static-libpython

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

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

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

--with-libs='lib1 ...'

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

--with-system-expat

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

--with-system-libmpdec

Собирать модуль расширения _decimal, используя установленную библиотеку mpdecimal , см. модуль decimal (по умолчанию включено).

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

Изменено в версии 3.13: По умолчанию используется установленная библиотека mpdecimal.

Устарело с версии 3.13, будет удалено в версии 3.16: Копия исходных кодов библиотеки mpdecimal больше не будет распространяться с Python 3.16.

См. также

LIBMPDEC_CFLAGS и LIBMPDEC_LIBS.

--with-readline=readline|editline

Назначить библиотеку-бэкенд для модуля readline.

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

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

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

--without-readline

Не собирать модуль readline (собирается по умолчанию).

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

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

--with-libm=STRING

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

--with-libc=STRING

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

--with-openssl=DIR

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

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

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

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

  • no (по умолчанию): не устанавливать rpath;

  • auto: автоматически определять rpath из --with-openssl и pkg-config;

  • DIR: указать явный rpath.

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

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

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

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

  • siphash13 (по умолчанию);

  • siphash24;

  • fnv.

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

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

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

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

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (с shake);

  • blake2.

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

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

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

  • python (по умолчанию): использовать предпочтительный выбор Python;

  • openssl: оставить настройки OpenSSL по умолчанию без изменений;

  • STRING: использовать произвольную строку

См. модуль ssl.

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

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

3.3.13. Параметры macOSmacOS Options

См. Mac/README.rst.

--enable-universalsdk
--enable-universalsdk=SDKDIR

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

--enable-framework
--enable-framework=INSTALLDIR

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

--with-universal-archs=ARCH

Определяет тип универсального бинарного файла, который будет создан. Этот параметр работает, только если указан --enable-universalsdk.

Варианты:

  • universal2 (x86-64 и arm64);

  • 32-bit (PPC и i386);

  • 64-bit (PPC64 и x86-64);

  • 3-way (i386, PPC и x86-64);

  • intel (i386 и x86-64);

  • intel-32 (i386);

  • intel-64 (x86-64);

  • all (PPC, i386, PPC64 и x86-64).

Обратите внимание: значения этого параметра конфигурации не совпадают с идентификаторами, используемыми для универсальных бинарных колец (wheels) в macOS. Подробнее о тегах совместимости платформы упаковки, используемых в macOS, см. в Python Packaging User Guide.

--with-framework-name=FRAMEWORK

Задаёт имя для python framework в macOS. Работает только при указанном --enable-framework (по умолчанию: Python).

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

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

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

3.3.14. Параметры iOSiOS Options

См. iOS/README.rst.

--enable-framework=INSTALLDIR

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

--with-framework-name=FRAMEWORK

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

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

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

--build=BUILD

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

--host=HOST

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

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

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

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

CONFIG_SITE=file

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

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

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

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

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

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

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

3.4. Система сборки PythonPython Build System

3.4.1. Основные файлы системы сборкиMain files of the build system

  • configure.ac => configure;

  • Makefile.pre.in => Makefile (создаётся с помощью configure);

  • pyconfig.h (создаётся с помощью configure);

  • Modules/Setup: расширения на C, собираемые Makefile с помощью Module/makesetup shell-скрипта;

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

  • C-файлы (.c) компилируются в объектные файлы (.o).

  • Статическая библиотека libpython (.a) создаётся из объектных файлов.

  • python.o и статическая библиотека libpython компонуются в итоговую программу python.

  • Расширения на C собираются с помощью Makefile (см. Modules/Setup).

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

3.4.3.1. make

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

  • profile-opt (настроено с помощью --enable-optimizations)

  • build_wasm (настроено с помощью --with-emscripten-target)

  • build_all (настроено без явного использования других вариантов)

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

3.4.3.2. make platform

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

3.4.3.3. make profile-opt

Собрать Python с профильной оптимизацией (PGO). Чтобы сделать это целью по умолчанию для команды make, можно использовать параметр configure --enable-optimizations (make all или просто make).

3.4.3.4. make clean

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

3.4.3.5. make distclean

Помимо работы, выполненной make clean, удалить файлы, созданные скриптом configure. Перед повторной сборкой потребуется запустить configure. [1]

3.4.3.6. make install

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

3.4.3.7. make test

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

  • TESTOPTS: дополнительные параметры командной строки regrtest.

  • TESTPYTHONOPTS: дополнительные параметры командной строки Python.

  • TESTTIMEOUT: тайм-аут в секундах (по умолчанию: 10 минут).

3.4.3.8. make buildbottest

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

3.4.3.9. make regen-all

Перегенерировать (почти) все сгенерированные файлы. Они включают (но не ограничиваются) случаи байткода и файл генератора парсера. make regen-stdlib-module-names и autoconf должны быть запущены отдельно для остальных сгенерированных файлов.

3.4.4. Расширения CC extensions

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

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

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

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

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

Макросы PyAPI_FUNC(), PyAPI_DATA() и PyMODINIT_FUNC из Include/exports.h определяются по-разному в зависимости от того, определён ли макрос Py_BUILD_CORE_MODULE:

  • Используйте Py_EXPORTED_SYMBOL, если Py_BUILD_CORE_MODULE определён.

  • В противном случае используйте Py_IMPORTED_SYMBOL.

Если макрос Py_BUILD_CORE_BUILTIN по ошибке используется для расширения C, собранного как разделяемая библиотека, его функция PyInit_xxx() не экспортируется, что вызывает ImportError при импорте.

3.5. Флаги компилятора и компоновщикаCompiler and linker flags

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

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

CONFIGURE_CPPFLAGS

Значение переменной CPPFLAGS, передаваемое сценарию ./configure.

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

CPPFLAGS

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

И CPPFLAGS, и LDFLAGS должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.

BASECPPFLAGS

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

PY_CPPFLAGS

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

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

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

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

CC

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

Пример: gcc -pthread.

CXX

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

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

CFLAGS

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

CFLAGS_NODIST

CFLAGS_NODIST используется для сборки интерпретатора и расширений C из стандартной библиотеки. Используйте его, когда флаг компилятора не должен быть частью CFLAGS после установки Python (gh-65320).

В частности, CFLAGS не должен содержать:

  • флаг компилятора -I (для задания пути поиска включаемых файлов). Флаги -I обрабатываются слева направо, и любые флаги из CFLAGS будут иметь приоритет над -I флагами, предоставленными пользователем и пакетами.

  • флаги усиления защиты, такие как -Werror, поскольку дистрибутивы не могут контролировать, соответствуют ли установленные пользователями пакеты таким повышенным стандартам.

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

COMPILEALL_OPTS

Параметры, передаваемые командной строке compileall при сборке PYC-файлов в make install. По умолчанию: -j0.

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

EXTRA_CFLAGS

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

CONFIGURE_CFLAGS

Значение переменной CFLAGS, передаваемое сценарию ./configure .

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

CONFIGURE_CFLAGS_NODIST

Значение переменной CFLAGS_NODIST, передаваемое сценарию ./configure .

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

BASECFLAGS

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

OPT

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

CFLAGS_ALIASING

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

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

CCSHARED

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

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

CFLAGSFORSHARED

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

По умолчанию: $(CCSHARED) при использовании --enable-shared, иначе пустая строка.

PY_CFLAGS

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

PY_CFLAGS_NODIST

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

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

PY_STDMODULE_CFLAGS

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

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

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

PY_CORE_CFLAGS

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

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

PY_BUILTIN_MODULE_CFLAGS

Флаги компилятора для сборки модуля расширения стандартной библиотеки как встроенного модуля, подобно модулю posix.

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

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

PURIFY

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

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

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

LINKCC

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

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

CONFIGURE_LDFLAGS

Значение переменной LDFLAGS, передаваемое сценарию ./configure.

Избегайте присваивания CFLAGS, LDFLAGS и т.д., чтобы пользователи могли использовать их в командной строке для добавления к этим значениям, не перезаписывая предустановленные.

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

LDFLAGS_NODIST

LDFLAGS_NODIST используется так же, как CFLAGS_NODIST. Используйте его, когда флаг компоновщика не должен быть частью LDFLAGS после установки Python (gh-65320).

В частности, LDFLAGS не должен содержать:

  • флаг компилятора -L (для установки пути поиска библиотек). Флаги -L обрабатываются слева направо, и любые флаги в LDFLAGS будут иметь приоритет над флагами -L, предоставленными пользователем или пакетом.

CONFIGURE_LDFLAGS_NODIST

Значение переменной LDFLAGS_NODIST, передаваемое сценарию ./configure .

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

LDFLAGS

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

И CPPFLAGS, и LDFLAGS должны содержать значение оболочки, чтобы можно было собирать модули расширения, используя каталоги, указанные в переменных окружения.

LIBS

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

Пример: -lrt.

LDSHARED

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

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

BLDSHARED

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

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

PY_LDFLAGS

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

PY_LDFLAGS_NODIST

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

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

PY_CORE_LDFLAGS

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

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

Сноски