blob: cd10a7fdf31513ef1a753e5557402f958d81e1cf [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001.. _setup-config:
2
3************************************
4Writing the Setup Configuration File
5************************************
6
7Often, it's not possible to write down everything needed to build a distribution
8*a priori*: you may need to get some information from the user, or from the
9user's system, in order to proceed. As long as that information is fairly
10simple---a list of directories to search for C header files or libraries, for
11example---then providing a configuration file, :file:`setup.cfg`, for users to
12edit is a cheap and easy way to solicit it. Configuration files also let you
13provide default values for any command option, which the installer can then
14override either on the command-line or by editing the config file.
15
16The setup configuration file is a useful middle-ground between the setup script
17---which, ideally, would be opaque to installers [#]_---and the command-line to
18the setup script, which is outside of your control and entirely up to the
19installer. In fact, :file:`setup.cfg` (and any other Distutils configuration
20files present on the target system) are processed after the contents of the
21setup script, but before the command-line. This has several useful
22consequences:
23
24.. % (If you have more advanced needs, such as determining which extensions
25.. % to build based on what capabilities are present on the target system,
26.. % then you need the Distutils ``auto-configuration'' facility. This
27.. % started to appear in Distutils 0.9 but, as of this writing, isn't mature
28.. % or stable enough yet for real-world use.)
29
30* installers can override some of what you put in :file:`setup.py` by editing
31 :file:`setup.cfg`
32
33* you can provide non-standard defaults for options that are not easily set in
34 :file:`setup.py`
35
36* installers can override anything in :file:`setup.cfg` using the command-line
37 options to :file:`setup.py`
38
Serhiy Storchaka46936d52018-04-08 19:18:04 +030039The basic syntax of the configuration file is simple:
40
41.. code-block:: ini
Georg Brandl116aa622007-08-15 14:28:22 +000042
43 [command]
44 option=value
45 ...
46
47where *command* is one of the Distutils commands (e.g. :command:`build_py`,
48:command:`install`), and *option* is one of the options that command supports.
49Any number of options can be supplied for each command, and any number of
50command sections can be included in the file. Blank lines are ignored, as are
51comments, which run from a ``'#'`` character until the end of the line. Long
52option values can be split across multiple lines simply by indenting the
53continuation lines.
54
55You can find out the list of options supported by a particular command with the
Serhiy Storchaka46936d52018-04-08 19:18:04 +030056universal :option:`!--help` option, e.g.
Georg Brandl116aa622007-08-15 14:28:22 +000057
Serhiy Storchaka46936d52018-04-08 19:18:04 +030058.. code-block:: shell-session
59
60 $ python setup.py --help build_ext
Georg Brandl116aa622007-08-15 14:28:22 +000061 [...]
62 Options for 'build_ext' command:
63 --build-lib (-b) directory for compiled extension modules
64 --build-temp (-t) directory for temporary files (build by-products)
65 --inplace (-i) ignore build-lib and put compiled extensions into the
66 source directory alongside your pure Python modules
67 --include-dirs (-I) list of directories to search for header files
68 --define (-D) C preprocessor macros to define
69 --undef (-U) C preprocessor macros to undefine
Georg Brandl48310cd2009-01-03 21:18:54 +000070 --swig-opts list of SWIG command line options
Georg Brandl116aa622007-08-15 14:28:22 +000071 [...]
72
Martin Panter5c679332016-10-30 04:20:17 +000073Note that an option spelled :option:`!--foo-bar` on the command-line is spelled
Georg Brandl3f40c402014-09-21 00:35:08 +020074``foo_bar`` in configuration files.
Georg Brandl116aa622007-08-15 14:28:22 +000075
Larry Hastings3732ed22014-03-15 21:13:56 -070076.. _distutils-build-ext-inplace:
77
Georg Brandl116aa622007-08-15 14:28:22 +000078For example, say you want your extensions to be built "in-place"---that is, you
79have an extension :mod:`pkg.ext`, and you want the compiled extension file
80(:file:`ext.so` on Unix, say) to be put in the same source directory as your
81pure Python modules :mod:`pkg.mod1` and :mod:`pkg.mod2`. You can always use the
Serhiy Storchaka46936d52018-04-08 19:18:04 +030082:option:`!--inplace` option on the command-line to ensure this:
83
84.. code-block:: sh
Georg Brandl116aa622007-08-15 14:28:22 +000085
86 python setup.py build_ext --inplace
87
88But this requires that you always specify the :command:`build_ext` command
Martin Panter5c679332016-10-30 04:20:17 +000089explicitly, and remember to provide :option:`!--inplace`. An easier way is to
Georg Brandl116aa622007-08-15 14:28:22 +000090"set and forget" this option, by encoding it in :file:`setup.cfg`, the
Serhiy Storchaka46936d52018-04-08 19:18:04 +030091configuration file for this distribution:
92
93.. code-block:: ini
Georg Brandl116aa622007-08-15 14:28:22 +000094
95 [build_ext]
96 inplace=1
97
98This will affect all builds of this module distribution, whether or not you
99explicitly specify :command:`build_ext`. If you include :file:`setup.cfg` in
100your source distribution, it will also affect end-user builds---which is
101probably a bad idea for this option, since always building extensions in-place
102would break installation of the module distribution. In certain peculiar cases,
103though, modules are built right in their installation directory, so this is
104conceivably a useful ability. (Distributing extensions that expect to be built
105in their installation directory is almost always a bad idea, though.)
106
107Another example: certain commands take a lot of options that don't change from
108run to run; for example, :command:`bdist_rpm` needs to know everything required
109to generate a "spec" file for creating an RPM distribution. Some of this
110information comes from the setup script, and some is automatically generated by
111the Distutils (such as the list of files installed). But some of it has to be
112supplied as options to :command:`bdist_rpm`, which would be very tedious to do
113on the command-line for every run. Hence, here is a snippet from the Distutils'
Serhiy Storchaka46936d52018-04-08 19:18:04 +0300114own :file:`setup.cfg`:
115
116.. code-block:: ini
Georg Brandl116aa622007-08-15 14:28:22 +0000117
118 [bdist_rpm]
119 release = 1
120 packager = Greg Ward <gward@python.net>
121 doc_files = CHANGES.txt
122 README.txt
123 USAGE.txt
124 doc/
125 examples/
126
Georg Brandl3f40c402014-09-21 00:35:08 +0200127Note that the ``doc_files`` option is simply a whitespace-separated string
Georg Brandl116aa622007-08-15 14:28:22 +0000128split across multiple lines for readability.
129
130
131.. seealso::
132
133 :ref:`inst-config-syntax` in "Installing Python Modules"
134 More information on the configuration files is available in the manual for
135 system administrators.
136
137
138.. rubric:: Footnotes
139
140.. [#] This ideal probably won't be achieved until auto-configuration is fully
141 supported by the Distutils.
142