This commit was manufactured by cvs2svn to create tag 'r221'.
[python/dscho.git] / Doc / dist / dist.tex
blobb06d88a7c9cfc5142f3df23ad16b21b6b1fbf945
1 \documentclass{howto}
2 \usepackage{distutils}
4 % $Id$
6 \title{Distributing Python Modules}
8 \author{Greg Ward}
9 \authoraddress{Email: \email{gward@python.net}}
11 \makeindex
13 \begin{document}
15 \maketitle
16 \begin{abstract}
17 \noindent
18 This document describes the Python Distribution Utilities
19 (``Distutils'') from the module developer's point-of-view, describing
20 how to use the Distutils to make Python modules and extensions easily
21 available to a wider audience with very little overhead for
22 build/release/install mechanics.
23 \end{abstract}
25 % The ugly "%begin{latexonly}" pseudo-environment supresses the table
26 % of contents for HTML generation.
28 %begin{latexonly}
29 \tableofcontents
30 %end{latexonly}
33 \section{Introduction}
34 \label{intro}
36 In the past, Python module developers have not had much infrastructure
37 support for distributing modules, nor have Python users had much support
38 for installing and maintaining third-party modules. With the
39 introduction of the Python Distribution Utilities (Distutils for short)
40 in Python 1.6, this situation should start to improve.
42 This document only covers using the Distutils to distribute your Python
43 modules. Using the Distutils does not tie you to Python 1.6, though:
44 the Distutils work just fine with Python 1.5.2, and it is reasonable
45 (and expected to become commonplace) to expect users of Python 1.5.2 to
46 download and install the Distutils separately before they can install
47 your modules. Python 1.6 (or later) users, of course, won't have to add
48 anything to their Python installation in order to use the Distutils to
49 install third-party modules.
51 This document concentrates on the role of developer/distributor: if
52 you're looking for information on installing Python modules, you
53 should refer to the \citetitle[../inst/inst.html]{Installing Python
54 Modules} manual.
57 \section{Concepts \& Terminology}
58 \label{concepts}
60 Using the Distutils is quite simple, both for module developers and for
61 users/administrators installing third-party modules. As a developer,
62 your responsibilities (apart from writing solid, well-documented and
63 well-tested code, of course!) are:
64 \begin{itemize}
65 \item write a setup script (\file{setup.py} by convention)
66 \item (optional) write a setup configuration file
67 \item create a source distribution
68 \item (optional) create one or more built (binary) distributions
69 \end{itemize}
70 Each of these tasks is covered in this document.
72 Not all module developers have access to a multitude of platforms, so
73 it's not always feasible to expect them to create a multitude of built
74 distributions. It is hoped that a class of intermediaries, called
75 \emph{packagers}, will arise to address this need. Packagers will take
76 source distributions released by module developers, build them on one or
77 more platforms, and release the resulting built distributions. Thus,
78 users on the most popular platforms will be able to install most popular
79 Python module distributions in the most natural way for their platform,
80 without having to run a single setup script or compile a line of code.
83 \subsection{A simple example}
84 \label{simple-example}
86 The setup script is usually quite simple, although since it's written in
87 Python, there are no arbitrary limits to what you can do with
88 it.\footnote{But be careful about putting arbitrarily expensive
89 operations in your setup script; unlike, say, Autoconf-style configure
90 scripts, the setup script may be run multiple times in the course of
91 building and installing your module distribution. If you need to
92 insert potentially expensive processing steps into the Distutils
93 chain, see section~\ref{extending} on extending the Distutils.} If
94 all you want to do is distribute a module called \module{foo}, contained
95 in a file \file{foo.py}, then your setup script can be as little as
96 this:
98 \begin{verbatim}
99 from distutils.core import setup
100 setup(name="foo",
101 version="1.0",
102 py_modules=["foo"])
103 \end{verbatim}
105 Some observations:
106 \begin{itemize}
107 \item most information that you supply to the Distutils is supplied as
108 keyword arguments to the \function{setup()} function
109 \item those keyword arguments fall into two categories: package
110 meta-data (name, version number) and information about what's in the
111 package (a list of pure Python modules, in this case)
112 \item modules are specified by module name, not filename (the same will
113 hold true for packages and extensions)
114 \item it's recommended that you supply a little more meta-data, in
115 particular your name, email address and a URL for the project
116 (see section~\ref{setup-script} for an example)
117 \end{itemize}
119 To create a source distribution for this module, you would create a
120 setup script, \file{setup.py}, containing the above code, and run:
122 \begin{verbatim}
123 python setup.py sdist
124 \end{verbatim}
126 which will create an archive file (e.g., tarball on \UNIX, ZIP file on
127 Windows) containing your setup script, \file{setup.py}, and your module,
128 \file{foo.py}. The archive file will be named \file{Foo-1.0.tar.gz} (or
129 \file{.zip}), and will unpack into a directory \file{Foo-1.0}.
131 If an end-user wishes to install your \module{foo} module, all she has
132 to do is download \file{Foo-1.0.tar.gz} (or \file{.zip}), unpack it,
133 and---from the \file{Foo-1.0} directory---run
135 \begin{verbatim}
136 python setup.py install
137 \end{verbatim}
139 which will ultimately copy \file{foo.py} to the appropriate directory
140 for third-party modules in their Python installation.
142 This simple example demonstrates some fundamental concepts of the
143 Distutils: first, both developers and installers have the same basic
144 user interface, i.e. the setup script. The difference is which
145 Distutils \emph{commands} they use: the \command{sdist} command is
146 almost exclusively for module developers, while \command{install} is
147 more often for installers (although most developers will want to install
148 their own code occasionally).
150 If you want to make things really easy for your users, you can create
151 one or more built distributions for them. For instance, if you are
152 running on a Windows machine, and want to make things easy for other
153 Windows users, you can create an executable installer (the most
154 appropriate type of built distribution for this platform) with the
155 \command{bdist\_wininst} command. For example:
157 \begin{verbatim}
158 python setup.py bdist_wininst
159 \end{verbatim}
161 will create an executable installer, \file{Foo-1.0.win32.exe}, in the
162 current directory.
164 Currently (Distutils 0.9.2), the only other useful built
165 distribution format is RPM, implemented by the \command{bdist\_rpm}
166 command. For example, the following command will create an RPM file
167 called \file{Foo-1.0.noarch.rpm}:
169 \begin{verbatim}
170 python setup.py bdist_rpm
171 \end{verbatim}
173 (This uses the \command{rpm} command, so has to be run on an RPM-based
174 system such as Red Hat Linux, SuSE Linux, or Mandrake Linux.)
176 You can find out what distribution formats are available at any time by
177 running
179 \begin{verbatim}
180 python setup.py bdist --help-formats
181 \end{verbatim}
184 \subsection{General Python terminology}
185 \label{python-terms}
187 If you're reading this document, you probably have a good idea of what
188 modules, extensions, and so forth are. Nevertheless, just to be sure
189 that everyone is operating from a common starting point, we offer the
190 following glossary of common Python terms:
191 \begin{description}
192 \item[module] the basic unit of code reusability in Python: a block of
193 code imported by some other code. Three types of modules concern us
194 here: pure Python modules, extension modules, and packages.
195 \item[pure Python module] a module written in Python and contained in a
196 single \file{.py} file (and possibly associated \file{.pyc} and/or
197 \file{.pyo} files). Sometimes referred to as a ``pure module.''
198 \item[extension module] a module written in the low-level language of
199 the Python implementation: C/C++ for Python, Java for JPython.
200 Typically contained in a single dynamically loadable pre-compiled
201 file, e.g. a shared object (\file{.so}) file for Python extensions on
202 \UNIX, a DLL (given the \file{.pyd} extension) for Python extensions
203 on Windows, or a Java class file for JPython extensions. (Note that
204 currently, the Distutils only handles C/C++ extensions for Python.)
205 \item[package] a module that contains other modules; typically contained
206 in a directory in the filesystem and distinguished from other
207 directories by the presence of a file \file{\_\_init\_\_.py}.
208 \item[root package] the root of the hierarchy of packages. (This isn't
209 really a package, since it doesn't have an \file{\_\_init\_\_.py}
210 file. But we have to call it something.) The vast majority of the
211 standard library is in the root package, as are many small, standalone
212 third-party modules that don't belong to a larger module collection.
213 Unlike regular packages, modules in the root package can be found in
214 many directories: in fact, every directory listed in \code{sys.path}
215 can contribute modules to the root package.
216 \end{description}
219 \subsection{Distutils-specific terminology}
220 \label{distutils-term}
222 The following terms apply more specifically to the domain of
223 distributing Python modules using the Distutils:
224 \begin{description}
225 \item[module distribution] a collection of Python modules distributed
226 together as a single downloadable resource and meant to be installed
227 \emph{en masse}. Examples of some well-known module distributions are
228 Numeric Python, PyXML, PIL (the Python Imaging Library), or
229 mxDateTime. (This would be called a \emph{package}, except that term
230 is already taken in the Python context: a single module distribution
231 may contain zero, one, or many Python packages.)
232 \item[pure module distribution] a module distribution that contains only
233 pure Python modules and packages. Sometimes referred to as a ``pure
234 distribution.''
235 \item[non-pure module distribution] a module distribution that contains
236 at least one extension module. Sometimes referred to as a ``non-pure
237 distribution.''
238 \item[distribution root] the top-level directory of your source tree (or
239 source distribution); the directory where \file{setup.py} exists and
240 is run from
241 \end{description}
244 \section{Writing the Setup Script}
245 \label{setup-script}
247 The setup script is the centre of all activity in building,
248 distributing, and installing modules using the Distutils. The main
249 purpose of the setup script is to describe your module distribution to
250 the Distutils, so that the various commands that operate on your modules
251 do the right thing. As we saw in section~\ref{simple-example} above,
252 the setup script consists mainly of a call to \function{setup()}, and
253 most information supplied to the Distutils by the module developer is
254 supplied as keyword arguments to \function{setup()}.
256 Here's a slightly more involved example, which we'll follow for the next
257 couple of sections: the Distutils' own setup script. (Keep in mind that
258 although the Distutils are included with Python 1.6 and later, they also
259 have an independent existence so that Python 1.5.2 users can use them to
260 install other module distributions. The Distutils' own setup script,
261 shown here, is used to install the package into Python 1.5.2.)
263 \begin{verbatim}
264 #!/usr/bin/env python
266 from distutils.core import setup
268 setup(name="Distutils",
269 version="1.0",
270 description="Python Distribution Utilities",
271 author="Greg Ward",
272 author_email="gward@python.net",
273 url="http://www.python.org/sigs/distutils-sig/",
274 packages=['distutils', 'distutils.command'],
276 \end{verbatim}
278 There are only two differences between this and the trivial one-file
279 distribution presented in section~\ref{simple-example}: more
280 meta-data, and the specification of pure Python modules by package,
281 rather than by module. This is important since the Distutils consist of
282 a couple of dozen modules split into (so far) two packages; an explicit
283 list of every module would be tedious to generate and difficult to
284 maintain.
286 Note that any pathnames (files or directories) supplied in the setup
287 script should be written using the \UNIX{} convention, i.e.
288 slash-separated. The Distutils will take care of converting this
289 platform-neutral representation into whatever is appropriate on your
290 current platform before actually using the pathname. This makes your
291 setup script portable across operating systems, which of course is one
292 of the major goals of the Distutils. In this spirit, all pathnames in
293 this document are slash-separated (MacOS programmers should keep in
294 mind that the \emph{absence} of a leading slash indicates a relative
295 path, the opposite of the MacOS convention with colons).
297 This, of course, only applies to pathnames given to Distutils functions.
298 If you, for example, use standard python functions such as glob.glob
299 or os.listdir to specify files, you should be careful to write portable
300 code instead of hardcoding path separators:
302 \begin{verbatim}
303 glob.glob(os.path.join('mydir', 'subdir', '*.html'))
304 os.listdir(os.path.join('mydir', 'subdir'))
305 \end{verbatim}
307 \subsection{Listing whole packages}
308 \label{listing-packages}
310 The \option{packages} option tells the Distutils to process (build,
311 distribute, install, etc.) all pure Python modules found in each package
312 mentioned in the \option{packages} list. In order to do this, of
313 course, there has to be a correspondence between package names and
314 directories in the filesystem. The default correspondence is the most
315 obvious one, i.e. package \module{distutils} is found in the directory
316 \file{distutils} relative to the distribution root. Thus, when you say
317 \code{packages = ['foo']} in your setup script, you are promising that
318 the Distutils will find a file \file{foo/\_\_init\_\_.py} (which might
319 be spelled differently on your system, but you get the idea) relative to
320 the directory where your setup script lives. (If you break this
321 promise, the Distutils will issue a warning but process the broken
322 package anyways.)
324 If you use a different convention to lay out your source directory,
325 that's no problem: you just have to supply the \option{package\_dir}
326 option to tell the Distutils about your convention. For example, say
327 you keep all Python source under \file{lib}, so that modules in the
328 ``root package'' (i.e., not in any package at all) are right in
329 \file{lib}, modules in the \module{foo} package are in \file{lib/foo},
330 and so forth. Then you would put
332 \begin{verbatim}
333 package_dir = {'': 'lib'}
334 \end{verbatim}
336 in your setup script. (The keys to this dictionary are package names,
337 and an empty package name stands for the root package. The values are
338 directory names relative to your distribution root.) In this case, when
339 you say \code{packages = ['foo']}, you are promising that the file
340 \file{lib/foo/\_\_init\_\_.py} exists.
342 Another possible convention is to put the \module{foo} package right in
343 \file{lib}, the \module{foo.bar} package in \file{lib/bar}, etc. This
344 would be written in the setup script as
346 \begin{verbatim}
347 package_dir = {'foo': 'lib'}
348 \end{verbatim}
350 A \code{\var{package}: \var{dir}} entry in the \option{package\_dir}
351 dictionary implicitly applies to all packages below \var{package}, so
352 the \module{foo.bar} case is automatically handled here. In this
353 example, having \code{packages = ['foo', 'foo.bar']} tells the Distutils
354 to look for \file{lib/\_\_init\_\_.py} and
355 \file{lib/bar/\_\_init\_\_.py}. (Keep in mind that although
356 \option{package\_dir} applies recursively, you must explicitly list all
357 packages in \option{packages}: the Distutils will \emph{not} recursively
358 scan your source tree looking for any directory with an
359 \file{\_\_init\_\_.py} file.)
362 \subsection{Listing individual modules}
363 \label{listing-modules}
365 For a small module distribution, you might prefer to list all modules
366 rather than listing packages---especially the case of a single module
367 that goes in the ``root package'' (i.e., no package at all). This
368 simplest case was shown in section~\ref{simple-example}; here is a
369 slightly more involved example:
371 \begin{verbatim}
372 py_modules = ['mod1', 'pkg.mod2']
373 \end{verbatim}
375 This describes two modules, one of them in the ``root'' package, the
376 other in the \module{pkg} package. Again, the default package/directory
377 layout implies that these two modules can be found in \file{mod1.py} and
378 \file{pkg/mod2.py}, and that \file{pkg/\_\_init\_\_.py} exists as well.
379 And again, you can override the package/directory correspondence using
380 the \option{package\_dir} option.
383 \subsection{Describing extension modules}
384 \label{describing-extensions}
386 Just as writing Python extension modules is a bit more complicated than
387 writing pure Python modules, describing them to the Distutils is a bit
388 more complicated. Unlike pure modules, it's not enough just to list
389 modules or packages and expect the Distutils to go out and find the
390 right files; you have to specify the extension name, source file(s), and
391 any compile/link requirements (include directories, libraries to link
392 with, etc.).
394 All of this is done through another keyword argument to
395 \function{setup()}, the \option{extensions} option. \option{extensions}
396 is just a list of \class{Extension} instances, each of which describes a
397 single extension module. Suppose your distribution includes a single
398 extension, called \module{foo} and implemented by \file{foo.c}. If no
399 additional instructions to the compiler/linker are needed, describing
400 this extension is quite simple:
402 \begin{verbatim}
403 Extension("foo", ["foo.c"])
404 \end{verbatim}
406 The \class{Extension} class can be imported from
407 \module{distutils.core}, along with \function{setup()}. Thus, the setup
408 script for a module distribution that contains only this one extension
409 and nothing else might be:
411 \begin{verbatim}
412 from distutils.core import setup, Extension
413 setup(name="foo", version="1.0",
414 ext_modules=[Extension("foo", ["foo.c"])])
415 \end{verbatim}
417 The \class{Extension} class (actually, the underlying extension-building
418 machinery implemented by the \command{build\_ext} command) supports a
419 great deal of flexibility in describing Python extensions, which is
420 explained in the following sections.
423 \subsubsection{Extension names and packages}
425 The first argument to the \class{Extension} constructor is always the
426 name of the extension, including any package names. For example,
428 \begin{verbatim}
429 Extension("foo", ["src/foo1.c", "src/foo2.c"])
430 \end{verbatim}
432 describes an extension that lives in the root package, while
434 \begin{verbatim}
435 Extension("pkg.foo", ["src/foo1.c", "src/foo2.c"])
436 \end{verbatim}
438 describes the same extension in the \module{pkg} package. The source
439 files and resulting object code are identical in both cases; the only
440 difference is where in the filesystem (and therefore where in Python's
441 namespace hierarchy) the resulting extension lives.
443 If you have a number of extensions all in the same package (or all under
444 the same base package), use the \option{ext\_package} keyword argument
445 to \function{setup()}. For example,
447 \begin{verbatim}
448 setup(...
449 ext_package="pkg",
450 ext_modules=[Extension("foo", ["foo.c"]),
451 Extension("subpkg.bar", ["bar.c"])]
453 \end{verbatim}
455 will compile \file{foo.c} to the extension \module{pkg.foo}, and
456 \file{bar.c} to \module{pkg.subpkg.bar}.
459 \subsubsection{Extension source files}
461 The second argument to the \class{Extension} constructor is a list of
462 source files. Since the Distutils currently only support C/C++
463 extensions, these are normally C/C++ source files. (Be sure to use
464 appropriate extensions to distinguish C++ source files: \file{.cc} and
465 \file{.cpp} seem to be recognized by both \UNIX{} and Windows compilers.)
467 However, you can also include SWIG interface (\file{.i}) files in the
468 list; the \command{build\_ext} command knows how to deal with SWIG
469 extensions: it will run SWIG on the interface file and compile the
470 resulting C/C++ file into your extension.
472 \XXX{SWIG support is rough around the edges and largely untested;
473 especially SWIG support of C++ extensions! Explain in more detail
474 here when the interface firms up.}
476 On some platforms, you can include non-source files that are processed
477 by the compiler and included in your extension. Currently, this just
478 means Windows message text (\file{.mc}) files and resource definition
479 (\file{.rc}) files for Visual C++. These will be compiled to binary resource
480 (\file{.res}) files and linked into the executable.
483 \subsubsection{Preprocessor options}
485 Three optional arguments to \class{Extension} will help if you need to
486 specify include directories to search or preprocessor macros to
487 define/undefine: \code{include\_dirs}, \code{define\_macros}, and
488 \code{undef\_macros}.
490 For example, if your extension requires header files in the
491 \file{include} directory under your distribution root, use the
492 \code{include\_dirs} option:
494 \begin{verbatim}
495 Extension("foo", ["foo.c"], include_dirs=["include"])
496 \end{verbatim}
498 You can specify absolute directories there; if you know that your
499 extension will only be built on \UNIX{} systems with X11R6 installed to
500 \file{/usr}, you can get away with
502 \begin{verbatim}
503 Extension("foo", ["foo.c"], include_dirs=["/usr/include/X11"])
504 \end{verbatim}
506 You should avoid this sort of non-portable usage if you plan to
507 distribute your code: it's probably better to write your code to include
508 (e.g.) \code{<X11/Xlib.h>}.
510 If you need to include header files from some other Python extension,
511 you can take advantage of the fact that the Distutils install extension
512 header files in a consistent way. For example, the Numerical Python
513 header files are installed (on a standard \UNIX{} installation) to
514 \file{/usr/local/include/python1.5/Numerical}. (The exact location will
515 differ according to your platform and Python installation.) Since the
516 Python include directory---\file{/usr/local/include/python1.5} in this
517 case---is always included in the search path when building Python
518 extensions, the best approach is to include (e.g.)
519 \code{<Numerical/arrayobject.h>}. If you insist on putting the
520 \file{Numerical} include directory right into your header search path,
521 though, you can find that directory using the Distutils
522 \module{sysconfig} module:
524 \begin{verbatim}
525 from distutils.sysconfig import get_python_inc
526 incdir = os.path.join(get_python_inc(plat_specific=1), "Numerical")
527 setup(...,
528 Extension(..., include_dirs=[incdir]))
529 \end{verbatim}
531 Even though this is quite portable---it will work on any Python
532 installation, regardless of platform---it's probably easier to just
533 write your C code in the sensible way.
535 You can define and undefine pre-processor macros with the
536 \code{define\_macros} and \code{undef\_macros} options.
537 \code{define\_macros} takes a list of \code{(name, value)} tuples, where
538 \code{name} is the name of the macro to define (a string) and
539 \code{value} is its value: either a string or \code{None}. (Defining a
540 macro \code{FOO} to \code{None} is the equivalent of a bare
541 \code{\#define FOO} in your C source: with most compilers, this sets
542 \code{FOO} to the string \code{1}.) \code{undef\_macros} is just
543 a list of macros to undefine.
545 For example:
547 \begin{verbatim}
548 Extension(...,
549 define_macros=[('NDEBUG', '1')],
550 ('HAVE_STRFTIME', None),
551 undef_macros=['HAVE_FOO', 'HAVE_BAR'])
552 \end{verbatim}
554 is the equivalent of having this at the top of every C source file:
556 \begin{verbatim}
557 #define NDEBUG 1
558 #define HAVE_STRFTIME
559 #undef HAVE_FOO
560 #undef HAVE_BAR
561 \end{verbatim}
564 \subsubsection{Library options}
566 You can also specify the libraries to link against when building your
567 extension, and the directories to search for those libraries. The
568 \code{libraries} option is a list of libraries to link against,
569 \code{library\_dirs} is a list of directories to search for libraries at
570 link-time, and \code{runtime\_library\_dirs} is a list of directories to
571 search for shared (dynamically loaded) libraries at run-time.
573 For example, if you need to link against libraries known to be in the
574 standard library search path on target systems
576 \begin{verbatim}
577 Extension(...,
578 libraries=["gdbm", "readline"])
579 \end{verbatim}
581 If you need to link with libraries in a non-standard location, you'll
582 have to include the location in \code{library\_dirs}:
584 \begin{verbatim}
585 Extension(...,
586 library_dirs=["/usr/X11R6/lib"],
587 libraries=["X11", "Xt"])
588 \end{verbatim}
590 (Again, this sort of non-portable construct should be avoided if you
591 intend to distribute your code.)
593 \XXX{Should mention clib libraries here or somewhere else!}
595 \subsubsection{Other options}
597 There are still some other options which can be used to handle special
598 cases.
600 The \option{extra\_objects} option is a list of object files to be passed
601 to the linker. These files must not have extensions, as the default
602 extension for the compiler is used.
604 \option{extra\_compile\_args} and \option{extra\_link\_args} can be used
605 to specify additional command line options for the compiler resp.
606 the linker command line.
608 \option{export\_symbols} is only useful on windows, it can contain a list
609 of symbols (functions or variables) to be exported. This option
610 is not needed when building compiled extensions: the \code{initmodule}
611 function will automatically be added to the exported symbols list
612 by Distutils.
614 \subsection{Listing scripts}
615 So far we have been dealing with pure and non-pure Python modules,
616 which are usually not run by themselves but imported by scripts.
618 Scripts are files containing Python source code, indended to be started
619 from the command line.
620 Distutils doesn't provide much functionality for the scripts: the only
621 support Distutils gives is to adjust the first line of the script
622 if it starts with \code{\#!} and contains the word ``python'' to refer
623 to the current interpreter location.
625 The \option{scripts} option simply is a list of files to be handled
626 in this way.
629 \subsection{Listing additional files}
631 The \option{data\_files} option can be used to specify additional
632 files needed by the module distribution: configuration files,
633 data files, anything which does not fit in the previous categories.
635 \option{data\_files} specifies a sequence of (\var{directory},
636 \var{files}) pairs in the following way:
638 \begin{verbatim}
639 setup(...
640 data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
641 ('config', ['cfg/data.cfg'])])
642 \end{verbatim}
644 Note that you can specify the directory names where the data files
645 will be installed, but you cannot rename the data files themselves.
647 Each (\var{directory}, \var{files}) pair in the sequence specifies the
648 installation directory and the files to install there. If
649 \var{directory} is a relative path, it is interpreted relative to the
650 installation prefix (Python's \code{sys.prefix} for pure-Python
651 packages, \code{sys.exec_prefix} for packages that contain extension
652 modules). Each file name in \var{files} is interpreted relative to
653 the \file{setup.py} script at the top of the package source
654 distribution. No directory information from \var{files} is used to
655 determine the final location of the installed file; only the name of
656 the file is used.
658 You can specify the \option{data\_files} options as a simple sequence
659 of files without specifying a target directory, but this is not recommended,
660 and the \command{install} command will print a warning in this case.
661 To install data files directly in the target directory, an empty
662 string should be given as the directory.
665 \section{Writing the Setup Configuration File}
666 \label{setup-config}
668 Often, it's not possible to write down everything needed to build a
669 distribution \emph{a priori}: you may need to get some information from
670 the user, or from the user's system, in order to proceed. As long as
671 that information is fairly simple---a list of directories to search for
672 C header files or libraries, for example---then providing a
673 configuration file, \file{setup.cfg}, for users to edit is a cheap and
674 easy way to solicit it. Configuration files also let you provide
675 default values for any command option, which the installer can then
676 override either on the command-line or by editing the config file.
678 (If you have more advanced needs, such as determining which extensions
679 to build based on what capabilities are present on the target system,
680 then you need the Distutils ``auto-configuration'' facility. This
681 started to appear in Distutils 0.9 but, as of this writing, isn't mature
682 or stable enough yet for real-world use.)
684 The setup configuration file is a useful middle-ground between the setup
685 script---which, ideally, would be opaque to installers\footnote{This
686 ideal probably won't be achieved until auto-configuration is fully
687 supported by the Distutils.}---and the command-line to the setup
688 script, which is outside of your control and entirely up to the
689 installer. In fact, \file{setup.cfg} (and any other Distutils
690 configuration files present on the target system) are processed after
691 the contents of the setup script, but before the command-line. This has
692 several useful consequences:
693 \begin{itemize}
694 \item installers can override some of what you put in \file{setup.py} by
695 editing \file{setup.cfg}
696 \item you can provide non-standard defaults for options that are not
697 easily set in \file{setup.py}
698 \item installers can override anything in \file{setup.cfg} using the
699 command-line options to \file{setup.py}
700 \end{itemize}
702 The basic syntax of the configuration file is simple:
704 \begin{verbatim}
705 [command]
706 option=value
708 \end{verbatim}
710 where \var{command} is one of the Distutils commands (e.g.
711 \command{build\_py}, \command{install}), and \var{option} is one of the
712 options that command supports. Any number of options can be supplied
713 for each command, and any number of command sections can be included in
714 the file. Blank lines are ignored, as are comments (from a
715 \character{\#} character to end-of-line). Long option values can be
716 split across multiple lines simply by indenting the continuation lines.
718 You can find out the list of options supported by a particular command
719 with the universal \longprogramopt{help} option, e.g.
721 \begin{verbatim}
722 > python setup.py --help build_ext
723 [...]
724 Options for 'build_ext' command:
725 --build-lib (-b) directory for compiled extension modules
726 --build-temp (-t) directory for temporary files (build by-products)
727 --inplace (-i) ignore build-lib and put compiled extensions into the
728 source directory alongside your pure Python modules
729 --include-dirs (-I) list of directories to search for header files
730 --define (-D) C preprocessor macros to define
731 --undef (-U) C preprocessor macros to undefine
732 [...]
733 \end{verbatim}
735 Or consult section \ref{reference} of this document (the command
736 reference).
738 Note that an option spelled \longprogramopt{foo-bar} on the command-line
739 is spelled \option{foo\_bar} in configuration files.
741 For example, say you want your extensions to be built
742 ``in-place''---that is, you have an extension \module{pkg.ext}, and you
743 want the compiled extension file (\file{ext.so} on \UNIX, say) to be put
744 in the same source directory as your pure Python modules
745 \module{pkg.mod1} and \module{pkg.mod2}. You can always use the
746 \longprogramopt{inplace} option on the command-line to ensure this:
748 \begin{verbatim}
749 python setup.py build_ext --inplace
750 \end{verbatim}
752 But this requires that you always specify the \command{build\_ext}
753 command explicitly, and remember to provide \longprogramopt{inplace}.
754 An easier way is to ``set and forget'' this option, by encoding it in
755 \file{setup.cfg}, the configuration file for this distribution:
757 \begin{verbatim}
758 [build_ext]
759 inplace=1
760 \end{verbatim}
762 This will affect all builds of this module distribution, whether or not
763 you explcitly specify \command{build\_ext}. If you include
764 \file{setup.cfg} in your source distribution, it will also affect
765 end-user builds---which is probably a bad idea for this option, since
766 always building extensions in-place would break installation of the
767 module distribution. In certain peculiar cases, though, modules are
768 built right in their installation directory, so this is conceivably a
769 useful ability. (Distributing extensions that expect to be built in
770 their installation directory is almost always a bad idea, though.)
772 Another example: certain commands take a lot of options that don't
773 change from run-to-run; for example, \command{bdist\_rpm} needs to know
774 everything required to generate a ``spec'' file for creating an RPM
775 distribution. Some of this information comes from the setup script, and
776 some is automatically generated by the Distutils (such as the list of
777 files installed). But some of it has to be supplied as options to
778 \command{bdist\_rpm}, which would be very tedious to do on the
779 command-line for every run. Hence, here is a snippet from the
780 Distutils' own \file{setup.cfg}:
782 \begin{verbatim}
783 [bdist_rpm]
784 release = 1
785 packager = Greg Ward <gward@python.net>
786 doc_files = CHANGES.txt
787 README.txt
788 USAGE.txt
789 doc/
790 examples/
791 \end{verbatim}
793 Note that the \option{doc\_files} option is simply a
794 whitespace-separated string split across multiple lines for readability.
797 \begin{seealso}
798 \seetitle[../inst/config-syntax.html]{Installing Python
799 Modules}{More information on the configuration files is
800 available in the manual for system administrators.}
801 \end{seealso}
804 \section{Creating a Source Distribution}
805 \label{source-dist}
807 As shown in section~\ref{simple-example}, you use the
808 \command{sdist} command to create a source distribution. In the
809 simplest case,
811 \begin{verbatim}
812 python setup.py sdist
813 \end{verbatim}
815 (assuming you haven't specified any \command{sdist} options in the setup
816 script or config file), \command{sdist} creates the archive of the
817 default format for the current platform. The default format is gzip'ed
818 tar file (\file{.tar.gz}) on \UNIX, and ZIP file on Windows.
819 \XXX{no MacOS support here}
821 You can specify as many formats as you like using the
822 \longprogramopt{formats} option, for example:
824 \begin{verbatim}
825 python setup.py sdist --formats=gztar,zip
826 \end{verbatim}
828 to create a gzipped tarball and a zip file. The available formats are:
829 \begin{tableiii}{l|l|c}{code}%
830 {Format}{Description}{Notes}
831 \lineiii{zip}{zip file (\file{.zip})}{(1),(3)}
832 \lineiii{gztar}{gzip'ed tar file (\file{.tar.gz})}{(2),(4)}
833 \lineiii{bztar}{bzip2'ed tar file (\file{.tar.gz})}{(4)}
834 \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{(4)}
835 \lineiii{tar}{tar file (\file{.tar})}{(4)}
836 \end{tableiii}
838 \noindent Notes:
839 \begin{description}
840 \item[(1)] default on Windows
841 \item[(2)] default on \UNIX
842 \item[(3)] requires either external \program{zip} utility or
843 \module{zipfile} module (not part of the standard Python library)
844 \item[(4)] requires external utilities: \program{tar} and possibly one
845 of \program{gzip}, \program{bzip2}, or \program{compress}
846 \end{description}
850 \subsection{Specifying the files to distribute}
851 \label{manifest}
853 If you don't supply an explicit list of files (or instructions on how to
854 generate one), the \command{sdist} command puts a minimal default set
855 into the source distribution:
856 \begin{itemize}
857 \item all Python source files implied by the \option{py\_modules} and
858 \option{packages} options
859 \item all C source files mentioned in the \option{ext\_modules} or
860 \option{libraries} options (\XXX{getting C library sources currently
861 broken -- no get\_source\_files() method in build\_clib.py!})
862 \item anything that looks like a test script: \file{test/test*.py}
863 (currently, the Distutils don't do anything with test scripts except
864 include them in source distributions, but in the future there will be
865 a standard for testing Python module distributions)
866 \item \file{README.txt} (or \file{README}), \file{setup.py} (or whatever
867 you called your setup script), and \file{setup.cfg}
868 \end{itemize}
869 Sometimes this is enough, but usually you will want to specify
870 additional files to distribute. The typical way to do this is to write
871 a \emph{manifest template}, called \file{MANIFEST.in} by default. The
872 manifest template is just a list of instructions for how to generate
873 your manifest file, \file{MANIFEST}, which is the exact list of files to
874 include in your source distribution. The \command{sdist} command
875 processes this template and generates a manifest based on its
876 instructions and what it finds in the filesystem.
878 If you prefer to roll your own manifest file, the format is simple: one
879 filename per line, regular files (or symlinks to them) only. If you do
880 supply your own \file{MANIFEST}, you must specify everything: the
881 default set of files described above does not apply in this case.
883 The manifest template has one command per line, where each command
884 specifies a set of files to include or exclude from the source
885 distribution. For an example, again we turn to the Distutils' own
886 manifest template:
888 \begin{verbatim}
889 include *.txt
890 recursive-include examples *.txt *.py
891 prune examples/sample?/build
892 \end{verbatim}
894 The meanings should be fairly clear: include all files in the
895 distribution root matching \code{*.txt}, all files anywhere under the
896 \file{examples} directory matching \code{*.txt} or \code{*.py}, and
897 exclude all directories matching \code{examples/sample?/build}. All of
898 this is done \emph{after} the standard include set, so you can exclude
899 files from the standard set with explicit instructions in the manifest
900 template. (Or, you can use the \longprogramopt{no-defaults} option to
901 disable the standard set entirely.) There are several other commands
902 available in the manifest template mini-language; see
903 section~\ref{sdist-cmd}.
905 The order of commands in the manifest template matters: initially, we
906 have the list of default files as described above, and each command in
907 the template adds to or removes from that list of files. Once we have
908 fully processed the manifest template, we remove files that should not
909 be included in the source distribution:
910 \begin{itemize}
911 \item all files in the Distutils ``build'' tree (default \file{build/})
912 \item all files in directories named \file{RCS} or \file{CVS}
913 \end{itemize}
914 Now we have our complete list of files, which is written to the manifest
915 for future reference, and then used to build the source distribution
916 archive(s).
918 You can disable the default set of included files with the
919 \longprogramopt{no-defaults} option, and you can disable the standard
920 exclude set with \longprogramopt{no-prune}.
922 Following the Distutils' own manifest template, let's trace how the
923 \command{sdist} command builds the list of files to include in the
924 Distutils source distribution:
925 \begin{enumerate}
926 \item include all Python source files in the \file{distutils} and
927 \file{distutils/command} subdirectories (because packages
928 corresponding to those two directories were mentioned in the
929 \option{packages} option in the setup script---see
930 section~\ref{setup-script})
931 \item include \file{README.txt}, \file{setup.py}, and \file{setup.cfg}
932 (standard files)
933 \item include \file{test/test*.py} (standard files)
934 \item include \file{*.txt} in the distribution root (this will find
935 \file{README.txt} a second time, but such redundancies are weeded out
936 later)
937 \item include anything matching \file{*.txt} or \file{*.py} in the
938 sub-tree under \file{examples},
939 \item exclude all files in the sub-trees starting at directories
940 matching \file{examples/sample?/build}---this may exclude files
941 included by the previous two steps, so it's important that the
942 \code{prune} command in the manifest template comes after the
943 \code{recursive-include} command
944 \item exclude the entire \file{build} tree, and any \file{RCS} or
945 \file{CVS} directories
946 \end{enumerate}
947 Just like in the setup script, file and directory names in the manifest
948 template should always be slash-separated; the Distutils will take care
949 of converting them to the standard representation on your platform.
950 That way, the manifest template is portable across operating systems.
953 \subsection{Manifest-related options}
954 \label{manifest-options}
956 The normal course of operations for the \command{sdist} command is as
957 follows:
958 \begin{itemize}
959 \item if the manifest file, \file{MANIFEST} doesn't exist, read
960 \file{MANIFEST.in} and create the manifest
961 \item if neither \file{MANIFEST} nor \file{MANIFEST.in} exist, create a
962 manifest with just the default file set\footnote{In versions of the
963 Distutils up to and including 0.9.2 (Python 2.0b1), this feature was
964 broken; use the \programopt{-f} (\longprogramopt{force-manifest})
965 option to work around the bug.}
966 \item if either \file{MANIFEST.in} or the setup script (\file{setup.py})
967 are more recent than \file{MANIFEST}, recreate \file{MANIFEST} by
968 reading \file{MANIFEST.in}
969 \item use the list of files now in \file{MANIFEST} (either just
970 generated or read in) to create the source distribution archive(s)
971 \end{itemize}
972 There are a couple of options that modify this behaviour. First, use
973 the \longprogramopt{no-defaults} and \longprogramopt{no-prune} to
974 disable the standard ``include'' and ``exclude'' sets.\footnote{Note
975 that if you have no manifest template, no manifest, and use the
976 \longprogramopt{no-defaults}, you will get an empty manifest. Another
977 bug in Distutils 0.9.2 and earlier causes an uncaught exception in
978 this case. The workaround is: Don't Do That.}
980 Second, you might want to force the manifest to be regenerated---for
981 example, if you have added or removed files or directories that match an
982 existing pattern in the manifest template, you should regenerate the
983 manifest:
985 \begin{verbatim}
986 python setup.py sdist --force-manifest
987 \end{verbatim}
989 Or, you might just want to (re)generate the manifest, but not create a
990 source distribution:
992 \begin{verbatim}
993 python setup.py sdist --manifest-only
994 \end{verbatim}
996 \longprogramopt{manifest-only} implies \longprogramopt{force-manifest}.
997 \programopt{-o} is a shortcut for \longprogramopt{manifest-only}, and
998 \programopt{-f} for \longprogramopt{force-manifest}.
1001 \section{Creating Built Distributions}
1002 \label{built-dist}
1004 A ``built distribution'' is what you're probably used to thinking of
1005 either as a ``binary package'' or an ``installer'' (depending on your
1006 background). It's not necessarily binary, though, because it might
1007 contain only Python source code and/or byte-code; and we don't call it a
1008 package, because that word is already spoken for in Python. (And
1009 ``installer'' is a term specific to the Windows world. \XXX{do Mac
1010 people use it?})
1012 A built distribution is how you make life as easy as possible for
1013 installers of your module distribution: for users of RPM-based Linux
1014 systems, it's a binary RPM; for Windows users, it's an executable
1015 installer; for Debian-based Linux users, it's a Debian package; and so
1016 forth. Obviously, no one person will be able to create built
1017 distributions for every platform under the sun, so the Distutils are
1018 designed to enable module developers to concentrate on their
1019 specialty---writing code and creating source distributions---while an
1020 intermediary species of \emph{packager} springs up to turn source
1021 distributions into built distributions for as many platforms as there
1022 are packagers.
1024 Of course, the module developer could be his own packager; or the
1025 packager could be a volunteer ``out there'' somewhere who has access to
1026 a platform which the original developer does not; or it could be
1027 software periodically grabbing new source distributions and turning them
1028 into built distributions for as many platforms as the software has
1029 access to. Regardless of the nature of the beast, a packager uses the
1030 setup script and the \command{bdist} command family to generate built
1031 distributions.
1033 As a simple example, if I run the following command in the Distutils
1034 source tree:
1036 \begin{verbatim}
1037 python setup.py bdist
1038 \end{verbatim}
1040 then the Distutils builds my module distribution (the Distutils itself
1041 in this case), does a ``fake'' installation (also in the \file{build}
1042 directory), and creates the default type of built distribution for my
1043 platform. The default format for built distributions is a ``dumb'' tar
1044 file on \UNIX, and an simple executable installer on Windows. (That tar
1045 file is considered ``dumb'' because it has to be unpacked in a specific
1046 location to work.)
1048 Thus, the above command on a \UNIX{} system creates
1049 \file{Distutils-0.9.1.\filevar{plat}.tar.gz}; unpacking this tarball
1050 from the right place installs the Distutils just as though you had
1051 downloaded the source distribution and run \code{python setup.py
1052 install}. (The ``right place'' is either the root of the filesystem or
1053 Python's \filevar{prefix} directory, depending on the options given to
1054 the \command{bdist\_dumb} command; the default is to make dumb
1055 distributions relative to \filevar{prefix}.)
1057 Obviously, for pure Python distributions, this isn't a huge win---but
1058 for non-pure distributions, which include extensions that would need to
1059 be compiled, it can mean the difference between someone being able to
1060 use your extensions or not. And creating ``smart'' built distributions,
1061 such as an RPM package or an executable installer for Windows, is a big
1062 win for users even if your distribution doesn't include any extensions.
1064 The \command{bdist} command has a \longprogramopt{formats} option,
1065 similar to the \command{sdist} command, which you can use to select the
1066 types of built distribution to generate: for example,
1068 \begin{verbatim}
1069 python setup.py bdist --format=zip
1070 \end{verbatim}
1072 would, when run on a \UNIX{} system, create
1073 \file{Distutils-0.8.\filevar{plat}.zip}---again, this archive would be
1074 unpacked from the root directory to install the Distutils.
1076 The available formats for built distributions are:
1077 \begin{tableiii}{l|l|c}{code}%
1078 {Format}{Description}{Notes}
1079 \lineiii{gztar}{gzipped tar file (\file{.tar.gz})}{(1),(3)}
1080 \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{(3)}
1081 \lineiii{tar}{tar file (\file{.tar})}{(3)}
1082 \lineiii{zip}{zip file (\file{.zip})}{(4)}
1083 \lineiii{rpm}{RPM}{(5)}
1084 \lineiii{srpm}{source RPM}{(5) \XXX{to do!}}
1085 \lineiii{wininst}{self-extracting ZIP file for Windows}{(2),(4)}
1086 \end{tableiii}
1088 \noindent Notes:
1089 \begin{description}
1090 \item[(1)] default on \UNIX
1091 \item[(2)] default on Windows \XXX{to-do!}
1092 \item[(3)] requires external utilities: \program{tar} and possibly one
1093 of \program{gzip}, \program{bzip2}, or \program{compress}
1094 \item[(4)] requires either external \program{zip} utility or
1095 \module{zipfile} module (not part of the standard Python library)
1096 \item[(5)] requires external \program{rpm} utility, version 3.0.4 or
1097 better (use \code{rpm --version} to find out which version you have)
1098 \end{description}
1100 You don't have to use the \command{bdist} command with the
1101 \longprogramopt{formats} option; you can also use the command that
1102 directly implements the format you're interested in. Some of these
1103 \command{bdist} ``sub-commands'' actually generate several similar
1104 formats; for instance, the \command{bdist\_dumb} command generates all
1105 the ``dumb'' archive formats (\code{tar}, \code{ztar}, \code{gztar}, and
1106 \code{zip}), and \command{bdist\_rpm} generates both binary and source
1107 RPMs. The \command{bdist} sub-commands, and the formats generated by
1108 each, are:
1109 \begin{tableii}{l|l}{command}%
1110 {Command}{Formats}
1111 \lineii{bdist\_dumb}{tar, ztar, gztar, zip}
1112 \lineii{bdist\_rpm}{rpm, srpm}
1113 \lineii{bdist\_wininst}{wininst}
1114 \end{tableii}
1116 The following sections give details on the individual \command{bdist\_*}
1117 commands.
1120 \subsection{Creating dumb built distributions}
1121 \label{creating-dumb}
1123 \XXX{Need to document absolute vs. prefix-relative packages here, but
1124 first I have to implement it!}
1127 \subsection{Creating RPM packages}
1128 \label{creating-rpms}
1130 The RPM format is used by many of popular Linux distributions, including
1131 Red Hat, SuSE, and Mandrake. If one of these (or any of the other
1132 RPM-based Linux distributions) is your usual environment, creating RPM
1133 packages for other users of that same distribution is trivial.
1134 Depending on the complexity of your module distribution and differences
1135 between Linux distributions, you may also be able to create RPMs that
1136 work on different RPM-based distributions.
1138 The usual way to create an RPM of your module distribution is to run the
1139 \command{bdist\_rpm} command:
1141 \begin{verbatim}
1142 python setup.py bdist_rpm
1143 \end{verbatim}
1145 or the \command{bdist} command with the \longprogramopt{format} option:
1147 \begin{verbatim}
1148 python setup.py bdist --formats=rpm
1149 \end{verbatim}
1151 The former allows you to specify RPM-specific options; the latter allows
1152 you to easily specify multiple formats in one run. If you need to do
1153 both, you can explicitly specify multiple \command{bdist\_*} commands
1154 and their options:
1156 \begin{verbatim}
1157 python setup.py bdist_rpm --packager="John Doe <jdoe@python.net>" \
1158 bdist_wininst --target_version="2.0"
1159 \end{verbatim}
1161 Creating RPM packages is driven by a \file{.spec} file, much as using
1162 the Distutils is driven by the setup script. To make your life easier,
1163 the \command{bdist\_rpm} command normally creates a \file{.spec} file
1164 based on the information you supply in the setup script, on the command
1165 line, and in any Distutils configuration files. Various options and
1166 sections in the \file{.spec} file are derived from options in the setup
1167 script as follows:
1168 \begin{tableii}{l|l}{textrm}%
1169 {RPM \file{.spec} file option or section}{Distutils setup script option}
1170 \lineii{Name}{\option{name}}
1171 \lineii{Summary (in preamble)}{\option{description}}
1172 \lineii{Version}{\option{version}}
1173 \lineii{Vendor}{\option{author} and \option{author\_email}, or \\&
1174 \option{maintainer} and \option{maintainer\_email}}
1175 \lineii{Copyright}{\option{licence}}
1176 \lineii{Url}{\option{url}}
1177 \lineii{\%description (section)}{\option{long\_description}}
1178 \end{tableii}
1180 Additionally, there many options in \file{.spec} files that don't have
1181 corresponding options in the setup script. Most of these are handled
1182 through options to the \command{bdist\_rpm} command as follows:
1183 \begin{tableiii}{l|l|l}{textrm}%
1184 {RPM \file{.spec} file option or section}%
1185 {\command{bdist\_rpm} option}%
1186 {default value}
1187 \lineiii{Release}{\option{release}}{``1''}
1188 \lineiii{Group}{\option{group}}{``Development/Libraries''}
1189 \lineiii{Vendor}{\option{vendor}}{(see above)}
1190 \lineiii{Packager}{\option{packager}}{(none)}
1191 \lineiii{Provides}{\option{provides}}{(none)}
1192 \lineiii{Requires}{\option{requires}}{(none)}
1193 \lineiii{Conflicts}{\option{conflicts}}{(none)}
1194 \lineiii{Obsoletes}{\option{obsoletes}}{(none)}
1195 \lineiii{Distribution}{\option{distribution\_name}}{(none)}
1196 \lineiii{BuildRequires}{\option{build\_requires}}{(none)}
1197 \lineiii{Icon}{\option{icon}}{(none)}
1198 \end{tableiii}
1199 Obviously, supplying even a few of these options on the command-line
1200 would be tedious and error-prone, so it's usually best to put them in
1201 the setup configuration file, \file{setup.cfg}---see
1202 section~\ref{setup-config}. If you distribute or package many Python
1203 module distributions, you might want to put options that apply to all of
1204 them in your personal Distutils configuration file
1205 (\file{\textasciitilde/.pydistutils.cfg}).
1207 There are three steps to building a binary RPM package, all of which are
1208 handled automatically by the Distutils:
1209 \begin{enumerate}
1210 \item create a \file{.spec} file, which describes the package (analogous
1211 to the Distutils setup script; in fact, much of the information in the
1212 setup script winds up in the \file{.spec} file)
1213 \item create the source RPM
1214 \item create the ``binary'' RPM (which may or may not contain binary
1215 code, depending on whether your module distribution contains Python
1216 extensions)
1217 \end{enumerate}
1218 Normally, RPM bundles the last two steps together; when you use the
1219 Distutils, all three steps are typically bundled together.
1221 If you wish, you can separate these three steps. You can use the
1222 \longprogramopt{spec-only} option to make \command{bdist\_rpm} just
1223 create the \file{.spec} file and exit; in this case, the \file{.spec}
1224 file will be written to the ``distribution directory''---normally
1225 \file{dist/}, but customizable with the \longprogramopt{dist-dir}
1226 option. (Normally, the \file{.spec} file winds up deep in the ``build
1227 tree,'' in a temporary directory created by \command{bdist\_rpm}.)
1229 \XXX{this isn't implemented yet---is it needed?!}
1230 You can also specify a custom \file{.spec} file with the
1231 \longprogramopt{spec-file} option; used in conjunction with
1232 \longprogramopt{spec-only}, this gives you an opportunity to customize
1233 the \file{.spec} file manually:
1235 \begin{verbatim}
1236 > python setup.py bdist_rpm --spec-only
1237 # ...edit dist/FooBar-1.0.spec
1238 > python setup.py bdist_rpm --spec-file=dist/FooBar-1.0.spec
1239 \end{verbatim}
1241 (Although a better way to do this is probably to override the standard
1242 \command{bdist\_rpm} command with one that writes whatever else you want
1243 to the \file{.spec} file; see section~\ref{extending} for information on
1244 extending the Distutils.)
1247 \subsection{Creating Windows installers}
1248 \label{creating-wininst}
1250 Executable Windows installers are the natural format for binary
1251 distributions on Windows. They display a nice graphical user interface,
1252 display some information of the module distribution to be installed, taken
1253 from the meta-data in the setup script, let the user select a few
1254 (currently maybe too few) options, and start or cancel the installation.
1256 Since the meta-data is taken from the setup script, creating
1257 Windows installers is usually as easy as running:
1259 \begin{verbatim}
1260 python setup.py bdist_wininst
1261 \end{verbatim}
1263 or the \command{bdist} command with the \longprogramopt{format} option:
1265 \begin{verbatim}
1266 python setup.py bdist --formats=wininst
1267 \end{verbatim}
1269 If you have a pure module distribution (only containing pure
1270 Python modules and packages), the resulting installer will be
1271 version independent and have a name like \file{Foo-1.0.win32.exe}.
1272 These installers can even be created on \UNIX{} or MacOS platforms.
1274 If you have a non-pure distribution, the extensions can only be
1275 created on a Windows platform, and will be Python version dependend.
1276 The installer filename will reflect this and now has the form
1277 \file{Foo-1.0.win32-py2.0.exe}. You have to create a separate installer
1278 for every Python version you want to support.
1280 The installer will try to compile pure modules into bytecode after
1281 installation on the target system in normal and optimizing mode.
1282 If you don't want this to happen for some reason, you can run
1283 the bdist_wininst command with the \longprogramopt{no-target-compile} and/or
1284 the \longprogramopt{no-target-optimize} option.
1286 %\section{Examples}
1287 %\label{examples}
1290 %\subsection{Pure Python distribution (by module)}
1291 %\label{pure-mod}
1294 %\subsection{Pure Python distribution (by package)}
1295 %\label{pure-pkg}
1298 %\subsection{Single extension module}
1299 %\label{single-ext}
1302 %\subsection{Multiple extension modules}
1303 %\label{multiple-ext}
1306 %\subsection{Putting it all together}
1310 %\section{Extending the Distutils}
1311 %\label{extending}
1314 %\subsection{Extending existing commands}
1315 %\label{extend-existing}
1318 %\subsection{Writing new commands}
1319 %\label{new-commands}
1321 %\XXX{Would an uninstall command be a good example here?}
1325 \section{Reference}
1326 \label{reference}
1329 %\subsection{Building modules: the \protect\command{build} command family}
1330 %\label{build-cmds}
1332 %\subsubsection{\protect\command{build}}
1333 %\label{build-cmd}
1335 %\subsubsection{\protect\command{build\_py}}
1336 %\label{build-py-cmd}
1338 %\subsubsection{\protect\command{build\_ext}}
1339 %\label{build-ext-cmd}
1341 %\subsubsection{\protect\command{build\_clib}}
1342 %\label{build-clib-cmd}
1345 \subsection{Installing modules: the \protect\command{install} command family}
1346 \label{install-cmd}
1348 The install command ensures that the build commands have been run and then
1349 runs the subcommands \command{install\_lib},
1350 \command{install\_data} and
1351 \command{install\_scripts}.
1353 %\subsubsection{\protect\command{install\_lib}}
1354 %\label{install-lib-cmd}
1356 \subsubsection{\protect\command{install\_data}}
1357 \label{install-data-cmd}
1358 This command installs all data files provided with the distribution.
1360 \subsubsection{\protect\command{install\_scripts}}
1361 \label{install-scripts-cmd}
1362 This command installs all (Python) scripts in the distribution.
1365 %\subsection{Cleaning up: the \protect\command{clean} command}
1366 %\label{clean-cmd}
1369 \subsection{Creating a source distribution: the
1370 \protect\command{sdist} command}
1371 \label{sdist-cmd}
1374 \XXX{fragment moved down from above: needs context!}
1376 The manifest template commands are:
1377 \begin{tableii}{ll}{command}{Command}{Description}
1378 \lineii{include \var{pat1} \var{pat2} ... }
1379 {include all files matching any of the listed patterns}
1380 \lineii{exclude \var{pat1} \var{pat2} ... }
1381 {exclude all files matching any of the listed patterns}
1382 \lineii{recursive-include \var{dir} \var{pat1} \var{pat2} ... }
1383 {include all files under \var{dir} matching any of the listed patterns}
1384 \lineii{recursive-exclude \var{dir} \var{pat1} \var{pat2} ...}
1385 {exclude all files under \var{dir} matching any of the listed patterns}
1386 \lineii{global-include \var{pat1} \var{pat2} ...}
1387 {include all files anywhere in the source tree matching\\&
1388 any of the listed patterns}
1389 \lineii{global-exclude \var{pat1} \var{pat2} ...}
1390 {exclude all files anywhere in the source tree matching\\&
1391 any of the listed patterns}
1392 \lineii{prune \var{dir}}{exclude all files under \var{dir}}
1393 \lineii{graft \var{dir}}{include all files under \var{dir}}
1394 \end{tableii}
1395 The patterns here are \UNIX-style ``glob'' patterns: \code{*} matches any
1396 sequence of regular filename characters, \code{?} matches any single
1397 regular filename character, and \code{[\var{range}]} matches any of the
1398 characters in \var{range} (e.g., \code{a-z}, \code{a-zA-Z},
1399 \code{a-f0-9\_.}). The definition of ``regular filename character'' is
1400 platform-specific: on \UNIX{} it is anything except slash; on Windows
1401 anything except backslash or colon; on MacOS anything except colon.
1403 \XXX{Windows and MacOS support not there yet}
1406 %\subsection{Creating a built distribution: the
1407 % \protect\command{bdist} command family}
1408 %\label{bdist-cmds}
1411 %\subsubsection{\protect\command{bdist}}
1413 %\subsubsection{\protect\command{bdist\_dumb}}
1415 %\subsubsection{\protect\command{bdist\_rpm}}
1417 %\subsubsection{\protect\command{bdist\_wininst}}
1420 \input{sysconfig}
1423 \end{document}