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

configfile.md

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

1> **Источник:** https://python-all.ru/3.11/distutils/configfile.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Написание файла конфигурации setup89> **Примечание**10>11> Этот документ сохраняется только до тех пор, пока документация `setuptools` по адресу [https://setuptools.readthedocs.io/en/latest/setuptools.html](https://python-all.ru/3.11/distutils/configfile.html) не охватит самостоятельно всю соответствующую информацию, включённую в него в настоящее время.1213Часто невозможно заранее описать всё необходимое для сборки дистрибутива *a priori*: может потребоваться получить информацию от пользователя или от его системы. Если эта информация достаточно проста – например, список каталогов для поиска C-заголовков или библиотек, – то предоставить пользователю файл конфигурации `setup.cfg` для редактирования – это дешёвый и простой способ её получить. Файлы конфигурации также позволяют задать значения по умолчанию для любых параметров команд, которые установщик может затем переопределить либо в командной строке, либо редактируя файл конфигурации.1415Файл конфигурации setup является полезной золотой серединой между скриптом setup – который в идеале должен быть непрозрачным для установщиков [\[1\]](https://python-all.ru/3.11/distutils/configfile.html#id2) – и командной строкой скрипта setup, которая находится вне вашего контроля и полностью зависит от установщика. На самом деле, `setup.cfg` (и любые другие файлы конфигурации Distutils, присутствующие на целевой системе) обрабатываются после содержимого скрипта setup, но до командной строки. Это имеет несколько полезных следствий:1617- установщики могут переопределить часть того, что вы указали в `setup.py`, редактируя `setup.cfg`18- вы можете предоставить нестандартные значения по умолчанию для параметров, которые сложно задать в `setup.py`19- установщики могут переопределить всё в `setup.cfg` с помощью параметров командной строки для `setup.py`2021Базовый синтаксис файла конфигурации прост:2223```ini24[command]25option=value26...27```2829где *command* – одна из команд Distutils (например, **build\_py**, **install**), а *option* – один из параметров, поддерживаемых этой командой. Для каждой команды можно указать любое количество параметров, и в файл можно включить любое количество секций команд. Пустые строки игнорируются, как и комментарии, которые начинаются с символа `'#'` и продолжаются до конца строки. Длинные значения параметров можно разбивать на несколько строк, просто делая отступы для строк продолжения.3031Список параметров, поддерживаемых конкретной командой, можно узнать с помощью универсального параметра `--help`, например:3233```console34$ python setup.py --help build_ext35[...]36Options for 'build_ext' command:37  --build-lib (-b)     directory for compiled extension modules38  --build-temp (-t)    directory for temporary files (build by-products)39  --inplace (-i)       ignore build-lib and put compiled extensions into the40                       source directory alongside your pure Python modules41  --include-dirs (-I)  list of directories to search for header files42  --define (-D)        C preprocessor macros to define43  --undef (-U)         C preprocessor macros to undefine44  --swig-opts          list of SWIG command line options45[...]46```4748Обратите внимание: параметр, который в командной строке пишется как `--foo-bar`, в файлах конфигурации записывается как `foo_bar`.4950Например, предположим, вы хотите, чтобы расширения собирались «на месте» – то есть у вас есть расширение `pkg.ext`, и вы хотите, чтобы скомпилированный файл расширения (скажем, `ext.so` в Unix) помещался в тот же каталог с исходным кодом, что и ваши чистые модули Python `pkg.mod1` и `pkg.mod2`. Вы всегда можете использовать параметр `--inplace` в командной строке, чтобы гарантировать это:5152```sh53python setup.py build_ext --inplace54```5556Но это требует, чтобы вы всегда явно указывали команду **build\_ext** и не забывали предоставлять `--inplace`. Более простой способ – «установить и забыть» этот параметр, закодировав его в `setup.cfg`, файле конфигурации для этого дистрибутива:5758```ini59[build_ext]60inplace=161```6263Это повлияет на все сборки этого дистрибутива модулей, независимо от того, указываете ли вы явно **build\_ext**. Если вы включите `setup.cfg` в свой исходный дистрибутив, это также повлияет на сборки конечных пользователей – что, вероятно, плохая идея для этого параметра, поскольку постоянная сборка расширений «на месте» нарушит установку дистрибутива модулей. В некоторых особых случаях, однако, модули собираются прямо в их каталоге установки, так что это, возможно, полезная возможность. (Хотя распространять расширения, которые ожидают сборки в своём каталоге установки, почти всегда плохая идея.)6465Другой пример: некоторые команды принимают много параметров, которые не меняются от запуска к запуску; например, **bdist\_rpm** должен знать всё необходимое для создания файла «spec» для сборки RPM-дистрибутива. Часть этой информации берётся из скрипта setup, а часть автоматически генерируется Distutils (например, список установленных файлов). Но некоторую информацию приходится передавать в виде параметров **bdist\_rpm**, что было бы очень утомительно делать в командной строке при каждом запуске. Поэтому вот фрагмент из собственного `setup.cfg` Distutils:6667```ini68[bdist_rpm]69release = 170packager = Greg Ward <gward@python.net>71doc_files = CHANGES.txt72            README.txt73            USAGE.txt74            doc/75            examples/76```7778Обратите внимание, что параметр `doc_files` – это просто строка, разделённая пробельными символами и разбитая на несколько строк для удобства чтения.7980> **См. также**81>82> **[Синтаксис файлов конфигурации](https://python-all.ru/3.11/install/index.html#inst-config-syntax) в «Installing Python Modules»**83>84> Дополнительная информация о файлах конфигурации доступна в руководстве для системных администраторов.8586Сноски8788\[[1](https://python-all.ru/3.11/distutils/configfile.html#id1)\]8990Этот идеал, вероятно, не будет достигнут до тех пор, пока автонастройка не будет полностью поддерживаться в Distutils.91