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