Настройка Python
3.1. Требования к сборке
Возможности и минимальные версии, необходимые для сборки CPython:
- Компилятор C11. Необязательные возможности C11 не требуются.
- В Windows требуется Microsoft Visual Studio 2017 или более поздняя версия.
- Поддержка чисел с плавающей запятой стандарта IEEE 754 и нечисловых значений (NaN) с плавающей запятой.
- Поддержка потоков.
- Минимальная требуемая версия OpenSSL — 1.1.1, рекомендуемая минимальная версия — OpenSSL 3.0.18 для модулей расширения
sslиhashlib. - SQLite 3.15.2 для модуля расширения
sqlite3. - Tcl/Tk 8.5.12 для модуля
tkinter. -
libmpdec 2.5.0 для модуля
decimal. - Для повторной генерации скрипта
configureтребуются Autoconf 2.71 и aclocal 1.16.5.
Изменено в версии 3.1: Теперь требуется Tcl/Tk версии 8.3.1.
Изменено в версии 3.5: В Windows теперь требуется Visual Studio 2015 или более поздняя версия. Теперь требуется Tcl/Tk версии 8.4.
Изменено в версии 3.6: Теперь требуются отдельные возможности C99, например функции <stdint.h> и static
inline.
Изменено в версии 3.7: Теперь требуются поддержка потоков и OpenSSL 1.0.2.
Изменено в версии 3.10: Теперь требуется OpenSSL 1.1.1. Требуется SQLite 3.7.15.
Изменено в версии 3.11: Теперь требуются компилятор C11, поддержка IEEE 754 и NaN. В Windows требуется Visual Studio 2017 или более поздняя версия. Теперь для модуля tkinter требуется Tcl/Tk версии 8.5.12.
Изменено в версии 3.13: Теперь требуются Autoconf 2.71, aclocal 1.16.5 и SQLite 3.15.2.
См. также PEP 7 «Руководство по стилю кода на C» и PEP 11 «Поддерживаемые платформы CPython».
3.2. Сгенерированные файлы
Чтобы уменьшить количество зависимостей для сборки, исходный код Python содержит несколько сгенерированных файлов. Команды для повторной генерации всех сгенерированных файлов:
make regen-all make regen-stdlib-module-names make regen-limited-abi make regen-configure
В файле Makefile.pre.in описаны сгенерированные файлы, их исходные данные и инструменты, используемые для их повторной генерации. Ищите цели make regen-*.
3.2.1. Скрипт configure
Команда make regen-configure повторно генерирует файл aclocal.m4 и скрипт configure с помощью shell-скрипта Tools/build/regen-configure.sh, который использует контейнер Ubuntu для получения тех же версий инструментов и обеспечения воспроизводимого результата.
Контейнер необязателен, следующую команду можно выполнить локально:
autoreconf -ivf -Werror
Сгенерированные файлы могут различаться в зависимости от точных версий autoconf-archive, aclocal и pkg-config.
3.3. Параметры конфигурации
Список всех параметров скрипта configure:
./configure --help
См. также Misc/SpecialBuilds.txt в исходном дистрибутиве Python.
3.3.1. Общие параметры
-
--enable-loadable-sqlite-extensions -
Поддержка загружаемых расширений в модуле расширения
_sqlite(по умолчанию отключена) модуляsqlite3.См. метод
sqlite3.Connection.enable_load_extension()модуляsqlite3.Добавлено в версии 3.6.
-
--disable-ipv6 -
Отключить поддержку IPv6 (по умолчанию включена, если поддерживается); см. модуль
socket.
-
--enable-big-digits=[15|30] -
Задать размер цифр Python
intв битах: 15 или 30 бит.По умолчанию размер цифры равен 30.
Задать
PYLONG_BITS_IN_DIGITравным15или30.
-
--with-suffix=SUFFIX -
Задать суффикс исполняемого файла Python: SUFFIX.
По умолчанию суффикс равен
.exeв Windows и macOS (исполняемый файлpython.exe),.jsв Emscripten node,.htmlв браузере Emscripten,.wasmв WASI и пустой строке на других платформах (исполняемый файлpython).Изменено в версии 3.11: Суффикс по умолчанию на платформе WASM — один из следующих:
.js,.htmlили.wasm.
-
--with-tzpath=<list of absolute paths separated by pathsep> -
Выбрать путь поиска часовых поясов по умолчанию для
zoneinfo.TZPATH. См. раздел Конфигурация во время компиляции модуляzoneinfo.По умолчанию:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.См. разделитель путей
os.pathsep.Добавлено в версии 3.9.
-
--without-decimal-contextvar -
Собрать модуль расширения
_decimalс использованием контекста, локального для потока, а не контекста, локального для сопрограммы (по умолчанию); см. модульdecimal.См.
decimal.HAVE_CONTEXTVARи модульcontextvars.Добавлено в версии 3.9.
-
--with-dbmliborder=<list of backend names> -
Переопределить порядок проверки серверных модулей БД для модуля
dbmДопустимое значение — строка с именами серверных модулей, разделёнными двоеточием (
:):-
ndbm; -
gdbm; -
bdb.
-
-
--without-c-locale-coercion -
Отключить принудительное преобразование локали C в локаль на основе UTF-8 (по умолчанию включено).
Не определять макрос
PY_COERCE_C_LOCALE.См.
PYTHONCOERCECLOCALEи PEP 538.
-
--without-freelists -
Отключить все свободные списки, кроме единственного пустого кортежа.
Добавлено в версии 3.11.
-
--with-platlibdir=DIRNAME -
Имя каталога библиотек Python (по умолчанию
lib).В Fedora и SuSE на 64-разрядных платформах используется
lib64.См.
sys.platlibdir.Добавлено в версии 3.9.
-
--with-wheel-pkg-dir=PATH -
Каталог пакетов wheel, используемых модулем
ensurepip(по умолчанию отсутствует).Рекомендации по упаковке некоторых дистрибутивов Linux не предусматривают включение зависимостей в комплект. Например, Fedora устанавливает пакеты wheel в каталог
/usr/share/python-wheels/и не устанавливает пакетensurepip._bundled.Добавлено в версии 3.10.
-
--with-pkg-config=[check|yes|no] -
Должна ли команда configure использовать pkg-config для обнаружения зависимостей сборки.
-
check(по умолчанию): pkg-config необязателен -
yes: pkg-config обязателен -
no: configure не использует pkg-config, даже если он установлен
Добавлено в версии 3.11.
-
-
--enable-pystats -
Включить сбор внутренней статистики производительности Python.
По умолчанию сбор статистики выключен. Используйте команду
python3 -X pystatsили задайте переменную средыPYTHONSTATS=1, чтобы включить сбор статистики при запуске Python.При выходе из Python сохранить статистику, если её сбор был включён и она не была очищена.
Последствия:
- Добавляется параметр командной строки
-X pystats. - Добавляется переменная среды
PYTHONSTATS. - Определяется макрос
Py_STATS. -
В модуль
sysдобавляются функции:-
sys._stats_on(): включает сбор статистики. -
sys._stats_off(): выключает сбор статистики. -
sys._stats_clear(): очищает статистику. -
sys._stats_dump(): сохраняет статистику в файл и очищает её.
-
Статистика будет сохранена в произвольный (вероятно, уникальный) файл в каталоге
/tmp/py_stats/(Unix) илиC:\temp\py_stats\(Windows). Если такого каталога нет, результаты будут выведены в stderr.Для чтения статистики используйте
Tools/scripts/summarize_stats.py.Статистика:
-
Опкоды:
- Специализация: успех, сбой, попадание, отложенный вызов, промах, деоптимизация, сбои;
- Количество выполнений;
- Количество пар.
-
Вызовы:
- Встроенные вызовы Python;
- Вызовы PyEval;
- Создано кадров;
- Создано объектов кадров;
- Вызовы Eval: vector, generator, legacy, function VECTORCALL, build class, slot, function «ex», API, method.
-
Объекты:
- incref и decref;
- incref и decref интерпретатора;
- выделение памяти: все, 512 байт, 4 КиБ, большой размер;
- освобождение памяти;
- перемещения в свободные списки и из них;
- материализация/дематериализация словаря;
- кэш типов;
- попытки оптимизации;
- создание/выполнение трасс оптимизации;
- выполненные uops.
-
Сборщик мусора:
- Сборки мусора;
- Посещённые объекты;
- Собранные объекты.
Добавлено в версии 3.11.
- Добавляется параметр командной строки
-
--disable-gil -
Включает экспериментальную поддержку запуска Python без глобальной блокировки интерпретатора (GIL): сборку без GIL.
Определяет макрос
Py_GIL_DISABLEDи добавляет"t"вsys.abiflags.Подробнее см. CPython без GIL.
Добавлено в версии 3.13.
-
--enable-experimental-jit=[no|yes|yes-off|interpreter] -
Указать способ интеграции JIT-компилятора.
-
no— собрать интерпретатор без JIT. -
yes— собрать интерпретатор с JIT. -
yes-off— собрать интерпретатор с JIT, но отключить его по умолчанию. -
interpreter— собрать интерпретатор без JIT, но с включённым интерпретатором второго уровня.
По соглашению,
--enable-experimental-jit— сокращение для--enable-experimental-jit=yes.Примечание
При сборке CPython с включённым JIT убедитесь, что в системе установлена Python версии 3.11 или новее.
Добавлено в версии 3.13.
-
-
PKG_CONFIG -
Путь к утилите
pkg-config.
-
PKG_CONFIG_LIBDIR
-
PKG_CONFIG_PATH -
Параметры
pkg-config.
3.3.2. Параметры компилятора C
-
CC -
Команда компилятора C.
-
CFLAGS -
Флаги компилятора C.
-
CPP -
Команда препроцессора C.
-
CPPFLAGS -
Флаги препроцессора C, например
-Iinclude_dir.
3.3.3. Параметры компоновщика
-
LDFLAGS -
Флаги компоновщика, например
-Llibrary_directory.
-
LIBS -
Библиотеки, передаваемые компоновщику, например
-llibrary.
-
MACHDEP -
Имя файлов библиотек, зависящих от архитектуры машины.
3.3.4. Параметры сторонних зависимостей
Добавлено в версии 3.11.
-
BZIP2_CFLAGS
-
BZIP2_LIBS -
Флаги компилятора C и компоновщика для связывания Python с
libbz2, используемой модулемbz2, переопределяющиеpkg-config.
-
CURSES_CFLAGS
-
CURSES_LIBS -
Флаги компилятора C и компоновщика для
libncursesилиlibncursesw, используемых модулемcurses, переопределяющиеpkg-config.
-
GDBM_CFLAGS
-
GDBM_LIBS -
Флаги компилятора C и компоновщика для
gdbm.
-
LIBB2_CFLAGS
-
LIBB2_LIBS -
Флаги компилятора C и компоновщика для
libb2(BLAKE2), используемой модулемhashlib, переопределяющиеpkg-config.
-
LIBEDIT_CFLAGS
-
LIBEDIT_LIBS -
Флаги компилятора C и компоновщика для
libedit, используемой модулемreadline, переопределяющиеpkg-config.
-
LIBFFI_CFLAGS
-
LIBFFI_LIBS -
Флаги компилятора C и компоновщика для
libffi, используемой модулемctypes, переопределяющиеpkg-config.
-
LIBMPDEC_CFLAGS
-
LIBMPDEC_LIBS -
Флаги компилятора C и компоновщика для
libmpdec, используемой модулемdecimal, переопределяющиеpkg-config.Примечание
Эти переменные среды не оказывают влияния, если не указан параметр
--with-system-libmpdec.
-
LIBLZMA_CFLAGS
-
LIBLZMA_LIBS -
Флаги компилятора C и компоновщика для
liblzma, используемой модулемlzma, переопределяющиеpkg-config.
-
LIBREADLINE_CFLAGS
-
LIBREADLINE_LIBS -
Флаги компилятора C и компоновщика для
libreadline, используемой модулемreadline, переопределяющиеpkg-config.
-
LIBSQLITE3_CFLAGS
-
LIBSQLITE3_LIBS -
Флаги компилятора C и компоновщика для
libsqlite3, используемой модулемsqlite3, переопределяющиеpkg-config.
-
LIBUUID_CFLAGS
-
LIBUUID_LIBS -
Флаги компилятора C и компоновщика для
libuuid, используемой модулемuuid, переопределяющиеpkg-config.
-
PANEL_CFLAGS
-
PANEL_LIBS -
Флаги компилятора C и компоновщика для PANEL, переопределяющие
pkg-config.Флаги компилятора C и компоновщика для
libpanelилиlibpanelw, используемых модулемcurses.panel, переопределяющиеpkg-config.
-
TCLTK_CFLAGS
-
TCLTK_LIBS -
Флаги компилятора C и компоновщика для TCLTK, переопределяющие
pkg-config.
-
ZLIB_CFLAGS
-
ZLIB_LIBS -
Флаги компилятора C и компоновщика для
libzlib, используемой модулемgzip, переопределяющиеpkg-config.
3.3.5. Параметры WebAssembly
-
--with-emscripten-target=[browser|node] -
Задать вариант сборки для
wasm32-emscripten.-
browser(по умолчанию): предварительно загрузить минимальную стандартную библиотеку, MEMFS по умолчанию. -
node: поддержка NODERAWFS и pthread.
Добавлено в версии 3.11.
-
-
--enable-wasm-dynamic-linking -
Включить поддержку динамической компоновки для WASM.
Динамическая компоновка включает
dlopen. Размер исполняемого файла увеличивается из-за ограниченных возможностей удаления неиспользуемого кода и дополнительных функций.Добавлено в версии 3.11.
-
--enable-wasm-pthreads -
Включить поддержку pthread для WASM.
Добавлено в версии 3.11.
3.3.6. Параметры установки
-
--prefix=PREFIX -
Установить независимые от архитектуры файлы в PREFIX. В Unix по умолчанию используется
/usr/local.Это значение можно получить во время выполнения с помощью
sys.prefix.Например, можно использовать
--prefix="$HOME/.local/", чтобы установить Python в домашний каталог.
-
--exec-prefix=EPREFIX -
Установить зависящие от архитектуры файлы в EPREFIX; по умолчанию используется
--prefix.Это значение можно получить во время выполнения с помощью
sys.exec_prefix.
-
--disable-test-modules -
Не собирать и не устанавливать тестовые модули, такие как пакет
testили модуль расширения_testcapi(по умолчанию они собираются и устанавливаются).Добавлено в версии 3.10.
-
--with-ensurepip=[upgrade|install|no] -
Выбрать команду
ensurepip, выполняемую при установке Python:-
upgrade(по умолчанию): выполнить командуpython -m ensurepip --altinstall --upgrade. -
install: выполнить командуpython -m ensurepip --altinstall; -
no: не запускать ensurepip;
Добавлено в версии 3.6.
-
3.3.7. Параметры производительности
Для достижения наилучшей производительности рекомендуется собирать Python с помощью --enable-optimizations --with-lto (PGO + LTO). Для повышения производительности также можно использовать экспериментальный флаг --enable-bolt.
-
--enable-optimizations -
Включить оптимизацию с профилированием (PGO) с помощью
PROFILE_TASK(по умолчанию отключена).Для PGO компилятору C Clang требуется программа
llvm-profdata. В macOS она также требуется GCC: в macOS GCC — это просто псевдоним Clang.Если используется
--enable-sharedи GCC, отключите также семантическую интерпозицию в libpython: добавьте-fno-semantic-interpositionво флаги компилятора и компоновщика.Примечание
Во время сборки могут появиться предупреждения компилятора о недоступности данных профиля для некоторых исходных файлов. Эти предупреждения безвредны, поскольку при сборе данных профиля выполняется только часть кода. Чтобы отключить эти предупреждения в Clang, подавите их вручную, добавив
-Wno-profile-instr-unprofiledвCFLAGS.Добавлено в версии 3.6.
Изменено в версии 3.10: В GCC используется
-fno-semantic-interposition.
-
PROFILE_TASK -
Переменная среды, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.
По умолчанию:
-m test --pgo --timeout=$(TESTTIMEOUT).Добавлено в версии 3.8.
Изменено в версии 3.13: Сбой задачи больше не игнорируется без уведомления.
-
--with-lto=[full|thin|no|yes] -
Включить оптимизацию времени компоновки (LTO) при любой сборке (по умолчанию отключена).
Компилятору C Clang для LTO требуется
llvm-ar(arв macOS), а также компоновщик с поддержкой LTO (ld.goldилиlld).Добавлено в версии 3.6.
Добавлено в версии 3.11: Чтобы использовать функцию ThinLTO, в Clang используйте
--with-lto=thin.Изменено в версии 3.12: В Clang ThinLTO используется как стратегия оптимизации по умолчанию, если компилятор принимает этот флаг.
-
--enable-bolt -
Включить использование оптимизатора двоичных файлов BOLT, работающего после компоновки (по умолчанию отключено).
BOLT входит в проект LLVM, но не всегда включён в его двоичные дистрибутивы. Для этого флага необходимы
llvm-boltиmerge-fdata.BOLT — пока ещё довольно новый проект, поэтому на данный момент этот флаг следует считать экспериментальным. Поскольку этот инструмент работает с машинным кодом, его успешное применение зависит от сочетания среды сборки, других аргументов configure для оптимизации и архитектуры ЦП; поддерживаются не все сочетания. Известно, что версии BOLT до LLVM 16 в некоторых случаях аварийно завершают работу. Настоятельно рекомендуется использовать для оптимизации BOLT LLVM 16 или новее.
Переменные configure
BOLT_INSTRUMENT_FLAGSиBOLT_APPLY_FLAGSможно задать, чтобы переопределить набор аргументов по умолчанию для llvm-bolt при инструментировании и применении данных BOLT к двоичным файлам соответственно.Добавлено в версии 3.12.
-
BOLT_APPLY_FLAGS -
Аргументы для
llvm-boltпри создании двоичного файла, оптимизированного с помощью BOLT.Добавлено в версии 3.12.
-
BOLT_INSTRUMENT_FLAGS -
Аргументы для
llvm-boltпри инструментировании двоичных файлов.Добавлено в версии 3.12.
-
--with-computed-gotos -
Включить вычисляемые переходы в цикле интерпретации (по умолчанию включены для поддерживаемых компиляторов).
-
--without-mimalloc -
Отключить быстрый распределитель памяти mimalloc (по умолчанию включён).
См. также переменную среды
PYTHONMALLOC.
-
--without-pymalloc -
Отключить специализированный распределитель памяти Python pymalloc (по умолчанию включён).
См. также переменную среды
PYTHONMALLOC.
-
--without-doc-strings -
Отключить статические строки документации для уменьшения объёма используемой памяти (по умолчанию включены). Строки документации, определённые в Python, не затрагиваются.
Не определять макрос
WITH_DOC_STRINGS.См. макрос
PyDoc_STRVAR().
-
--enable-profiling -
Включить профилирование кода на уровне C с помощью
gprof(по умолчанию отключено).
-
--with-strict-overflow -
Добавить
-fstrict-overflowво флаги компилятора C (по умолчанию вместо этого добавляется-fno-strict-overflow).
3.3.8. Отладочная сборка Python
Отладочная сборка — это сборка Python с параметром configure --with-pydebug.
Особенности отладочной сборки:
- По умолчанию отображаются все предупреждения: список фильтров предупреждений по умолчанию в модуле
warningsпуст. - Добавляется
dвsys.abiflags. - Добавляется функция
sys.gettotalrefcount(). - Добавляется параметр командной строки
-X showrefcount. - Добавляются параметр командной строки
-dи переменная средыPYTHONDEBUGдля отладки анализатора. - Добавляется поддержка переменной
__lltrace__: если переменная определена, в цикле интерпретации байт-кода включается низкоуровневая трассировка. - Устанавливаются отладочные перехватчики распределителей памяти для обнаружения переполнения буфера и других ошибок памяти.
- Определяются макросы
Py_DEBUGиPy_REF_DEBUG. -
Добавляются проверки во время выполнения: код, обрамлённый
#ifdef Py_DEBUGи#endif. Включаются проверкиassert(...)и_PyObject_ASSERT(...): не задавайте макросNDEBUG(см. также параметр configure--with-assertions). Основные проверки во время выполнения:- Добавляются проверки корректности аргументов функций.
- Объекты Unicode и int создаются с заполненной шаблоном памятью для обнаружения использования неинициализированных объектов.
- Проверяется, что функции, которые могут очистить или заменить текущее исключение, не вызываются при поднятом исключении.
- Проверяется, что функции освобождения памяти не изменяют текущее исключение.
- Сборщик мусора (функция
gc.collect()) выполняет базовые проверки согласованности объектов. - Макрос
Py_SAFE_DOWNCAST()проверяет целочисленное переполнение и потерю значащих разрядов при приведении широких типов к узким.
См. также режим разработки Python и параметр configure --with-trace-refs.
Изменено в версии 3.8: Релизные и отладочные сборки теперь совместимы на уровне ABI: определение макроса Py_DEBUG больше не подразумевает определение макроса Py_TRACE_REFS (см. параметр --with-trace-refs).
3.3.9. Параметры отладки
-
--with-pydebug -
Собрать Python в режиме отладки: определить макрос
Py_DEBUG(по умолчанию отключено).
-
--with-trace-refs -
Включить трассировку ссылок для отладки (по умолчанию отключена).
Эффекты:
- Определяется макрос
Py_TRACE_REFS. - Добавляется функция
sys.getobjects(). - Добавляется переменная среды
PYTHONDUMPREFS.
Переменную среды
PYTHONDUMPREFSможно использовать для вывода объектов и счётчиков ссылок, остающихся активными при завершении Python.Статически размещённые объекты не трассируются.
Добавлено в версии 3.8.
Изменено в версии 3.13: Эта сборка теперь совместима на уровне ABI с релизной и отладочной сборками.
- Определяется макрос
-
--with-assertions -
Собрать с включёнными проверками C (по умолчанию отключены):
assert(...);и_PyObject_ASSERT(...);.Если параметр задан, макрос
NDEBUGне определяется в переменной компилятораOPT.См. также параметр
--with-pydebug(отладочная сборка), который также включает проверки.Добавлено в версии 3.6.
-
--with-valgrind -
Включить поддержку Valgrind (по умолчанию отключена).
-
--with-dtrace -
Включить поддержку DTrace (по умолчанию отключена).
См. Инструментирование CPython с помощью DTrace и SystemTap.
Добавлено в версии 3.6.
-
--with-address-sanitizer -
Включить AddressSanitizer — средство обнаружения ошибок памяти,
asan(по умолчанию отключено). Для повышения возможностей обнаружения ASan можно также использовать этот параметр вместе с--without-pymalloc, чтобы отключить специализированный распределитель небольших объектов, выделения памяти которого не отслеживаются ASan.Добавлено в версии 3.6.
-
--with-memory-sanitizer -
Включить MemorySanitizer — средство обнаружения ошибок выделения памяти,
msan(по умолчанию отключено).Добавлено в версии 3.6.
-
--with-undefined-behavior-sanitizer -
Включить UndefinedBehaviorSanitizer — средство обнаружения неопределённого поведения,
ubsan(по умолчанию отключено).Добавлено в версии 3.6.
-
--with-thread-sanitizer -
Включить ThreadSanitizer — средство обнаружения гонок данных,
tsan(по умолчанию отключено).Добавлено в версии 3.13.
3.3.10. Параметры компоновщика
-
Включить сборку общей библиотеки Python:
libpython(по умолчанию отключено).
-
--without-static-libpython -
Не собирать
libpythonMAJOR.MINOR.aи не устанавливатьpython.o(по умолчанию собирается и включено).Добавлено в версии 3.10.
3.3.11. Параметры библиотек
-
--with-libs='lib1 ...' -
Связать с дополнительными библиотеками (по умолчанию отключено).
-
--with-system-expat -
Собрать модуль
pyexpatс использованием установленной библиотекиexpat(по умолчанию отключено).
-
--with-system-libmpdec -
Собрать модуль расширения
_decimalс использованием установленной библиотекиmpdecimal; см. модульdecimal(по умолчанию включено).Добавлено в версии 3.3.
Изменено в версии 3.13: По умолчанию используется установленная библиотека
mpdecimal.Устарело с версии 3.13 и будет удалено в версии 3.16: Исходный код библиотеки
mpdecimalбольше не будет поставляться вместе с Python 3.16.См. также
-
--with-readline=readline|editline -
Выбрать библиотеку для модуля
readline.- readline: использовать readline в качестве библиотеки.
- editline: использовать editline в качестве библиотеки.
Добавлено в версии 3.10.
-
--without-readline -
Не собирать модуль
readline(по умолчанию собирается).Не определять макрос
HAVE_LIBREADLINE.Добавлено в версии 3.10.
-
--with-libm=STRING -
Заменить математическую библиотеку
libmна STRING (по умолчанию зависит от системы).
-
--with-libc=STRING -
Заменить библиотеку C
libcна STRING (по умолчанию зависит от системы).
-
--with-openssl=DIR -
Корневой каталог OpenSSL.
Добавлено в версии 3.7.
-
--with-openssl-rpath=[no|auto|DIR] -
Задать каталог библиотек времени выполнения (rpath) для библиотек OpenSSL:
-
no(по умолчанию): не задавать rpath; -
auto: автоматически определить rpath по--with-opensslиpkg-config; - DIR: явно задать rpath.
Добавлено в версии 3.10.
-
3.3.12. Параметры безопасности
-
--with-hash-algorithm=[fnv|siphash13|siphash24] -
Выбрать алгоритм хеширования для использования в
Python/pyhash.c:-
siphash13(по умолчанию); -
siphash24; -
fnv.
Добавлено в версии 3.4.
Добавлено в версии 3.11: Добавлен
siphash13; теперь он используется по умолчанию. -
-
--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2 -
Встроенные модули хеширования:
-
md5; -
sha1; -
sha256; -
sha512; -
sha3(с shake); -
blake2.
Добавлено в версии 3.9.
-
-
--with-ssl-default-suites=[python|openssl|STRING] -
Переопределить строку наборов шифров OpenSSL по умолчанию:
-
python(по умолчанию): использовать предпочтительный набор Python; -
openssl: оставить настройки OpenSSL по умолчанию без изменений; - STRING: использовать пользовательскую строку
См. модуль
ssl.Добавлено в версии 3.7.
Изменено в версии 3.10: Параметры
pythonи STRING также устанавливают TLS 1.2 в качестве минимальной версии протокола. -
3.3.13. Параметры macOS
См. Mac/README.rst.
-
--enable-universalsdk
-
--enable-universalsdk=SDKDIR -
Создать универсальную двоичную сборку. SDKDIR задаёт используемый для сборки SDK macOS (по умолчанию отключено).
-
--enable-framework
-
--enable-framework=INSTALLDIR -
Создать Python.framework вместо обычной установки Unix. Необязательный параметр INSTALLDIR задаёт путь установки (по умолчанию отключено).
-
--with-universal-archs=ARCH -
Указать тип создаваемой универсальной двоичной сборки. Этот параметр допустим только при заданном
--enable-universalsdk.Варианты:
-
universal2(x86-64 и arm64); -
32-bit(PPC и i386); -
64-bit(PPC64 и x86-64); -
3-way(i386, PPC и x86-64); -
intel(i386 и x86-64); -
intel-32(i386); -
intel-64(x86-64); -
all(PPC, i386, PPC64 и x86-64).
Обратите внимание: значения этого параметра конфигурации не совпадают с идентификаторами универсальных двоичных пакетов wheels для macOS. Подробности о тегах совместимости платформ упаковки, используемых в macOS, см. в руководстве пользователя по упаковке Python.
-
-
--with-framework-name=FRAMEWORK -
Указать имя фреймворка Python; применимо только в macOS и только при заданном
--enable-framework(по умолчанию:Python).
-
--with-app-store-compliance
-
--with-app-store-compliance=PATCH-FILE -
Стандартная библиотека Python содержит строки, которые, как известно, вызывают ошибки инструментов автоматической проверки при отправке приложений в магазины macOS и iOS. Если включить этот параметр, будет применён набор исправлений, предназначенных для обеспечения соответствия требованиям магазинов приложений. Также можно указать файл пользовательских исправлений. По умолчанию этот параметр отключён.
Добавлено в версии 3.13.
3.3.14. Параметры iOS
См. iOS/README.rst.
-
--enable-framework=INSTALLDIR -
Создать Python.framework. В отличие от macOS, аргумент INSTALLDIR, задающий путь установки, является обязательным.
-
--with-framework-name=FRAMEWORK -
Указать имя фреймворка (по умолчанию:
Python).
3.3.15. Параметры кросс-компиляции
Кросс-компиляция, также называемая кросс-сборкой, позволяет собрать Python для другой архитектуры ЦП или платформы. Для кросс-компиляции необходим интерпретатор Python для платформы сборки. Версия Python для сборки должна совпадать с версией Python для целевой платформы, собранной кросс-компиляцией.
-
--build=BUILD -
настроить сборку для BUILD; обычно это значение определяется программой config.guess.
-
--host=HOST -
выполнить кросс-компиляцию программ для запуска на HOST (целевой платформе)
-
--with-build-python=path/to/python -
путь к исполняемому файлу
pythonдля сборки при кросс-компиляцииДобавлено в версии 3.11.
-
CONFIG_SITE=file -
Переменная среды, указывающая на файл с переопределениями configure.
Пример файла config.site:
# config.site-aarch64 ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no
-
HOSTRUNNER -
Программа для запуска CPython для целевой платформы при кросс-компиляции.
Добавлено в версии 3.11.
Пример кросс-компиляции:
CONFIG_SITE=config.site-aarch64 ../configure \
--build=x86_64-pc-linux-gnu \
--host=aarch64-unknown-linux-gnu \
--with-build-python=../x86_64/python
3.4. Система сборки Python
3.4.1. Основные файлы системы сборки
-
configure.ac=>configure; -
Makefile.pre.in=>Makefile(создано с помощьюconfigure); -
pyconfig.h(создано с помощьюconfigure); -
Modules/Setup: расширения C, собираемые Makefile с помощью скрипта оболочкиModule/makesetup;
3.4.2. Основные этапы сборки
- Файлы C (
.c) собираются в объектные файлы (.o). - Из объектных файлов создаётся статическая библиотека
libpython(.a). -
python.oи статическая библиотекаlibpythonкомпонуются в итоговую программуpython. - Расширения C собираются с помощью Makefile (см.
Modules/Setup).
3.4.3. Основные цели Makefile
3.4.3.1. make
В большинстве случаев при пересборке после редактирования кода или обновления рабочей копии из upstream достаточно выполнить make. Согласно семантике Make, эта команда собирает цель по умолчанию — первую цель, определённую в Makefile. По традиции (в том числе в проекте CPython) обычно это цель all. Скрипт configure раскрывает переменную autoconf, @DEF_MAKE_ALL_RULE@, чтобы точно указать, какие цели будет собирать make
all. Предусмотрены три варианта:
-
profile-opt(настраивается с помощью--enable-optimizations) -
build_wasm(настраивается с помощью--with-emscripten-target) -
build_all(настраивается без явного использования двух других вариантов)
В зависимости от последних изменений исходных файлов Make пересоберёт все цели (объектные файлы и исполняемые файлы), которые считает устаревшими, в том числе при необходимости повторно запустит configure. Однако зависимостей между исходными файлами и целями много, и они поддерживаются вручную, поэтому иногда Make не располагает всей информацией, необходимой для корректного определения всех целей, которые нужно пересобрать. В зависимости от того, какие цели не будут пересобраны, могут возникнуть различные проблемы. Если у вас возникли проблемы со сборкой или тестами, которым вы не можете найти объяснение, make clean && make поможет обойти большинство проблем с зависимостями, хотя сборка займёт больше времени.
3.4.3.2. make platform
Собирает программу python, но не собирает модули расширения стандартной библиотеки. Создаёт файл с именем platform, содержащий одну строку с описанием платформы сборки, например macosx-14.3-arm64-3.12 или linux-x86_64-3.13.
3.4.3.3. make profile-opt
Собирает Python с оптимизацией на основе профиля (PGO). Можно использовать параметр configure --enable-optimizations, чтобы эта цель стала целью по умолчанию для команды make (make all или просто make).
3.4.3.4. make clean
Удаляет собранные файлы.
3.4.3.5. make distclean
Помимо действий, выполняемых командой make clean, удаляет файлы, созданные скриптом configure. Перед следующей сборкой необходимо будет выполнить configure. [1]
3.4.3.6. make install
Собирает цель all и устанавливает Python.
3.4.3.7. make test
Собирает цель all и запускает набор тестов Python с параметром --fast-ci. Переменные:
-
TESTOPTS: дополнительные параметры командной строки regrtest. -
TESTPYTHONOPTS: дополнительные параметры командной строки Python. -
TESTTIMEOUT: время ожидания в секундах (по умолчанию: 10 минут).
3.4.3.8. make buildbottest
Эта команда похожа на make test, но использует параметр --slow-ci и время ожидания по умолчанию 20 минут вместо параметра --fast-ci.
3.4.3.9. make regen-all
Повторно генерирует почти все созданные файлы. К ним относятся, помимо прочего, варианты байт-кода и файл генератора парсера. Для остальных сгенерированных файлов необходимо отдельно выполнить make regen-stdlib-module-names и autoconf.
3.4.4. Расширения C
Некоторые расширения C собираются как встроенные модули, например модуль sys. Они собираются с определённым макросом Py_BUILD_CORE_BUILTIN. У встроенных модулей нет атрибута __file__:
>>> import sys >>> sys <module 'sys' (built-in)> >>> sys.__file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'sys' has no attribute '__file__'
Другие расширения C собираются как динамические библиотеки, например модуль _asyncio. Они собираются с определённым макросом Py_BUILD_CORE_MODULE. Пример для Linux x86-64:
>>> import _asyncio >>> _asyncio <module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'> >>> _asyncio.__file__ '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
Modules/Setup используется для создания целей Makefile для сборки расширений C. В начале файлов расширения C собираются как встроенные модули. Расширения, определённые после маркера *shared*, собираются как динамические библиотеки.
Макросы PyAPI_FUNC(), PyAPI_DATA() и PyMODINIT_FUNC из Include/exports.h определяются по-разному в зависимости от того, определён ли макрос Py_BUILD_CORE_MODULE:
- Используйте
Py_EXPORTED_SYMBOL, если определёнPy_BUILD_CORE_MODULE - В противном случае используйте
Py_IMPORTED_SYMBOL.
Если по ошибке использовать макрос Py_BUILD_CORE_BUILTIN для расширения C, собираемого как разделяемая библиотека, его функция PyInit_xxx() не будет экспортирована, что приведёт к ошибке ImportError при импорте.
3.5. Флаги компилятора и компоновщика
Параметры, задаваемые скриптом ./configure и переменными среды, которые использует Makefile.
3.5.1. Флаги препроцессора
-
CONFIGURE_CPPFLAGS -
Значение переменной
CPPFLAGS, передаваемое скрипту./configure.Добавлено в версии 3.6.
-
CPPFLAGS -
Флаги препроцессора C/C++ (Objective-C), например
-Iinclude_dir, если заголовочные файлы находятся в нестандартном каталоге include_dir.Значения переменных оболочки должны быть включены и в
CPPFLAGS, и вLDFLAGS, чтобы можно было собирать модули расширения с использованием каталогов, указанных в переменных среды.
-
BASECPPFLAGS -
Добавлено в версии 3.4.
-
PY_CPPFLAGS -
Дополнительные флаги препроцессора, добавляемые при сборке объектных файлов интерпретатора.
По умолчанию:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).Добавлено в версии 3.2.
3.5.2. Флаги компилятора
-
CC -
Команда компилятора C.
Пример:
gcc -pthread.
-
CXX -
Команда компилятора C++.
Пример:
g++ -pthread.
-
CFLAGS -
Флаги компилятора C.
-
CFLAGS_NODIST -
CFLAGS_NODISTиспользуется для сборки интерпретатора и расширений стандартной библиотеки на C. Используйте эту переменную, если флаг компилятора не должен входить вCFLAGSпосле установки Python (gh-65320).В частности,
CFLAGSне должен содержать:- флаг компилятора
-I(для задания пути поиска включаемых файлов). Флаги-Iобрабатываются слева направо, поэтому любые флаги вCFLAGSбудут иметь приоритет над флагами-I, заданными пользователем или пакетом. - флаги усиления защиты, такие как
-Werror, поскольку дистрибутивы не могут контролировать, соответствуют ли установленный пользователями пакеты таким повышенным требованиям.
Добавлено в версии 3.5.
- флаг компилятора
-
COMPILEALL_OPTS -
Параметры, передаваемые в командной строке команде
compileallпри создании файлов PYC вmake install. По умолчанию:-j0.Добавлено в версии 3.12.
-
EXTRA_CFLAGS -
Дополнительные флаги компилятора C.
-
CONFIGURE_CFLAGS -
Значение переменной
CFLAGS, передаваемое скрипту./configure.Добавлено в версии 3.2.
-
CONFIGURE_CFLAGS_NODIST -
Значение переменной
CFLAGS_NODIST, передаваемое скрипту./configure.Добавлено в версии 3.5.
-
BASECFLAGS -
Базовые флаги компилятора.
-
OPT -
Флаги оптимизации.
-
CFLAGS_ALIASING -
Флаги строгого или нестрогого алиасинга, используемые для компиляции
Python/dtoa.c.Добавлено в версии 3.7.
-
CCSHARED -
Флаги компилятора, используемые для сборки разделяемой библиотеки.
Например, в Linux и BSD используется
-fPIC.
-
CFLAGSFORSHARED -
Дополнительные флаги C, добавляемые при сборке объектных файлов интерпретатора.
По умолчанию:
$(CCSHARED), если используется--enable-shared, в противном случае — пустая строка.
-
PY_CFLAGS -
По умолчанию:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).
-
PY_CFLAGS_NODIST -
По умолчанию:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.Добавлено в версии 3.5.
-
PY_STDMODULE_CFLAGS -
Флаги C, используемые при сборке объектных файлов интерпретатора.
По умолчанию:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).Добавлено в версии 3.7.
-
PY_CORE_CFLAGS -
По умолчанию:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.Добавлено в версии 3.2.
-
PY_BUILTIN_MODULE_CFLAGS -
Флаги компилятора для сборки модуля расширения стандартной библиотеки в качестве встроенного модуля, например модуля
posix.По умолчанию:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.Добавлено в версии 3.8.
-
PURIFY -
Команда Purify. Purify — это программа для отладки памяти.
По умолчанию: пустая строка (не используется).
3.5.3. Флаги компоновщика
-
LINKCC -
Команда компоновщика, используемая для сборки таких программ, как
pythonи_testembed.По умолчанию:
$(PURIFY) $(CC).
-
CONFIGURE_LDFLAGS -
Значение переменной
LDFLAGS, передаваемое скрипту./configure.Не присваивайте значения
CFLAGS,LDFLAGSи другим переменным, чтобы пользователи могли дополнять эти значения из командной строки, не затирая заранее заданные значения.Добавлено в версии 3.2.
-
LDFLAGS_NODIST -
LDFLAGS_NODISTиспользуется так же, какCFLAGS_NODIST. Используйте эту переменную, если флаг компоновщика не должен входить вLDFLAGSпосле установки Python (gh-65320).В частности,
LDFLAGSне должен содержать:- флаг компилятора
-L(для задания пути поиска библиотек). Флаги-Lобрабатываются слева направо, поэтому любые флаги вLDFLAGSбудут иметь приоритет над флагами-L, заданными пользователем или пакетом.
- флаг компилятора
-
CONFIGURE_LDFLAGS_NODIST -
Значение переменной
LDFLAGS_NODIST, передаваемое скрипту./configure.Добавлено в версии 3.8.
-
LDFLAGS -
Флаги компоновщика, например
-Llib_dir, если библиотеки находятся в нестандартном каталоге lib_dir.Значения переменных оболочки должны быть включены и в
CPPFLAGS, и вLDFLAGS, чтобы можно было собирать модули расширения с использованием каталогов, указанных в переменных среды.
-
LIBS -
Флаги компоновщика для передачи библиотек компоновщику при компоновке исполняемого файла Python.
Пример:
-lrt.
-
LDSHARED -
Команда для сборки разделяемой библиотеки.
По умолчанию:
@LDSHARED@ $(PY_LDFLAGS).
-
BLDSHARED -
Команда для сборки разделяемой библиотеки
libpython.По умолчанию:
@BLDSHARED@ $(PY_CORE_LDFLAGS).
-
PY_LDFLAGS -
По умолчанию:
$(CONFIGURE_LDFLAGS) $(LDFLAGS).
-
PY_LDFLAGS_NODIST -
По умолчанию:
$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST).Добавлено в версии 3.8.
-
PY_CORE_LDFLAGS -
Флаги компоновщика, используемые при сборке объектных файлов интерпретатора.
Добавлено в версии 3.8.
Сноски
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/using/configure.html