Настройка 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. См. Конфигурация во время компиляции модуляzoneinfo.По умолчанию:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.См. разделитель путей
os.pathsep.Введено в версии 3.9.
-
--without-decimal-contextvar -
Скомпилировать модуль расширений
_decimalс использованием локального контекста потока вместо локального контекста корутины (по умолчанию), см. модульdecimal.См.
decimal.HAVE_CONTEXTVARи модульcontextvars.Введено в версии 3.9.
-
--with-dbmliborder=db1:db2:... -
Переопределить порядок проверки бэкендов баз данных для модуля
dbmДопустимое значение — строка, разделенная двоеточием (
:), с именами бэкендов:-
ndbm; -
gdbm; -
bdb.
-
-
--without-c-locale-coercion -
Отключить приведение C locale к locale на основе 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 -
Каталог колесных пакетов, используемых модулем
ensurepip(по умолчанию пусто).Некоторые политики упаковки дистрибутивов Linux рекомендуют не включать зависимости. Например, Fedora устанавливает колесные пакеты в каталог
/usr/share/python-wheels/и не устанавливает пакетensurepip._bundled.Введено в версии 3.10.
3.1.2. Параметры установки
-
--prefix=PREFIX -
Установка архитектурно-независимых файлов в PREFIX. В Unix по умолчанию
/usr/local.Это значение может быть получено во время выполнения с помощью
sys.prefix.Например, можно использовать
--prefix="$HOME/.local/"для установки Python в домашний каталог.
-
--exec-prefix=EPREFIX -
Установка архитектурно-зависимых файлов в EPREFIX, по умолчанию
--prefix.Это значение может быть получено во время выполнения с помощью
sys.exec_prefix.
-
--disable-test-modules -
Не строить и не устанавливать тестовые модули, такие как пакет
testили модуль расширений_testcapi(строятся и устанавливаются по умолчанию).Введено в версии 3.10.
-
--with-ensurepip=[upgrade|install|no] -
Выбрать команду
ensurepip, выполняемую при установке Python:-
upgrade(по умолчанию): выполнить командуpython -m ensurepip --altinstall --upgrade. -
install: выполнить командуpython -m ensurepip --altinstall; -
no: не запускать ensurepip;
Введено в версии 3.6.
-
3.1.3. Параметры производительности
Для достижения наилучшей производительности рекомендуется настройка Python с помощью --enable-optimizations --with-lto (PGO + LTO).
-
--enable-optimizations -
Включить оптимизацию с учетом профиля (PGO) с помощью
PROFILE_TASK(по умолчанию отключено).Компилятор C Clang требует программу
llvm-profdataдля PGO. На macOS также требуется GCC, при этом GCC является просто алиасом к Clang.Также отключите семантическую интерпозицию в libpython, если используется
--enable-sharedи GCC: добавьте-fno-semantic-interpositionк флагам компилятора и линковщика.Новое в версии 3.6.
Изменено в версии 3.10: Используйте
-fno-semantic-interpositionдля GCC.
-
PROFILE_TASK -
Переменная окружения, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.
По умолчанию:
-m test --pgo --timeout=$(TESTTIMEOUT).Новое в версии 3.8.
-
--with-lto -
Включить оптимизацию на этапе линковки (LTO) в любом билде (по умолчанию отключено).
Компилятор C Clang требует
llvm-arдля LTO (arна macOS), а также LTO-совместимый линковщик (ld.goldилиlld).Новое в версии 3.6.
-
--with-computed-gotos -
Включить вычисленные переходы в цикле вычисления (включено по умолчанию для поддерживаемых компиляторов).
-
--without-pymalloc -
Отключить специализированный менеджер памяти Python pymalloc (по умолчанию включено).
См. также переменную окружения
PYTHONMALLOC.
-
--without-doc-strings -
Отключить статические строки документации для уменьшения занимаемой памяти (по умолчанию включено). Строки документации, определенные в Python, не затрагиваются.
Не определять макрос
WITH_DOC_STRINGS.См. макрос
PyDoc_STRVAR().
-
--enable-profiling -
Включить профилирование кода на уровне C с
gprof(по умолчанию отключено).
3.1.4. Отладочная сборка Python
Отладочная сборка Python создается с опцией конфигурации --with-pydebug.
Последствия отладочной сборки:
- По умолчанию отображаются все предупреждения: список фильтров предупреждений по умолчанию пустой в модуле
warnings. - Добавить
dвsys.abiflags. - Добавить функцию
sys.gettotalrefcount(). - Добавить опцию командной строки
-X showrefcount. - Добавить переменную окружения
PYTHONTHREADDEBUG. - Добавить поддержку переменной
__ltrace__: включить отслеживание низкого уровня в цикле вычисления байт-кода, если переменная определена. - Установить отладочные обработчики для менеджеров памяти для обнаружения переполнения буфера и других ошибок памяти.
- Определить макросы
Py_DEBUGиPy_REF_DEBUG. -
Добавить проверки во время выполнения: код, окруженный
#ifdef Py_DEBUGи#endif. Включить проверкиassert(...)и_PyObject_ASSERT(...): не устанавливать макросNDEBUG(см. также опцию конфигурации--with-assertions). Основные проверки во время выполнения:- Добавить проверки корректности аргументов функций.
- Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неопределенных объектов.
- Убедиться, что функции, которые могут очистить или заменить текущее исключение, не вызываются с поднятым исключением.
- Сборщик мусора (
gc.collect()функция) выполняет некоторые базовые проверки согласованности объектов. - Макрос
Py_SAFE_DOWNCAST()проверяет целочисленные подтечения и переполнения при преобразовании из широких типов в узкие.
См. также Режим разработки Python и опцию конфигурации --with-trace-refs.
Изменено в версии 3.8: Сборочные файлы релизов и отладки теперь совместимы по ABI: определение макроса Py_DEBUG больше не подразумевает макрос Py_TRACE_REFS (см. опцию --with-trace-refs), что приводит к единственной несовместимости по ABI.
3.1.5. Опции отладки
-
--with-pydebug -
Сборка Python в отладочном режиме: определить макрос
Py_DEBUG(по умолчанию отключено).
-
--with-trace-refs -
Включить отслеживание ссылок для отладки (по умолчанию отключено).
Последствия:
- Определить макрос
Py_TRACE_REFS. - Добавить функцию
sys.getobjects(). - Добавить переменную окружения
PYTHONDUMPREFS.
Эта сборка не совместима по ABI с релизной сборкой (стандартной сборкой) или отладочной сборкой (макросы
Py_DEBUGиPy_REF_DEBUG).Новое в версии 3.8.
- Определить макрос
-
--with-assertions -
Сборка с включенными C-утверждениями (по умолчанию нет):
assert(...);и_PyObject_ASSERT(...);.Если установлено, макрос
NDEBUGне определен в переменной компилятораOPT.См. также опцию
--with-pydebug(отладочная сборка), которая также включает утверждения.Новое в версии 3.6.
-
--with-valgrind -
Включить поддержку Valgrind (по умолчанию нет).
-
--with-dtrace -
Включить поддержку DTrace (по умолчанию нет).
См. Инструментирование CPython с помощью DTrace и SystemTap.
Новое в версии 3.6.
-
--with-address-sanitizer -
Включить детектор ошибок памяти AddressSanitizer,
asan(по умолчанию нет).Новое в версии 3.6.
-
--with-memory-sanitizer -
Включить детектор ошибок выделения памяти MemorySanitizer,
msan(по умолчанию нет).Новое в версии 3.6.
-
--with-undefined-behavior-sanitizer -
Включить детектор неопределенного поведения UndefinedBehaviorSanitizer,
ubsan(по умолчанию нет).Новое в версии 3.6.
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 -
Переопределить C-библиотеку
libcна STRING (по умолчанию — зависит от системы).
-
--with-openssl=DIR -
Корень каталога OpenSSL.
Новое в версии 3.7.
-
--with-openssl-rpath=[no|auto|DIR] -
Установить каталог библиотек во время выполнения (rpath) для библиотек OpenSSL:
-
no(по умолчанию): не устанавливать rpath; -
auto: автоматически определить rpath из--with-opensslиpkg-config; - DIR: установить явное значение rpath.
Новое в версии 3.10.
-
3.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(с shake); -
blake2.
Новое в версии 3.9.
-
-
--with-ssl-default-suites=[python|openssl|STRING] -
Переопределение строки по умолчанию для наборов шифров OpenSSL:
-
python(по умолчанию): использовать предпочитаемый выбор Python; -
openssl: оставить настройки OpenSSL по умолчанию без изменений; - STRING: использовать настраиваемую строку
См. модуль
ssl.Новое в версии 3.7.
Изменено в версии 3.10: Настройки
pythonи STRING также устанавливают TLS 1.2 в качестве минимальной версии протокола. -
3.1.9. Параметры 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.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). Можно использовать опцию конфигурации--enable-optimizations, чтобы сделать её целевой задачей командыmake(make allили простоmake). -
make buildbottest: Сборка Python и запуск набора тестов Python, так же, как buildbots тестируют Python. Измените переменнуюTESTTIMEOUT(в секундах), чтобы изменить время ожидания теста (по умолчанию 1200: 20 минут). -
make install: Сборка и установка Python. -
make regen-stdlib-module-namesиautoconfдолжны выполняться отдельно для оставшихся сгенерированных файлов. -
make clean: Удаление скомпилированных файлов. -
make distclean: То же, что иmake clean, но также удаляются файлы, созданные скриптом конфигурации.
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__'
Другие 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*, строятся как динамические библиотеки.
Скрипт 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 -
Команда компилятора C.
Пример:
gcc -pthread.
-
MAINCC -
Команда компилятора C, используемая для построения функции
main()программ, таких какpython.Переменная, заданная опцией
--with-cxx-mainскрипта configure.По умолчанию:
$(CC).
-
CXX -
Команда компилятора C++.
Используется, если используется опция
--with-cxx-main.Пример:
g++ -pthread.
-
CFLAGS -
Флаги компилятора C.
-
CFLAGS_NODIST -
CFLAGS_NODISTиспользуется для построения интерпретатора и расширений C stdlib. Используйте его, когда флаг компилятора не должен быть частью distutilsCFLAGSпосле установки Python (bpo-21121).В частности,
CFLAGSне должен содержать:- флаг компилятора
-I(для задания пути поиска заголовочных файлов). Флаги-Iобрабатываются слева направо, и любые флаги вCFLAGSбудут иметь приоритет над пользовательскими и пакетными флагами-I. - флаги усиления, такие как
-Werror, поскольку дистрибутивы не могут контролировать, соответствуют ли пакеты, установленные пользователями, таким повышенным стандартам.
Введено в версии 3.5.
- флаг компилятора
-
EXTRA_CFLAGS -
Дополнительные флаги компилятора C.
-
CONFIGURE_CFLAGS -
Значение переменной
CFLAGS, переданной скрипту./configure.Введено в версии 3.2.
-
CONFIGURE_CFLAGS_NODIST -
Значение переменной
CFLAGS_NODIST, переданной скрипту./configure.Введено в версии 3.5.
-
BASECFLAGS -
Базовые флаги компилятора.
-
OPT -
Флаги оптимизации.
-
CFLAGS_ALIASING -
Флаги строгого или нестрогого алиасирования, используемые для компиляции
Python/dtoa.c.Введено в версии 3.7.
-
CCSHARED -
Флаги компилятора, используемые для построения библиотеки динамической загрузки.
Например,
-fPICиспользуется в Linux и BSD.
-
CFLAGSFORSHARED -
Дополнительные флаги C, добавленные для построения объектных файлов интерпретатора.
По умолчанию:
$(CCSHARED)при использовании--enable-shared, или пустая строка в противном случае.
-
PY_CFLAGS -
По умолчанию:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).
-
PY_CFLAGS_NODIST -
По умолчанию:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.Введено в версии 3.5.
-
PY_STDMODULE_CFLAGS -
Флаги C, используемые для построения объектных файлов интерпретатора.
По умолчанию:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).Введено в версии 3.7.
-
PY_CORE_CFLAGS -
По умолчанию:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.Введено в версии 3.2.
-
PY_BUILTIN_MODULE_CFLAGS -
Флаги компилятора для построения модуля расширения стандартной библиотеки как встроенного модуля, например, модуля
posix.По умолчанию:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.Введено в версии 3.8.
-
PURIFY -
Команда Purify. Purify — это программа отладки памяти.
По умолчанию: пустая строка (не используется).
3.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.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/using/configure.html