Spec-Zone.ru › Python 3.13

Настройка Python

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

Возможности и минимальные версии, необходимые для сборки 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 или более поздняя версия. Теперь для модуля tkinter требуется Tcl/Tk версии 8.5.12.

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

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

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

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

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

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

3.2.1. Скрипт configure

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

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

autoreconf -ivf -Werror

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

3.3. Параметры конфигурации

Список всех параметров скрипта configure:

./configure --help

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

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

--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, .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

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

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

--with-platlibdir=DIRNAME

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

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

См. 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.11.

--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(): сохраняет статистику в файл и очищает её.

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

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

Статистика:

  • Опкоды:

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

    • Встроенные вызовы Python;
    • Вызовы PyEval;
    • Создано кадров;
    • Создано объектов кадров;
    • Вызовы Eval: vector, generator, legacy, function VECTORCALL, build class, slot, function «ex», API, method.
  • Объекты:

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

    • Сборки мусора;
    • Посещённые объекты;
    • Собранные объекты.

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

--disable-gil

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

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

Подробнее см. CPython без GIL.

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

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

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

  • no — собрать интерпретатор без JIT.
  • yes — собрать интерпретатор с JIT.
  • yes-off — собрать интерпретатор с JIT, но отключить его по умолчанию.
  • interpreter — собрать интерпретатор без JIT, но с включённым интерпретатором второго уровня.

По соглашению, --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. Параметры компилятора C

CC

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

CFLAGS

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

CPP

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

CPPFLAGS

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

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

LDFLAGS

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

LIBS

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

MACHDEP

Имя файлов библиотек, зависящих от архитектуры машины.

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

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

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. Параметры WebAssembly

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

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

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

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

--enable-wasm-dynamic-linking

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

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

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

--enable-wasm-pthreads

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

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

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

--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. Параметры производительности

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

--enable-optimizations

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

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

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

Примечание

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

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

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

PROFILE_TASK

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

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

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

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

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

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

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

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

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

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

--enable-bolt

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

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

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

Переменные configure BOLT_INSTRUMENT_FLAGS и BOLT_APPLY_FLAGS можно задать, чтобы переопределить набор аргументов по умолчанию для 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. Отладочная сборка Python

Отладочная сборка — это сборка Python с параметром configure --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 (см. также параметр configure --with-assertions). Основные проверки во время выполнения:

    • Добавляются проверки корректности аргументов функций.
    • Объекты Unicode и int создаются с заполненной шаблоном памятью для обнаружения использования неинициализированных объектов.
    • Проверяется, что функции, которые могут очистить или заменить текущее исключение, не вызываются при поднятом исключении.
    • Проверяется, что функции освобождения памяти не изменяют текущее исключение.
    • Сборщик мусора (функция gc.collect()) выполняет базовые проверки согласованности объектов.
    • Макрос Py_SAFE_DOWNCAST() проверяет целочисленное переполнение и потерю значащих разрядов при приведении широких типов к узким.

См. также режим разработки Python и параметр configure --with-trace-refs.

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

3.3.9. Параметры отладки

--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. Параметры компоновщика

--enable-shared

Включить сборку общей библиотеки Python: libpython (по умолчанию отключено).

--without-static-libpython

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

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

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

--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. Параметры безопасности

--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. Параметры macOS

См. Mac/README.rst.

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

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

--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.

--with-framework-name=FRAMEWORK

Указать имя фреймворка Python; применимо только в macOS и только при заданном --enable-framework (по умолчанию: Python).

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

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

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

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

См. iOS/README.rst.

--enable-framework=INSTALLDIR

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

--with-framework-name=FRAMEWORK

Указать имя фреймворка (по умолчанию: Python).

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

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

--build=BUILD

настроить сборку для BUILD; обычно это значение определяется программой config.guess.

--host=HOST

выполнить кросс-компиляцию программ для запуска на HOST (целевой платформе)

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

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

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

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.11.

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

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

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

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

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

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

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

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

3.4.3.1. make

В большинстве случаев при пересборке после редактирования кода или обновления рабочей копии из upstream достаточно выполнить 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). Можно использовать параметр configure --enable-optimizations, чтобы эта цель стала целью по умолчанию для команды make (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. Расширения C

Некоторые расширения 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. Флаги компилятора и компоновщика

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

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

CONFIGURE_CPPFLAGS

Значение переменной CPPFLAGS, передаваемое скрипту ./configure.

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

CPPFLAGS

Флаги препроцессора C/C++ (Objective-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. Флаги компилятора

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

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

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

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. Флаги компоновщика

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.

Сноски

[1]

git clean -fdx — ещё более радикальный способ «очистить» рабочую копию. Он удаляет все файлы, не отслеживаемые Git. При поиске ошибок с помощью git bisect это рекомендуется делать между проверками, чтобы гарантировать полностью чистую сборку. Используйте с осторожностью: будут удалены все файлы, не добавленные в Git, в том числе ваши новые, незафиксированные изменения.

© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/using/configure.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API