Spec-Zone.ru › Python 3.14

Настройка Python

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

Для сборки CPython вам понадобятся:

  • Компилятор C11. Дополнительные возможности C11 не требуются.
  • В Windows требуется Microsoft Visual Studio 2017 или более поздняя версия.
  • Поддержка чисел с плавающей запятой IEEE 754 и значения «не число» (NaN) с плавающей запятой.
  • Поддержка потоков.

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

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

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

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

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

3.1.1. Требования к необязательным модулям

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

Об отсутствующих зависимостях сообщается в выводе configure. Модули, отсутствующие из-за недостающих зависимостей, перечислены ближе к концу вывода make; иногда используется внутреннее имя, например _ctypes для модуля ctypes.

Если вы распространяете интерпретатор CPython без необязательных модулей, рекомендуется предупредить об этом пользователей, которые обычно ожидают, что модули стандартной библиотеки доступны.

Для сборки необязательных модулей требуются следующие зависимости:

Зависимость

Минимальная версия

Модуль Python

libbz2

bz2

libffi

рекомендуется версия 3.3.0

ctypes

liblzma

lzma

libmpdec

2.5.0

decimal [1]

libreadline или libedit [2]

readline

libuuid

_uuid [3]

ncurses [4]

curses

OpenSSL

ssl, hashlib [5]

SQLite

3.15.2

sqlite3

Tcl/Tk

8.5.12

tkinter, IDLE, turtle

zlib

1.2.2.1

zlib, gzip, ensurepip

zstd

1.4.5

compression.zstd

[1]

Если libmpdec недоступна, модуль decimal будет использовать реализацию на чистом Python. Подробности см. в разделе --with-system-libmpdec.

[2]

О выборе серверной части для модуля readline см. в разделе --with-readline.

[3]

Модуль uuid использует _uuid для создания «безопасных» UUID. Подробности см. в документации модуля.

[4]

Для модуля curses требуется библиотека libncurses или libncursesw. Для модуля curses.panel дополнительно требуется библиотека libpanel или libpanelw.

[5]

Если OpenSSL недоступен, модуль hashlib будет использовать встроенные реализации нескольких хеш-функций. О том, как принудительно включить использование OpenSSL, см. в разделе --with-builtin-hashlib-hashes.

Обратите внимание, что в таблице перечислены не все необязательные модули; в частности, здесь не указаны специфичные для платформы модули, например winreg.

См. также

  • Руководство разработчика содержит полный список зависимостей, необходимых для сборки всех модулей, и инструкции по их установке на распространённых платформах.
  • --with-system-expat позволяет выполнять сборку с внешней библиотекой libexpat.
  • Параметры для сторонних зависимостей

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

Изменено в версии 3.5: Для tkinter теперь требуется Tcl/Tk версии 8.4.

Изменено в версии 3.7: Для hashlib и ssl теперь требуется OpenSSL 1.0.2.

Изменено в версии 3.10: Для hashlib и ssl теперь требуется OpenSSL 1.1.1. Для sqlite3 теперь требуется SQLite 3.7.15.

Изменено в версии 3.11: Для tkinter теперь требуется Tcl/Tk версии 8.5.12.

Изменено в версии 3.13: Для sqlite3 теперь требуется SQLite 3.15.2.

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 с помощью сценария оболочки Tools/build/regen-configure.sh, который использует контейнер Ubuntu для получения одинаковых версий инструментов и воспроизводимого результата.

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

autoreconf -ivf -Werror

Сгенерированные файлы могут различаться в зависимости от точных версий используемых инструментов. В контейнере CPython используются Autoconf 2.72, aclocal из Automake 1.16.5 и pkg-config 1.8.1.

Изменено в версии 3.13: Для повторной генерации configure теперь используются Autoconf 2.71 и aclocal 1.16.5.

Изменено в версии 3.14: Для повторной генерации configure теперь используется Autoconf 2.72.

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.

--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.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: векторные, генераторные, устаревшие, VECTORCALL функции, создание класса, слот, функция «ex», API, метод.
  • Объекты:

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

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

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

--disable-gil

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

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

Подробнее см. CPython без блокировки потоков.

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

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

Указывает, как интегрировать экспериментальный JIT-компилятор.

  • no: не собирать JIT.
  • yes: включить JIT. Чтобы отключить его во время выполнения, задайте переменную окружения PYTHON_JIT=0.
  • yes-off: собрать JIT, но по умолчанию отключить его. Чтобы включить его во время выполнения, задайте переменную окружения PYTHON_JIT=1.
  • interpreter: включить «интерпретатор JIT» (полезно только тем, кто отлаживает сам JIT). Чтобы отключить его во время выполнения, задайте переменную окружения PYTHON_JIT=0.

Если параметр не указан, по умолчанию используется --enable-experimental-jit=no, а --enable-experimental-jit — это сокращённая запись для --enable-experimental-jit=yes. Подробнее см. Tools/jit/README.md, включая сведения об установке необходимых зависимостей для сборки.

Примечание

При сборке 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.

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.

LIBZSTD_CFLAGS
LIBZSTD_LIBS

Флаги компилятора C и компоновщика для libzstd, используемой модулем compression.zstd; переопределяют pkg-config.

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

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

--enable-wasm-dynamic-linking

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

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

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

--enable-wasm-pthreads

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

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

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

--prefix=PREFIX

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

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

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

--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: Используйте -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) при любой сборке (по умолчанию отключена).

Для LTO компилятору C Clang требуется llvm-ar (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 — ещё довольно новый проект, поэтому пока этот флаг следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успешное применение зависит от сочетания среды сборки, других аргументов настройки оптимизации и архитектуры процессора; поддерживаются не все сочетания. Известно, что версии BOLT до LLVM 16 в некоторых случаях приводят к аварийному завершению BOLT. Настоятельно рекомендуется использовать LLVM 16 или более позднюю версию для оптимизации с BOLT.

Переменные 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

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

--with-tail-call-interp

Включить интерпретаторы, использующие хвостовые вызовы, в CPython. Если эта функция включена, настоятельно рекомендуется также включить PGO (--enable-optimizations). Для этого параметра требуется компилятор C с поддержкой корректных хвостовых вызовов и соглашения о вызовах preserve_none. Например, эта функция поддерживается в Clang 19 и более новых версиях.

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

--without-mimalloc

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

Этот параметр нельзя использовать вместе с --disable-gil, поскольку сборка с отключённой глобальной блокировкой интерпретатора требует 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).

--without-remote-debug

Отключить поддержку удалённой отладки, описанную в PEP 768 (по умолчанию включена). Если указан этот флаг, код, позволяющий интерпретатору запланировать выполнение файла Python в отдельном процессе, как описано в PEP 768, не компилируется. Это включает как функциональность планирования выполнения кода, так и функциональность получения кода для выполнения.

Py_REMOTE_DEBUG

Этот макрос определяется по умолчанию, если только Python не настроен с параметром --without-remote-debug.

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

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

3.3.8. Отладочная сборка Python

Отладочная сборка — это сборка 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() проверяет целочисленное переполнение и потерю значимости при преобразовании из широких типов в узкие.

См. также режим разработки Python и параметр настройки --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.15: Встроенная копия библиотеки больше не будет выбираться автоматически, если установленная библиотека mpdecimal не найдена. Только в Python 3.15 её по-прежнему можно выбрать явно с помощью --with-system-libmpdec=no или --without-system-libmpdec.

Устарело с версии 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 в качестве минимальной версии протокола.

--disable-safety

Отключить параметры компилятора, рекомендованные OpenSSF по соображениям безопасности и не снижающие производительность. Если этот параметр не включён, CPython будет собран с безопасными параметрами компилятора без замедления. При включении этого параметра CPython не будет собираться с указанными ниже параметрами компилятора.

При использовании --disable-safety отключаются следующие параметры компилятора:

  • -fstack-protector-strong: включить проверки во время выполнения для обнаружения переполнения буферов в стеке.
  • -Wtrampolines: включить предупреждения о трамплинах, которым требуются исполняемые стеки.

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

--enable-slower-safety

Включить параметры компилятора, рекомендованные OpenSSF по соображениям безопасности, но требующие дополнительных затрат ресурсов. Если этот параметр не включён, CPython не будет собираться с безопасными параметрами компилятора, влияющими на производительность. При включении этого параметра CPython будет собран с указанными ниже параметрами компилятора.

При использовании --enable-slower-safety включаются следующие параметры компилятора:

  • -D_FORTIFY_SOURCE=3: усилить защиту исходного кода с помощью проверок во время компиляции и выполнения для обнаружения небезопасного использования libc и переполнения буферов.

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

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

Обратите внимание, что значения этого параметра конфигурации не совпадают с идентификаторами, используемыми для универсальных бинарных wheel-пакетов 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 с помощью shell-скрипта 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

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

  • profile-opt (настраивается с помощью --enable-optimizations)
  • build_wasm (выбирается, если целевая платформа совпадает с wasm32-wasi* или wasm32-emscripten)
  • 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 (make all или просто make), используйте параметр configure --enable-optimizations.

3.4.3.4. make clean

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

3.4.3.5. make distclean

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

3.4.3.6. make install

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

3.4.3.7. make test

Собрать цель all и запустить набор тестов Python с параметром --fast-ci, исключая тесты с GUI. Переменные:

  • TESTOPTS: дополнительные параметры командной строки regrtest.
  • TESTPYTHONOPTS: дополнительные параметры командной строки Python.
  • TESTTIMEOUT: время ожидания в секундах (по умолчанию: 10 минут).

3.4.3.8. make ci

Эта команда похожа на make test, но использует -ugui, чтобы также запускать тесты с GUI.

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

3.4.3.9. make buildbottest

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

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

Для создания целей Makefile для сборки расширений C используется Modules/Setup. В начале файлов расширения 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, поскольку дистрибутивы не могут контролировать, соответствуют ли установленныe пользователями пакеты таким повышенным требованиям.

Добавлено в версии 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.

CFLAGS_CEVAL

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

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

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.

Сноски

[6]

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

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

Spec-Zone.ru

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