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.