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