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
.
-
--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. Параметры установки¶
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. Параметры компоновщика¶
Включить сборку общей библиотеки 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. Используйте его, когда флаг компилятора не должен не быть частью distutilsCFLAGS
после установки 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.