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

configfile.md

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

1> **Источник:** https://python-all.ru/3.4/distutils/configfile.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Создание файла конфигурации установки89Часто невозможно *заранее* описать всё необходимое для сборки дистрибутива: для продолжения может потребоваться получить информацию от пользователя или от его системы. Если эта информация достаточно проста – например, список каталогов для поиска C-заголовков или библиотек, – то предоставление конфигурационного файла `setup.cfg` для редактирования пользователями является простым и недорогим способом её запросить. Конфигурационные файлы также позволяют задавать значения по умолчанию для любых опций команд, которые установщик затем может переопределить либо в командной строке, либо отредактировав конфигурационный файл.1011Конфигурационный файл setup является полезной серединой между сценарием setup – который, в идеале, должен быть непрозрачным для установщиков [\[1\]](https://python-all.ru/3.4/distutils/configfile.html#id2) – и командной строкой сценария setup, которая находится вне вашего контроля и полностью зависит от установщика. Фактически, `setup.cfg` (и любые другие конфигурационные файлы Distutils, присутствующие в целевой системе) обрабатываются после содержимого сценария setup, но до командной строки. Это даёт несколько полезных следствий:1213- установщики могут переопределить часть того, что вы задали в `setup.py`, отредактировав `setup.cfg`14- вы можете задавать нестандартные значения по умолчанию для опций, которые сложно установить в `setup.py`15- установщики могут переопределить что угодно в `setup.cfg`, используя опции командной строки `setup.py`1617Базовый синтаксис файла конфигурации прост:1819```python20[command]21option=value22...23```2425где *command* – одна из команд Distutils (например, **build\_py**, **install**), а *option* – один из параметров, поддерживаемых этой командой. Для каждой команды можно указать любое количество параметров, и в файл можно включить любое количество секций команд. Пустые строки игнорируются, как и комментарии, которые начинаются с символа `'#'` и продолжаются до конца строки. Длинные значения параметров можно разбивать на несколько строк, просто делая отступы для строк продолжения.2627Список опций, поддерживаемых конкретной командой, можно узнать с помощью универсальной опции [*--help*](https://python-all.ru/3.4/using/cmdline.html#cmdoption--help), например:2829```python30> python setup.py --help build_ext31[...]32Options for 'build_ext' command:33  --build-lib (-b)     directory for compiled extension modules34  --build-temp (-t)    directory for temporary files (build by-products)35  --inplace (-i)       ignore build-lib and put compiled extensions into the36                       source directory alongside your pure Python modules37  --include-dirs (-I)  list of directories to search for header files38  --define (-D)        C preprocessor macros to define39  --undef (-U)         C preprocessor macros to undefine40  --swig-opts          list of SWIG command line options41[...]42```4344Обратите внимание: опция, которая в командной строке записывается как *--foo-bar*, в конфигурационных файлах записывается как `foo_bar`.4546Например, предположим, вы хотите, чтобы ваши расширения собирались «на месте» – то есть у вас есть расширение `pkg.ext`, и вы хотите, чтобы скомпилированный файл расширения (скажем, `ext.so` в Unix) был помещён в тот же исходный каталог, что и ваши чистые модули Python `pkg.mod1` и `pkg.mod2`. Для этого всегда можно использовать опцию *--inplace* в командной строке:4748```python49python setup.py build_ext --inplace50```5152Но это требует, чтобы вы всегда явно указывали команду **build\_ext** и не забывали передавать *--inplace*. Более простой способ – «установить и забыть» эту опцию, закодировав её в `setup.cfg`, конфигурационном файле этого дистрибутива:5354```python55[build_ext]56inplace=157```5859Это повлияет на все сборки данного дистрибутива модуля, независимо от того, указываете ли вы явно **build\_ext**. Если вы включите `setup.cfg` в свой дистрибутив исходного кода, это также повлияет на сборки конечных пользователей – что, вероятно, плохая идея для этой опции, поскольку постоянная сборка расширений на месте нарушит установку дистрибутива модуля. В некоторых особых случаях, однако, модули собираются прямо в каталоге установки, так что это, возможно, полезная возможность. (Хотя распространять расширения, которые ожидают сборки в своём каталоге установки, почти всегда плохая идея.)6061Другой пример: некоторые команды принимают много опций, которые не меняются от запуска к запуску; например, **bdist\_rpm** нужно знать всё необходимое для создания файла «spec» для формирования RPM-дистрибутива. Часть этой информации берётся из сценария setup, а часть генерируется автоматически Distutils (например, список устанавливаемых файлов). Но некоторую информацию необходимо передавать в качестве опций **bdist\_rpm**, что было бы очень утомительно делать в командной строке при каждом запуске. Поэтому вот фрагмент из собственного `setup.cfg` пакета Distutils:6263```python64[bdist_rpm]65release = 166packager = Greg Ward <gward@python.net>67doc_files = CHANGES.txt68            README.txt69            USAGE.txt70            doc/71            examples/72```7374Обратите внимание, что опция `doc_files` – это просто строка, разделённая пробелами и разбитая на несколько строк для удобства чтения.7576> **См. также**77>78> **[*Синтаксис файлов конфигурации*](https://python-all.ru/3.4/install/index.html#inst-config-syntax) в «Installing Python Modules»**79>80> Дополнительная информация о файлах конфигурации доступна в руководстве для системных администраторов.8182Сноски8384| [\[1\]](https://python-all.ru/3.4/distutils/configfile.html#id1) | Этот идеал, вероятно, не будет достигнут до тех пор, пока автонастройка не будет полностью поддерживаться в Distutils. |85| --- | --- |86