Spec-Zone.ru › Python 3.13

Настройка Python

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

Функции и минимальные версии, необходимые для сборки CPython:

  • Компилятор C11. Дополнительные функции C11 не требуются.
  • В Windows требуется Microsoft Visual Studio 2017 или более поздней версии.
  • Поддержка IEEE 754 чисел с плавающей точкой и чисел с плавающей точкой Not-a-Number (NaN).
  • Поддержка потоков.
  • OpenSSL 1.1.1 — минимальная версия, а OpenSSL 3.0.9 — рекомендуемая минимальная версия для модулей расширения ssl и hashlib.
  • SQLite 3.15.2 для модуля расширения sqlite3.
  • Tcl/Tk 8.5.12 для модуля tkinter.
  • Для перегенерации скрипта 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 документирует сгенерированные файлы, их входные данные и инструменты, используемые для их перегенерации. Поищите целевые значения regen-* make.

3.2.1. Скрипт configure

Команда make regen-configure перегенерирует файл aclocal.m4 и скрипт configure с помощью скрипта 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 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

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

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

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

Использовать ли pkg-config при конфигурировании для обнаружения зависимостей сборки?

  • check (по умолчанию): pkg-config является необязательным
  • yes: pkg-config является обязательным
  • no: 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, метод.
  • Объект:

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

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

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

--disable-gil

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

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

См. Free-threaded CPython для получения дополнительных сведений.

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

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

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

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

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

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

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

--enable-wasm-dynamic-linking

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

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

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

--enable-wasm-pthreads

Включить поддержку потоков для 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 (выключено по умолчанию).

Для компилятора C 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) в любой сборке (выключено по умолчанию).

Компилятор C 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 - еще довольно новый проект, поэтому этот флаг пока следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успех зависит от сочетания среды сборки + других параметров конфигурации оптимизации + архитектуры процессора, и не все сочетания поддерживаются. Известно, что версии BOLT до LLVM 16 в некоторых случаях приводят к сбою BOLT. Сильно рекомендуется использовать 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. Отладочная сборка 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 (по умолчанию выключено).

Добавлена в версии 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.15: Копия исходных кодов библиотеки mpdecimal больше не будет распространяться с Python 3.15.

См. также

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;
  • 32-bit;
  • 64-bit;
  • 3-way;
  • intel;
  • intel-32;
  • intel-64;
  • all.
--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

Переменная среды, которая указывает на файл с настройками кросс-компиляции.

Пример файла 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 shell;

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 (настроен с --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). Вы можете использовать опцию конфигурации --enable-optimizations, чтобы сделать её целевой задачей по умолчанию для команды make (make all или просто make).

3.4.3.4. make clean

Удалить скомпилированные файлы.

3.4.3.5. make distclean

Помимо работы make clean, удалить файлы, созданные скриптом конфигурации. 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++, например, -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

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

Например, -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 — это программа отладчика памяти.

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

END_OF_DOCUMENT_MARKER

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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/using/configure.html

Spec-Zone.ru

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