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

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

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

  • Компилятор C11. Optional C11 features не требуется.

  • Для Windows требуется Microsoft Visual Studio 2017 или более поздняя версия.

  • Поддержка чисел с плавающей точкой IEEE 754 и floating point 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.4.

Изменено в версии 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.4 и SQLite 3.15.2.

См. также PEP 7 «Руководство по стилю кода на Си» и 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. сценарий конфигурации

Команда 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.

Added in version 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, .html в браузере Emscripten, .wasm в WASI, и пустая строка на других платформах (python исполняемый).

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

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

Выберите путь поиска часового пояса по умолчанию для zoneinfo.TZPATH. См. раздел Compile-time configuration модуля zoneinfo.

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

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

Added in version 3.9.

--without-decimal-contextvar

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

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

Added in version 3.9.

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

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

Правильным значением является строка с именами бэкэндов, разделенная двоеточием (:):

  • ndbm;

  • gdbm;

  • bdb.

--without-c-locale-coercion

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

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

Смотрите PYTHONCOERCECLOCALE и PEP 538.

--without-freelists

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

Added in version 3.11.

--with-platlibdir=DIRNAME

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

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

См. sys.platlibdir.

Added in version 3.9.

--with-wheel-pkg-dir=PATH

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

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

Added in version 3.10.

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

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

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

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

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

Added in version 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;

    • распределение: все, 512 байт, 4 килобайта, большое;

    • бесплатно;

    • в/из бесплатных списков;

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

    • тип кэша;

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

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

    • Выполненные операции.

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

    • Вывоз мусора;

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

    • Собранные предметы.

Added in version 3.11.

--disable-gil

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

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

Более подробную информацию см. в разделе Свободнопоточный CPython.

Added in version 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. Опции для сторонних зависимостей

Added in version 3.11.

BZIP2_CFLAGS
BZIP2_LIBS

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

CURSES_CFLAGS
CURSES_LIBS

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

GDBM_CFLAGS
GDBM_LIBS

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

LIBB2_CFLAGS
LIBB2_LIBS

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

LIBEDIT_CFLAGS
LIBEDIT_LIBS

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

LIBFFI_CFLAGS
LIBFFI_LIBS

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

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

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

Примечание

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

LIBLZMA_CFLAGS
LIBLZMA_LIBS

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

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

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

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

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

LIBUUID_CFLAGS
LIBUUID_LIBS

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

PANEL_CFLAGS
PANEL_LIBS

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

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

TCLTK_CFLAGS
TCLTK_LIBS

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

ZLIB_CFLAGS
ZLIB_LIBS

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

3.3.5. Параметры WebAssembly

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

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

  • browser (по умолчанию): предварительная загрузка минимальной stdlib, MEMFS по умолчанию.

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

Added in version 3.11.

--enable-wasm-dynamic-linking

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

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

Added in version 3.11.

--enable-wasm-pthreads

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

Added in version 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 (собираются и устанавливаются по умолчанию).

Added in version 3.10.

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

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

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

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

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

Added in version 3.6.

3.3.7. Варианты исполнения

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

--enable-optimizations

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

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

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

Примечание

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

Added in version 3.6.

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

PROFILE_TASK

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

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

Added in version 3.8.

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

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

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

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

Added in version 3.6.

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

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

--enable-bolt

Включите использование BOLT post-link binary optimizer (по умолчанию отключено).

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

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

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

Added in version 3.12.

BOLT_APPLY_FLAGS

Аргументы для llvm-bolt при создании BOLT optimized binary.

Added in version 3.12.

BOLT_INSTRUMENT_FLAGS

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

Added in version 3.12.

--with-computed-gotos

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

--without-mimalloc

Отключите быстрый аллокатор 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 configure.

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

  • Отображение всех предупреждений по умолчанию: в модуле warnings список фильтров предупреждений по умолчанию пуст.

  • Добавьте d к sys.abiflags.

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

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

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

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

  • Установите debug hooks on memory allocators для обнаружения переполнения буфера и других ошибок памяти.

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

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

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

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

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

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

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

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

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

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

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

--with-pydebug

Build Python in debug mode: определить макрос Py_DEBUG (по умолчанию отключен).

--with-trace-refs

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

Эффекты:

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

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

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

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

Statically allocated objects не отслеживаются.

Added in version 3.8.

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

--with-assertions

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

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

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

Added in version 3.6.

--with-valgrind

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

--with-dtrace

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

См. Instrumenting CPython with DTrace and SystemTap.

Added in version 3.6.

--with-address-sanitizer

Включить детектор ошибок памяти AddressSanitizer, asan (по умолчанию - нет).

Added in version 3.6.

--with-memory-sanitizer

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

Added in version 3.6.

--with-undefined-behavior-sanitizer

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

Added in version 3.6.

--with-thread-sanitizer

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

Added in version 3.13.

3.3.10. Параметры линкера

--enable-shared

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

--without-static-libpython

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

Added in version 3.10.

3.3.11. Варианты библиотек

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

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

--with-system-expat

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

--with-system-libmpdec

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

Added in version 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 в качестве бэкенда.

Added in version 3.10.

--without-readline

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

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

Added in version 3.10.

--with-libm=STRING

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

--with-libc=STRING

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

--with-openssl=DIR

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

Added in version 3.7.

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

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

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

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

  • DIR: установить явный путь rpath.

Added in version 3.10.

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

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

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

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

  • siphash24;

  • fnv.

Added in version 3.4.

Added in version 3.11: siphash13 добавляется и становится новым значением по умолчанию.

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

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

  • md5;

  • sha1;

  • sha256;

  • sha512;

  • sha3 (с встряской);

  • blake2.

Added in version 3.9.

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

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

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

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

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

См. модуль ssl.

Added in version 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).

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

configure для сборки на BUILD, обычно обозначается config.guess.

--host=HOST

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

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

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

Added in version 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 на хост-платформе для кросс-компиляции.

Added in version 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. сделать

По большей части, при перестройке после правки кода или обновлении чек-аута из 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. создать платформу

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

3.4.3.3. сделать профиль-опт

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

3.4.3.4. сделать чистым

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

3.4.3.5. навести порядок

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

3.4.3.6. произвести установку

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

3.4.3.7. провести тест

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

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

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

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

3.4.3.8. создать билдбот

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

3.4.3.9. сделать реген-все

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

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.

Added in version 3.6.

CPPFLAGS

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

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

BASECPPFLAGS

Added in version 3.4.

PY_CPPFLAGS

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

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

Added in version 3.2.

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

CC

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

Пример: gcc -pthread.

CXX

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

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

CFLAGS

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

CFLAGS_NODIST

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

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

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

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

Added in version 3.5.

COMPILEALL_OPTS

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

Added in version 3.12.

EXTRA_CFLAGS

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

CONFIGURE_CFLAGS

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

Added in version 3.2.

CONFIGURE_CFLAGS_NODIST

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

Added in version 3.5.

BASECFLAGS

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

OPT

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

CFLAGS_ALIASING

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

Added in version 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.

Added in version 3.5.

PY_STDMODULE_CFLAGS

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

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

Added in version 3.7.

PY_CORE_CFLAGS

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

Added in version 3.2.

PY_BUILTIN_MODULE_CFLAGS

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

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

Added in version 3.8.

PURIFY

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

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

3.5.3. Флаги линкера

LINKCC

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

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

CONFIGURE_LDFLAGS

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

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

Added in version 3.2.

LDFLAGS_NODIST

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

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

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

CONFIGURE_LDFLAGS_NODIST

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

Added in version 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).

Added in version 3.8.

PY_CORE_LDFLAGS

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

Added in version 3.8.

Сноски