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

3.1. Настроить параметры

Перечислите все параметры сценария ./configure, используя:

./configure --help

См. также Misc/SpecialBuilds.txt в исходном дистрибутиве Python.

3.1.1. Общие параметры

--enable-loadable-sqlite-extensions

Поддержка загружаемых расширений в модуле расширения _sqlite (по умолчанию - нет).

См. метод sqlite3.Connection.enable_load_extension() модуля sqlite3.

Добавлено в версии 3.6.

--disable-ipv6

Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль socket.

--enable-big-digits=[15|30]

Определите размер в битах цифр Python int: 15 или 30 бит.

По умолчанию количество бит выбирается в зависимости от sizeof(void*): 30 бит, если размер void* 64-бита или больше, 15 бит в противном случае.

Определите PYLONG_BITS_IN_DIGIT в 15 или 30.

См. sys.int_info.bits_per_digit.

--with-cxx-main
--with-cxx-main=COMPILER

Скомпилировать функцию Python main() и связать исполняемый файл Python с компилятором C++: $CXX, или COMPILER, если указано.

--with-suffix=SUFFIX

Установите суффикс исполняемого файла Python на SUFFIX.

Суффикс по умолчанию - .exe в Windows и macOS (python.exe исполняемый файл), и пустая строка на других платформах (python исполняемый файл).

--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 разделитель путей.

Добавлено в версии 3.9.

--without-decimal-contextvar

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

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

Добавлено в версии 3.9.

--with-dbmliborder=db1:db2:...

Переопределение порядка проверки бэкендов db для модуля 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.

3.1.2. Параметры установки

--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.1.3. Варианты исполнения

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

--enable-optimizations

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

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

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

Добавлено в версии 3.6.

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

PROFILE_TASK

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

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

Добавлено в версии 3.8.

--with-lto

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

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

Добавлено в версии 3.6.

--with-computed-gotos

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

--without-pymalloc

Отключите специализированный распределитель памяти Python pymalloc (по умолчанию включен).

См. также переменную окружения PYTHONMALLOC.

--without-doc-strings

Отключите статические строки документации для уменьшения занимаемой памяти (включено по умолчанию). Строки документации, определенные в Python, не затрагиваются.

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

См. макрос PyDoc_STRVAR().

--enable-profiling

Включите профилирование кода на уровне C с помощью gprof (по умолчанию отключено).

3.1.4. Отладочная сборка Python

Отладочная сборка - это сборка Python с опцией configure --with-pydebug.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также опции Python Development Mode и --with-trace-refs configure.

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

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

--with-pydebug

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

--with-trace-refs

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

Эффекты:

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

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

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

Эта сборка не совместима по ABI со сборкой release (сборка по умолчанию) или сборкой debug (макросы Py_DEBUG и Py_REF_DEBUG).

Добавлено в версии 3.8.

--with-assertions

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

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

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

Добавлено в версии 3.6.

--with-valgrind

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

--with-dtrace

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

См. Instrumenting CPython with DTrace and 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.

3.1.6. Параметры компоновщика

--enable-shared

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

--without-static-libpython

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

Добавлено в версии 3.10.

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

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

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

--with-system-expat

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

--with-system-ffi

Соберите модуль расширения _ctypes, используя установленную библиотеку ffi, см. модуль ctypes (по умолчанию зависит от системы).

--with-system-libmpdec

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

Добавлено в версии 3.3.

--with-readline=editline

Используйте библиотеку editline для бэкенда модуля readline.

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

Добавлено в версии 3.10.

--without-readline

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

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

Добавлено в версии 3.10.

--with-tcltk-includes='-I...'

Запрет поиска включаемых файлов Tcl и Tk.

--with-tcltk-libs='-L...'

Переопределение поиска библиотек Tcl и Tk.

--with-libm=STRING

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

--with-libc=STRING

Переопределить libc библиотеки C на 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.1.8. Параметры безопасности

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

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

  • siphash24 (по умолчанию).

  • fnv;

Добавлено в версии 3.4.

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

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

  • md5;

  • sha1;

  • sha256;

  • sha512;

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

  • 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.1.9. Параметры macOS

См. Mac/README.rst.

--enable-universalsdk
--enable-universalsdk=SDKDIR

Создайте универсальную бинарную сборку. SDKDIR указывает, какой macOS SDK следует использовать для выполнения сборки (по умолчанию нет).

--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.2. Система сборки Python

3.2.1. Основные файлы системы сборки

  • configure.ac => configure;

  • Makefile.pre.in => Makefile (создан configure);

  • pyconfig.h (создан configure);

  • Modules/Setup: Расширения C, собранные Makefile с помощью сценария оболочки Module/makesetup;

  • setup.py: Расширения C, построенные с использованием модуля distutils.

3.2.2. Основные этапы сборки

  • Файлы C (.c) собираются как объектные файлы (.o).

  • Из файлов объектов создается статическая библиотека libpython (.a).

  • python.o и статическая библиотека libpython подключаются к конечной программе python.

  • Расширения C собираются с помощью Makefile (см. Modules/Setup) и python setup.py build.

3.2.3. Основные цели Makefile

  • make: Сборка Python со стандартной библиотекой.

  • make platform:: собрать программу python, но не собирать модули расширения стандартной библиотеки.

  • make profile-opt: сборка Python с использованием Profile Guided Optimization (PGO). Вы можете использовать опцию configure --enable-optimizations, чтобы сделать ее целью по умолчанию для команды make (make all или просто make).

  • make buildbottest: Сборка Python и запуск набора тестов Python, так же, как buildbots тестирует Python. Установите переменную TESTTIMEOUT (в секундах), чтобы изменить таймаут теста (по умолчанию 1200: 20 минут).

  • make install: Сборка и установка Python.

  • make regen-all: Регенерировать (почти) все сгенерированные файлы; make regen-stdlib-module-names и autoconf должны быть запущены отдельно для оставшихся сгенерированных файлов.

  • make clean: Удалить собранные файлы.

  • make distclean: То же, что и make clean, но удаляются также файлы, созданные скриптом configure.

3.2.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__'

Другие расширения языка Си собираются как динамические библиотеки, например, модуль _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*, собираются как динамические библиотеки.

Сценарий setup.py собирает расширения C только как разделяемые библиотеки, используя модуль distutils.

Макросы PyAPI_FUNC(), PyAPI_API() и PyMODINIT_FUNC() в Include/pyport.h определяются по-разному в зависимости от того, определен ли макрос Py_BUILD_CORE_MODULE:

  • Используйте Py_EXPORTED_SYMBOL, если Py_BUILD_CORE_MODULE определено

  • В противном случае используйте Py_IMPORTED_SYMBOL.

Если макрос Py_BUILD_CORE_BUILTIN по ошибке используется в расширении C, собранном как разделяемая библиотека, его функция PyInit_xxx() не экспортируется, вызывая ошибку ImportError при импорте.

3.3. Флаги компилятора и компоновщика

Параметры, установленные сценарием ./configure и переменными окружения и используемые Makefile.

3.3.1. Флаги препроцессора

CONFIGURE_CPPFLAGS

Значение переменной CPPFLAGS, переданной в сценарий ./configure.

Добавлено в версии 3.6.

CPPFLAGS

(Объективные) флаги препроцессора C/C++, например, -I<include dir>, если заголовки находятся в нестандартном каталоге <include dir>.

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

BASECPPFLAGS

Добавлено в версии 3.4.

PY_CPPFLAGS

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

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

Добавлено в версии 3.2.

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

CC

Команда компилятора языка Си.

Пример: gcc -pthread.

MAINCC

Команда компилятора языка Си, используемая для построения функции main() в программах типа python.

Переменная, устанавливаемая опцией --with-cxx-main скрипта configure.

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

CXX

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

Используется, если используется опция --with-cxx-main.

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

CFLAGS

Флаги компилятора языка Си.

CFLAGS_NODIST

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

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

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

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

Добавлено в версии 3.5.

EXTRA_CFLAGS

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

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.3.3. Флаги компоновщика

LINKCC

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

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

CONFIGURE_LDFLAGS

Значение переменной LDFLAGS, переданной в сценарий ./configure.

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

Добавлено в версии 3.2.

LDFLAGS_NODIST

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

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

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

CONFIGURE_LDFLAGS_NODIST

Значение переменной LDFLAGS_NODIST, переданной в сценарий ./configure.

Добавлено в версии 3.8.

LDFLAGS

Флаги компоновщика, например, -L<lib dir>, если библиотеки находятся в нестандартном каталоге <lib dir>.

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

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.

Вернуться на верх