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