Документация Python неофициальный перевод

configure.md

800 строк · 42.3 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.11/using/configure.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Настройка Python89## 3.1. Параметры configure1011Выведите список всех параметров сценария `./configure` с помощью:1213```sh14./configure --help15```1617См. также `Misc/SpecialBuilds.txt` в дистрибутиве исходного кода Python.1819### 3.1.1. Общие параметры2021#### `--enable-loadable-sqlite-extensions`2223Поддержка загружаемых расширений в модуле расширения `_sqlite` (по умолчанию отключено) модуля [`sqlite3`](https://python-all.ru/3.11/library/sqlite3.html#module-sqlite3).2425См. метод [`sqlite3.Connection.enable_load_extension()`](https://python-all.ru/3.11/library/sqlite3.html#sqlite3.Connection.enable_load_extension) модуля [`sqlite3`](https://python-all.ru/3.11/library/sqlite3.html#module-sqlite3).2627Новое в версии 3.6.2829#### `--disable-ipv6`3031Отключить поддержку IPv6 (включена по умолчанию, если поддерживается), см. модуль [`socket`](https://python-all.ru/3.11/library/socket.html#module-socket).3233#### `--enable-big-digits=[15|30]`3435Определить размер в битах цифр Python [`int`](https://python-all.ru/3.11/library/functions.html#int): 15 или 30 бит.3637По умолчанию размер цифр равен 30.3839Определить `PYLONG_BITS_IN_DIGIT` как `15` или `30`.4041См. [`sys.int_info.bits_per_digit`](https://python-all.ru/3.11/library/sys.html#sys.int_info).4243#### `--with-cxx-main`4445#### `--with-cxx-main=COMPILER`4647Скомпилировать функцию `main()` Python и слинковать исполняемый файл Python с C++ компилятором: `$CXX`, или *COMPILER*, если указан.4849#### `--with-suffix=SUFFIX`5051Установить суффикс исполняемого файла Python равным *SUFFIX*.5253Суффикс по умолчанию: `.exe` в Windows и macOS (`python.exe` исполняемый файл), `.js` в Emscripten node, `.html` в Emscripten browser, `.wasm` в WASI, и пустая строка на других платформах (`python` исполняемый файл).5455Изменено в версии 3.11: Суффикс по умолчанию на платформе WASM – один из `.js`, `.html` или `.wasm`.5657#### `--with-tzpath=<list of absolute paths separated by pathsep>`5859Выбрать путь поиска часового пояса по умолчанию для [`zoneinfo.TZPATH`](https://python-all.ru/3.11/library/zoneinfo.html#zoneinfo.TZPATH). См. [конфигурацию времени компиляции](https://python-all.ru/3.11/library/zoneinfo.html#zoneinfo-data-compile-time-config) модуля [`zoneinfo`](https://python-all.ru/3.11/library/zoneinfo.html#module-zoneinfo).6061По умолчанию: `/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo`.6263См. разделитель путей [`os.pathsep`](https://python-all.ru/3.11/library/os.html#os.pathsep).6465Новое в версии 3.9.6667#### `--without-decimal-contextvar`6869Сборка модуля расширения `_decimal` с контекстом, локальным для потока, а не с контекстом, локальным для корутины (по умолчанию). См. модуль [`decimal`](https://python-all.ru/3.11/library/decimal.html#module-decimal).7071См. [`decimal.HAVE_CONTEXTVAR`](https://python-all.ru/3.11/library/decimal.html#decimal.HAVE_CONTEXTVAR) и модуль [`contextvars`](https://python-all.ru/3.11/library/contextvars.html#module-contextvars).7273Новое в версии 3.9.7475#### `--with-dbmliborder=<list of backend names>`7677Переопределяет порядок проверки бэкендов БД для модуля [`dbm`](https://python-all.ru/3.11/library/dbm.html#module-dbm).7879Допустимое значение – строка с именами бэкендов, разделённая двоеточиями (`:`):8081- `ndbm`;82- `gdbm`;83- `bdb`.8485#### `--without-c-locale-coercion`8687Отключает приведение локали C к локали на основе UTF-8 (включено по умолчанию).8889Не определять макрос `PY_COERCE_C_LOCALE`.9091См. [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONCOERCECLOCALE) и [**PEP 538**](https://python-all.ru/3.11/using/configure.html).9293#### `--with-platlibdir=DIRNAME`9495Имя каталога библиотек Python (по умолчанию `lib`).9697Fedora и SuSE используют `lib64` на 64-разрядных платформах.9899См. [`sys.platlibdir`](https://python-all.ru/3.11/library/sys.html#sys.platlibdir).100101Новое в версии 3.9.102103#### `--with-wheel-pkg-dir=PATH`104105Каталог пакетов wheel, используемых модулем [`ensurepip`](https://python-all.ru/3.11/library/ensurepip.html#module-ensurepip) (по умолчанию отсутствует).106107Некоторые политики упаковки дистрибутивов Linux рекомендуют не включать зависимости. Например, Fedora устанавливает пакеты wheel в каталог `/usr/share/python-wheels/` и не устанавливает пакет `ensurepip._bundled`.108109Новое в версии 3.10.110111#### `--with-pkg-config=[check|yes|no]`112113Должен ли configure использовать **pkg-config** для обнаружения зависимостей сборки.114115- `check` (по умолчанию): **pkg-config** необязателен116- `yes`: **pkg-config** обязателен117- `no`: configure не использует **pkg-config**, даже если он присутствует118119Новое в версии 3.11.120121#### `--enable-pystats`122123Включить сбор внутренней статистики.124125Статистика будет выгружена в произвольный (вероятно, уникальный) файл в `/tmp/py_stats/`, или `C:\temp\py_stats\` в Windows.126127Используйте `Tools/scripts/summarize_stats.py` для чтения статистики.128129Новое в версии 3.11.130131### 3.1.2. Параметры WebAssembly132133#### `--with-emscripten-target=[browser|node]`134135Устанавливает вариант сборки для `wasm32-emscripten`.136137- `browser` (по умолчанию): предзагружать минимальную стандартную библиотеку, по умолчанию MEMFS.138- `node`: поддержка NODERAWFS и pthread.139140Новое в версии 3.11.141142#### `--enable-wasm-dynamic-linking`143144Включить поддержку динамической компоновки для WASM.145146Динамическая компоновка включает `dlopen`. Размер исполняемого файла увеличивается из-за ограниченного удаления мёртвого кода и дополнительных возможностей.147148Новое в версии 3.11.149150#### `--enable-wasm-pthreads`151152Включить поддержку pthreads для WASM.153154Новое в версии 3.11.155156### 3.1.3. Параметры установки157158#### `--prefix=PREFIX`159160Устанавливает архитектурно-независимые файлы в PREFIX. В Unix по умолчанию используется `/usr/local`.161162Это значение можно получить во время выполнения с помощью [`sys.prefix`](https://python-all.ru/3.11/library/sys.html#sys.prefix).163164Например, можно использовать `--prefix="$HOME/.local/"` для установки Python в домашний каталог.165166#### `--exec-prefix=EPREFIX`167168Устанавливает архитектурно-зависимые файлы в EPREFIX, по умолчанию [`--prefix`](https://python-all.ru/3.11/using/configure.html#cmdoption-prefix).169170Это значение можно получить во время выполнения с помощью [`sys.exec_prefix`](https://python-all.ru/3.11/library/sys.html#sys.exec_prefix).171172#### `--disable-test-modules`173174Не собирать и не устанавливать тестовые модули, такие как пакет [`test`](https://python-all.ru/3.11/library/test.html#module-test) или модуль расширения `_testcapi` (собирается и устанавливается по умолчанию).175176Новое в версии 3.10.177178#### `--with-ensurepip=[upgrade|install|no]`179180Выбирает команду [`ensurepip`](https://python-all.ru/3.11/library/ensurepip.html#module-ensurepip), запускаемую при установке Python:181182- `upgrade` (по умолчанию): запустить команду `python -m ensurepip --altinstall --upgrade` .183- `install`: запустить команду `python -m ensurepip --altinstall`;184- `no`: не запускать ensurepip;185186Новое в версии 3.6.187188### 3.1.4. Параметры производительности189190Для достижения наилучшей производительности рекомендуется настраивать Python с использованием `--enable-optimizations --with-lto` (PGO + LTO).191192#### `--enable-optimizations`193194Включает профильную оптимизацию (PGO) с помощью [`PROFILE_TASK`](https://python-all.ru/3.11/using/configure.html#envvar-PROFILE_TASK) (по умолчанию отключено).195196Компилятору Clang требуется программа `llvm-profdata` для PGO. На macOS она также требуется GCC: GCC – это просто псевдоним Clang на macOS.197198Также отключает семантическое переопределение символов в libpython, если используются `--enable-shared` и GCC: добавьте `-fno-semantic-interposition` в флаги компилятора и компоновщика.199200Новое в версии 3.6.201202Изменено в версии 3.10: Используйте `-fno-semantic-interposition` в GCC.203204#### `PROFILE_TASK`205206Переменная окружения, используемая в Makefile: аргументы командной строки Python для задачи генерации PGO.207208По умолчанию: `-m test --pgo --timeout=$(TESTTIMEOUT)`.209210Новое в версии 3.8.211212#### `--with-lto=[full|thin|no|yes]`213214Включает оптимизацию во время компоновки (LTO) в любой сборке (по умолчанию отключено).215216Компилятору Clang требуется `llvm-ar` для LTO (`ar` в macOS), а также компоновщик, поддерживающий LTO (`ld.gold` или `lld`).217218Новое в версии 3.6.219220Новое в версии 3.11: Для использования функции ThinLTO используйте `--with-lto=thin` в Clang.221222#### `--with-computed-gotos`223224Включает вычисляемые переходы в цикле вычислений (включено по умолчанию на поддерживаемых компиляторах).225226#### `--without-pymalloc`227228Отключает специализированный распределитель памяти Python [pymalloc](https://python-all.ru/3.11/c-api/memory.html#pymalloc) (включён по умолчанию).229230См. также переменную окружения [`PYTHONMALLOC`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONMALLOC).231232#### `--without-doc-strings`233234Отключает статические строки документации для уменьшения потребления памяти (включено по умолчанию). Строки документации, определённые в Python, не затрагиваются.235236Не определять макрос `WITH_DOC_STRINGS`.237238См. макрос `PyDoc_STRVAR()`.239240#### `--enable-profiling`241242Включает профилирование кода на уровне C с помощью `gprof` (отключено по умолчанию).243244### 3.1.5. Отладочная сборка Python245246Отладочная сборка – это Python, собранный с опцией конфигурации [`--with-pydebug`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-pydebug).247248Эффекты отладочной сборки:249250- Показывать все предупреждения по умолчанию: список фильтров предупреждений по умолчанию пуст в модуле [`warnings`](https://python-all.ru/3.11/library/warnings.html#module-warnings).251- Добавляет `d` в [`sys.abiflags`](https://python-all.ru/3.11/library/sys.html#sys.abiflags).252- Добавляет функцию `sys.gettotalrefcount()`.253- Добавляет опцию командной строки [`-X showrefcount`](https://python-all.ru/3.11/using/cmdline.html#cmdoption-X).254- Добавляет переменную окружения [`PYTHONTHREADDEBUG`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONTHREADDEBUG).255- Добавляет поддержку переменной `__lltrace__`: включение низкоуровневой трассировки в цикле выполнения байт-кода, если переменная определена.256- Устанавливает [отладочные привязки на распределители памяти](https://python-all.ru/3.11/c-api/memory.html#default-memory-allocators) для обнаружения переполнения буфера и других ошибок памяти.257- Определяет макросы `Py_DEBUG` и `Py_REF_DEBUG`.258- Добавляет проверки времени выполнения: код, окружённый `#ifdef Py_DEBUG` и `#endif`. Включает утверждения `assert(...)` и `_PyObject_ASSERT(...)`: не устанавливайте макрос `NDEBUG` (см. также опцию конфигурации [`--with-assertions`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-assertions)). Основные проверки времени выполнения:259260  - Добавляет проверки корректности аргументов функций.261  - Объекты Unicode и int создаются с заполнением памяти шаблоном для обнаружения использования неинициализированных объектов.262  - Гарантирует, что функции, которые могут очистить или заменить текущее исключение, не вызываются при возникшем исключении.263  - Проверяется, что функции деаллокации не изменяют текущее исключение.264  - Сборщик мусора (функция [`gc.collect()`](https://python-all.ru/3.11/library/gc.html#gc.collect)) выполняет базовые проверки корректности объектов.265  - Макрос `Py_SAFE_DOWNCAST()` проверяет целочисленное переполнение (underflow и overflow) при понижающем приведении от широких типов к узким.266267См. также [режим разработки Python](https://python-all.ru/3.11/library/devmode.html#devmode) и опцию конфигурации [`--with-trace-refs`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-trace-refs).268269Изменено в версии 3.8: Сборки для выпуска и отладочные сборки теперь совместимы по ABI: определение макроса `Py_DEBUG` больше не подразумевает макрос `Py_TRACE_REFS` (см. опцию [`--with-trace-refs`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-trace-refs)), который вводил единственную несовместимость ABI.270271### 3.1.6. Отладочные опции272273#### `--with-pydebug`274275[Собрать Python в отладочном режиме](https://python-all.ru/3.11/using/configure.html#debug-build): определяет макрос `Py_DEBUG` (отключён по умолчанию).276277#### `--with-trace-refs`278279Включает отслеживание ссылок для целей отладки (отключено по умолчанию).280281Эффекты:282283- Определяет макрос `Py_TRACE_REFS`.284- Добавляет функцию `sys.getobjects()`.285- Добавляет переменную окружения [`PYTHONDUMPREFS`](https://python-all.ru/3.11/using/cmdline.html#envvar-PYTHONDUMPREFS).286287Эта сборка несовместима по ABI со сборкой для выпуска (сборкой по умолчанию) или отладочной сборкой (макросы `Py_DEBUG` и `Py_REF_DEBUG`).288289Новое в версии 3.8.290291#### `--with-assertions`292293Сборка с включёнными C-утверждениями (по умолчанию нет): `assert(...);` и `_PyObject_ASSERT(...);`.294295Если установлен, макрос `NDEBUG` не определяется в переменной компилятора [`OPT`](https://python-all.ru/3.11/using/configure.html#envvar-OPT).296297См. также опцию [`--with-pydebug`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-pydebug) ([отладочная сборка](https://python-all.ru/3.11/using/configure.html#debug-build)), которая также включает утверждения.298299Новое в версии 3.6.300301#### `--with-valgrind`302303Включить поддержку Valgrind (по умолчанию нет).304305#### `--with-dtrace`306307Включить поддержку DTrace (по умолчанию нет).308309См. [Инструментирование CPython с помощью DTrace и SystemTap](https://python-all.ru/3.11/howto/instrumentation.html#instrumentation).310311Новое в версии 3.6.312313#### `--with-address-sanitizer`314315Включает детектор ошибок памяти AddressSanitizer, `asan` (по умолчанию нет).316317Новое в версии 3.6.318319#### `--with-memory-sanitizer`320321Включить детектор ошибок выделения памяти MemorySanitizer, `msan` (по умолчанию нет).322323Новое в версии 3.6.324325#### `--with-undefined-behavior-sanitizer`326327Включить детектор неопределённого поведения UndefinedBehaviorSanitizer, `ubsan` (по умолчанию нет).328329Новое в версии 3.6.330331### 3.1.7. Параметры компоновщика332333#### `--enable-shared`334335Включает сборку разделяемой библиотеки Python: `libpython` (по умолчанию выключено).336337#### `--without-static-libpython`338339Не собирать `libpythonMAJOR.MINOR.a` и не устанавливать `python.o` (собирается и устанавливается по умолчанию).340341Новое в версии 3.10.342343### 3.1.8. Параметры библиотек344345#### `--with-libs='lib1 ...'`346347Линковаться с дополнительными библиотеками (по умолчанию нет).348349#### `--with-system-expat`350351Собирать модуль `pyexpat`, используя установленную библиотеку `expat` (по умолчанию нет).352353#### `--with-system-ffi`354355Собрать модуль расширения `_ctypes`, используя установленную `ffi` библиотеку, см. модуль [`ctypes`](https://python-all.ru/3.11/library/ctypes.html#module-ctypes) (по умолчанию зависит от системы).356357#### `--with-system-libmpdec`358359Собрать модуль расширения `_decimal`, используя установленную библиотеку `mpdec`; см. модуль [`decimal`](https://python-all.ru/3.11/library/decimal.html#module-decimal) (по умолчанию нет).360361Новое в версии 3.3.362363#### `--with-readline=editline`364365Использовать библиотеку `editline` в качестве бэкенда модуля [`readline`](https://python-all.ru/3.11/library/readline.html#module-readline).366367Определяет макрос `WITH_EDITLINE`.368369Новое в версии 3.10.370371#### `--without-readline`372373Не собирать модуль [`readline`](https://python-all.ru/3.11/library/readline.html#module-readline) (собирается по умолчанию).374375Не определять макрос `HAVE_LIBREADLINE`.376377Новое в версии 3.10.378379#### `--with-libm=STRING`380381Переопределить математическую библиотеку `libm` на *STRING* (по умолчанию зависит от системы).382383#### `--with-libc=STRING`384385Переопределить библиотеку C `libc` на *STRING* (по умолчанию зависит от системы).386387#### `--with-openssl=DIR`388389Корневой каталог OpenSSL.390391Добавлено в версии 3.7.392393#### `--with-openssl-rpath=[no|auto|DIR]`394395Задать каталог библиотек времени выполнения (rpath) для библиотек OpenSSL:396397- `no` (по умолчанию): не устанавливать rpath;398- `auto`: автоматически определять rpath из [`--with-openssl`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-openssl) и `pkg-config`;399- *DIR*: указать явный rpath.400401Новое в версии 3.10.402403### 3.1.9. Параметры безопасности404405#### `--with-hash-algorithm=[fnv|siphash13|siphash24]`406407Выберите алгоритм хеширования для использования в `Python/pyhash.c`:408409- `siphash13` (по умолчанию);410- `siphash24`;411- `fnv`.412413Новое в версии 3.4.414415Новое в версии 3.11: `siphash13` добавлен и теперь используется по умолчанию.416417#### `--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2`418419Встроенные хеш-модули:420421- `md5`;422- `sha1`;423- `sha256`;424- `sha512`;425- `sha3` (с shake);426- `blake2`.427428Новое в версии 3.9.429430#### `--with-ssl-default-suites=[python|openssl|STRING]`431432Переопределить строку наборов шифров OpenSSL по умолчанию:433434- `python` (по умолчанию): использовать предпочтительный выбор Python;435- `openssl`: оставить настройки OpenSSL по умолчанию без изменений;436- *STRING*: использовать произвольную строку437438См. модуль [`ssl`](https://python-all.ru/3.11/library/ssl.html#module-ssl).439440Добавлено в версии 3.7.441442Изменено в версии 3.10: Настройки `python` и *STRING* также устанавливают TLS 1.2 в качестве минимальной версии протокола.443444### 3.1.10. Параметры macOS445446См. `Mac/README.rst`.447448#### `--enable-universalsdk`449450#### `--enable-universalsdk=SDKDIR`451452Создание универсальной сборки двоичного файла. *SDKDIR* указывает, какой macOS SDK следует использовать для сборки (по умолчанию нет).453454#### `--enable-framework`455456#### `--enable-framework=INSTALLDIR`457458Создаёт Python.framework вместо традиционной установки в Unix. Необязательный *INSTALLDIR* определяет путь установки (по умолчанию – нет).459460#### `--with-universal-archs=ARCH`461462Определяет тип универсального бинарного файла, который будет создан. Этот параметр работает, только если указан [`--enable-universalsdk`](https://python-all.ru/3.11/using/configure.html#cmdoption-enable-universalsdk).463464Варианты:465466- `universal2`;467- `32-bit`;468- `64-bit`;469- `3-way`;470- `intel`;471- `intel-32`;472- `intel-64`;473- `all`.474475#### `--with-framework-name=FRAMEWORK`476477Задаёт имя для python framework в macOS. Работает только при указанном [`--enable-framework`](https://python-all.ru/3.11/using/configure.html#cmdoption-enable-framework) (по умолчанию: `Python`).478479### 3.1.11. Параметры кросс-компиляции480481Кросс-компиляция (также известная как кросс-сборка) используется для сборки Python под другую архитектуру CPU или платформу. Для кросс-компиляции требуется интерпретатор Python для платформы сборки. Версия Python для сборки должна совпадать с версией Python для целевой платформы, скомпилированной кросс-компилятором.482483#### `--build=BUILD`484485настройка для сборки на платформе BUILD, обычно определяется с помощью **config.guess**.486487#### `--host=HOST`488489кросс-компиляция для сборки программ, выполняемых на HOST (целевая платформа)490491#### `--with-build-python=path/to/python`492493путь к `python` двоичному файлу для кросс-компиляции494495Новое в версии 3.11.496497#### `CONFIG_SITE=file`498499Переменная окружения, указывающая на файл с переопределениями configure.500501Пример файла *config.site*:502503```ini504# config.site-aarch64505ac_cv_buggy_getaddrinfo=no506ac_cv_file__dev_ptmx=yes507ac_cv_file__dev_ptc=no508```509510Пример кросс-компиляции:511512```sh513CONFIG_SITE=config.site-aarch64 ../configure \514    --build=x86_64-pc-linux-gnu \515    --host=aarch64-unknown-linux-gnu \516    --with-build-python=../x86_64/python517```518519## 3.2. Система сборки Python520521### 3.2.1. Основные файлы системы сборки522523- `configure.ac` =\> `configure`;524- `Makefile.pre.in` =\> `Makefile` (создаётся с помощью `configure`);525- `pyconfig.h` (создаётся с помощью `configure`);526- `Modules/Setup`: расширения на C, собираемые Makefile с помощью `Module/makesetup` shell-скрипта;527- `setup.py`: расширения C, собранные с использованием модуля [`distutils`](https://python-all.ru/3.11/library/distutils.html#module-distutils).528529### 3.2.2. Основные этапы сборки530531- C-файлы (`.c`) компилируются в объектные файлы (`.o`).532- Статическая библиотека `libpython` (`.a`) создаётся из объектных файлов.533- `python.o` и статическая библиотека `libpython` компонуются в итоговую программу `python`.534- Расширения C собираются Makefile (см. `Modules/Setup`) и `python setup.py build`.535536### 3.2.3. Основные цели Makefile537538- `make`: Собрать Python со стандартной библиотекой.539- `make platform:`: собрать программу `python`, но не собирать модули расширений стандартной библиотеки.540- `make profile-opt`: собрать Python с использованием профильной оптимизации (PGO). Чтобы сделать это целью по умолчанию команды `make` (`make all` или просто `make`), можно использовать опцию configure [`--enable-optimizations`](https://python-all.ru/3.11/using/configure.html#cmdoption-enable-optimizations).541- `make buildbottest`: собрать Python и запустить тестовый набор Python, так же как сборочные боты тестируют Python. Установите переменную `TESTTIMEOUT` (в секундах), чтобы изменить тайм-аут теста (по умолчанию 1200: 20 минут).542- `make install`: собрать и установить Python.543- `make regen-all`: перегенерировать (почти) все сгенерированные файлы; `make regen-stdlib-module-names` и `autoconf` должны быть запущены отдельно для оставшихся сгенерированных файлов.544- `make clean`: удалить собранные файлы.545- `make distclean`: то же, что `make clean`, но также удаляет файлы, созданные скриптом configure.546547### 3.2.4. Расширения C548549Некоторые расширения C собираются как встроенные модули, например модуль `sys`. Они собираются с определённым макросом `Py_BUILD_CORE_BUILTIN`. Встроенные модули не имеют атрибута `__file__`:550551```pycon552>>> import sys553>>> sys554<module 'sys' (built-in)>555>>> sys.__file__556Traceback (most recent call last):557  File "<stdin>", line 1, in <module>558AttributeError: module 'sys' has no attribute '__file__'559```560561Другие расширения C собираются как динамические библиотеки, например модуль `_asyncio`. Они собираются с определённым макросом `Py_BUILD_CORE_MODULE`. Пример на Linux x86-64:562563```pycon564>>> import _asyncio565>>> _asyncio566<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>567>>> _asyncio.__file__568'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'569```570571`Modules/Setup` используется для генерации целей Makefile для сборки расширений C. В начале файлов расширения C собираются как встроенные модули. Расширения, определённые после маркера `*shared*`, собираются как динамические библиотеки.572573Скрипт `setup.py` собирает расширения C только как разделяемые библиотеки с помощью модуля [`distutils`](https://python-all.ru/3.11/library/distutils.html#module-distutils).574575Макросы `PyAPI_FUNC()`, `PyAPI_DATA()` и [`PyMODINIT_FUNC`](https://python-all.ru/3.11/c-api/intro.html#c.PyMODINIT_FUNC) из `Include/pyport.h` определяются по-разному в зависимости от того, определён ли макрос `Py_BUILD_CORE_MODULE`:576577- Используйте `Py_EXPORTED_SYMBOL`, если `Py_BUILD_CORE_MODULE` определён.578- В противном случае используйте `Py_IMPORTED_SYMBOL`.579580Если макрос `Py_BUILD_CORE_BUILTIN` по ошибке используется для расширения C, собранного как разделяемая библиотека, его функция `PyInit_xxx()` не экспортируется, что вызывает [`ImportError`](https://python-all.ru/3.11/library/exceptions.html#ImportError) при импорте.581582## 3.3. Флаги компилятора и компоновщика583584Параметры, задаваемые сценарием `./configure` и переменными окружения, и используемые `Makefile`.585586### 3.3.1. Флаги препроцессора587588#### `CONFIGURE_CPPFLAGS`589590Значение переменной [`CPPFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CPPFLAGS), передаваемое сценарию `./configure`.591592Новое в версии 3.6.593594#### `CPPFLAGS`595596(Objective) C/C++ флаги препроцессора, например `-Iinclude_dir`, если заголовочные файлы находятся в нестандартном каталоге *include\_dir*.597598И [`CPPFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS) должны содержать значение оболочки, чтобы setup.py мог собирать модули расширения, используя каталоги, указанные в переменных окружения.599600#### `BASECPPFLAGS`601602Новое в версии 3.4.603604#### `PY_CPPFLAGS`605606Дополнительные флаги препроцессора, добавляемые при сборке объектных файлов интерпретатора.607608По умолчанию: `$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)`.609610Новое в версии 3.2.611612### 3.3.2. Флаги компилятора613614#### `CC`615616Команда компилятора C.617618Пример: `gcc -pthread`.619620#### `MAINCC`621622Команда компилятора C, используемая для сборки функции `main()` в таких программах, как `python`.623624Переменная, устанавливаемая опцией [`--with-cxx-main`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-cxx-main) сценария configure.625626По умолчанию: `$(CC)`.627628#### `CXX`629630Команда компилятора C++.631632Используется, если указана опция [`--with-cxx-main`](https://python-all.ru/3.11/using/configure.html#cmdoption-with-cxx-main).633634Пример: `g++ -pthread`.635636#### `CFLAGS`637638Флаги компилятора C.639640#### `CFLAGS_NODIST`641642[`CFLAGS_NODIST`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS_NODIST) используется для сборки интерпретатора и расширений C из стандартной библиотеки. Используйте его, когда флаг компилятора *не* должен входить в состав [`CFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS) distutils после установки Python ([bpo-21121](https://python-all.ru/3.11/using/configure.html)).643644В частности, [`CFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS) не должен содержать:645646- флаг компилятора `-I` (для задания пути поиска включаемых файлов). Флаги `-I` обрабатываются слева направо, и любые флаги из [`CFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS) будут иметь приоритет над `-I` флагами, предоставленными пользователем и пакетами.647- флаги усиления защиты, такие как `-Werror`, поскольку дистрибутивы не могут контролировать, соответствуют ли установленные пользователями пакеты таким повышенным стандартам.648649Новое в версии 3.5.650651#### `EXTRA_CFLAGS`652653Дополнительные флаги компилятора C.654655#### `CONFIGURE_CFLAGS`656657Значение переменной [`CFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS), передаваемое сценарию `./configure` .658659Новое в версии 3.2.660661#### `CONFIGURE_CFLAGS_NODIST`662663Значение переменной [`CFLAGS_NODIST`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS_NODIST), передаваемое сценарию `./configure` .664665Новое в версии 3.5.666667#### `BASECFLAGS`668669Базовые флаги компилятора.670671#### `OPT`672673Флаги оптимизации.674675#### `CFLAGS_ALIASING`676677Флаги строгого или нестрогого алиасинга, используемые для компиляции `Python/dtoa.c`.678679Добавлено в версии 3.7.680681#### `CCSHARED`682683Флаги компилятора, используемые для сборки разделяемой библиотеки.684685Например, `-fPIC` используется в Linux и BSD.686687#### `CFLAGSFORSHARED`688689Дополнительные флаги C, добавляемые для сборки объектных файлов интерпретатора.690691По умолчанию: `$(CCSHARED)` при использовании [`--enable-shared`](https://python-all.ru/3.11/using/configure.html#cmdoption-enable-shared), иначе пустая строка.692693#### `PY_CFLAGS`694695По умолчанию: `$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)`.696697#### `PY_CFLAGS_NODIST`698699По умолчанию: `$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal`.700701Новое в версии 3.5.702703#### `PY_STDMODULE_CFLAGS`704705Флаги C, используемые для сборки объектных файлов интерпретатора.706707По умолчанию: `$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)`.708709Добавлено в версии 3.7.710711#### `PY_CORE_CFLAGS`712713По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE`.714715Новое в версии 3.2.716717#### `PY_BUILTIN_MODULE_CFLAGS`718719Флаги компилятора для сборки модуля расширения стандартной библиотеки как встроенного модуля, подобно модулю [`posix`](https://python-all.ru/3.11/library/posix.html#module-posix).720721По умолчанию: `$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN`.722723Новое в версии 3.8.724725#### `PURIFY`726727Команда Purify. Purify – программа для отладки памяти.728729По умолчанию: пустая строка (не используется).730731### 3.3.3. Флаги компоновщика732733#### `LINKCC`734735Команда компоновщика, используемая для сборки программ, таких как `python` и `_testembed`.736737По умолчанию: `$(PURIFY) $(MAINCC)`.738739#### `CONFIGURE_LDFLAGS`740741Значение переменной [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS), передаваемое сценарию `./configure`.742743Избегайте присваивания [`CFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS), [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS) и т.д., чтобы пользователи могли использовать их в командной строке для добавления к этим значениям, не перезаписывая предустановленные.744745Новое в версии 3.2.746747#### `LDFLAGS_NODIST`748749[`LDFLAGS_NODIST`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS_NODIST) используется так же, как [`CFLAGS_NODIST`](https://python-all.ru/3.11/using/configure.html#envvar-CFLAGS_NODIST). Его применяют, когда флаг компоновщика *не* должен быть частью distutils [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS) после установки Python ([bpo-35257](https://python-all.ru/3.11/using/configure.html)).750751В частности, [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS) не должен содержать:752753- флаг компилятора `-L` (для установки пути поиска библиотек). Флаги `-L` обрабатываются слева направо, и любые флаги в [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS) будут иметь приоритет над флагами `-L`, предоставленными пользователем или пакетом.754755#### `CONFIGURE_LDFLAGS_NODIST`756757Значение переменной [`LDFLAGS_NODIST`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS_NODIST), передаваемое сценарию `./configure` .758759Новое в версии 3.8.760761#### `LDFLAGS`762763Флаги компоновщика, например, `-Llib_dir`, если библиотеки находятся в нестандартном каталоге *lib\_dir*.764765И [`CPPFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-CPPFLAGS), и [`LDFLAGS`](https://python-all.ru/3.11/using/configure.html#envvar-LDFLAGS) должны содержать значение из оболочки, чтобы setup.py мог собирать модули расширения, используя каталоги, указанные в переменных окружения.766767#### `LIBS`768769Флаги компоновщика для передачи библиотек компоновщику при компоновке исполняемого файла Python.770771Пример: `-lrt`.772773#### `LDSHARED`774775Команда для сборки разделяемой библиотеки.776777По умолчанию: `@LDSHARED@ $(PY_LDFLAGS)`.778779#### `BLDSHARED`780781Команда для сборки разделяемой библиотеки `libpython`.782783По умолчанию: `@BLDSHARED@ $(PY_CORE_LDFLAGS)`.784785#### `PY_LDFLAGS`786787По умолчанию: `$(CONFIGURE_LDFLAGS) $(LDFLAGS)`.788789#### `PY_LDFLAGS_NODIST`790791По умолчанию: `$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)`.792793Новое в версии 3.8.794795#### `PY_CORE_LDFLAGS`796797Флаги компоновщика, используемые для сборки объектных файлов интерпретатора.798799Новое в версии 3.8.800