1 | \documentclass{manual}
|
---|
2 | \usepackage{distutils}
|
---|
3 |
|
---|
4 | % $Id: dist.tex 51240 2006-08-13 00:20:49Z neal.norwitz $
|
---|
5 |
|
---|
6 | % TODO
|
---|
7 | % Document extension.read_setup_file
|
---|
8 | % Document build_clib command
|
---|
9 | %
|
---|
10 |
|
---|
11 | \title{Distributing Python Modules}
|
---|
12 |
|
---|
13 | \input{boilerplate}
|
---|
14 |
|
---|
15 | \author{Greg Ward\\
|
---|
16 | Anthony Baxter}
|
---|
17 | \authoraddress{
|
---|
18 | \strong{Python Software Foundation}\\
|
---|
19 | Email: \email{distutils-sig@python.org}
|
---|
20 | }
|
---|
21 |
|
---|
22 | \makeindex
|
---|
23 | \makemodindex
|
---|
24 |
|
---|
25 | \begin{document}
|
---|
26 |
|
---|
27 | \maketitle
|
---|
28 |
|
---|
29 | \input{copyright}
|
---|
30 |
|
---|
31 | \begin{abstract}
|
---|
32 | \noindent
|
---|
33 | This document describes the Python Distribution Utilities
|
---|
34 | (``Distutils'') from the module developer's point of view, describing
|
---|
35 | how to use the Distutils to make Python modules and extensions easily
|
---|
36 | available to a wider audience with very little overhead for
|
---|
37 | build/release/install mechanics.
|
---|
38 | \end{abstract}
|
---|
39 |
|
---|
40 | % The ugly "%begin{latexonly}" pseudo-environment suppresses the table
|
---|
41 | % of contents for HTML generation.
|
---|
42 | %
|
---|
43 | %begin{latexonly}
|
---|
44 | \tableofcontents
|
---|
45 | %end{latexonly}
|
---|
46 |
|
---|
47 |
|
---|
48 | \chapter{An Introduction to Distutils}
|
---|
49 | \label{intro}
|
---|
50 |
|
---|
51 | This document covers using the Distutils to distribute your Python
|
---|
52 | modules, concentrating on the role of developer/distributor: if
|
---|
53 | you're looking for information on installing Python modules, you
|
---|
54 | should refer to the \citetitle[../inst/inst.html]{Installing Python
|
---|
55 | Modules} manual.
|
---|
56 |
|
---|
57 |
|
---|
58 | \section{Concepts \& Terminology}
|
---|
59 | \label{concepts}
|
---|
60 |
|
---|
61 | Using the Distutils is quite simple, both for module developers and for
|
---|
62 | users/administrators installing third-party modules. As a developer,
|
---|
63 | your responsibilities (apart from writing solid, well-documented and
|
---|
64 | well-tested code, of course!) are:
|
---|
65 | \begin{itemize}
|
---|
66 | \item write a setup script (\file{setup.py} by convention)
|
---|
67 | \item (optional) write a setup configuration file
|
---|
68 | \item create a source distribution
|
---|
69 | \item (optional) create one or more built (binary) distributions
|
---|
70 | \end{itemize}
|
---|
71 | Each of these tasks is covered in this document.
|
---|
72 |
|
---|
73 | Not all module developers have access to a multitude of platforms, so
|
---|
74 | it's not always feasible to expect them to create a multitude of built
|
---|
75 | distributions. It is hoped that a class of intermediaries, called
|
---|
76 | \emph{packagers}, will arise to address this need. Packagers will take
|
---|
77 | source distributions released by module developers, build them on one or
|
---|
78 | more platforms, and release the resulting built distributions. Thus,
|
---|
79 | users on the most popular platforms will be able to install most popular
|
---|
80 | Python module distributions in the most natural way for their platform,
|
---|
81 | without having to run a single setup script or compile a line of code.
|
---|
82 |
|
---|
83 |
|
---|
84 | \section{A Simple Example}
|
---|
85 | \label{simple-example}
|
---|
86 |
|
---|
87 | The setup script is usually quite simple, although since it's written
|
---|
88 | in Python, there are no arbitrary limits to what you can do with it,
|
---|
89 | though you should be careful about putting arbitrarily expensive
|
---|
90 | operations in your setup script. Unlike, say, Autoconf-style configure
|
---|
91 | scripts, the setup script may be run multiple times in the course of
|
---|
92 | building and installing your module distribution.
|
---|
93 |
|
---|
94 | If all you want to do is distribute a module called \module{foo},
|
---|
95 | contained in a file \file{foo.py}, then your setup script can be as
|
---|
96 | simple as this:
|
---|
97 |
|
---|
98 | \begin{verbatim}
|
---|
99 | from distutils.core import setup
|
---|
100 | setup(name='foo',
|
---|
101 | version='1.0',
|
---|
102 | py_modules=['foo'],
|
---|
103 | )
|
---|
104 | \end{verbatim}
|
---|
105 |
|
---|
106 | Some observations:
|
---|
107 | \begin{itemize}
|
---|
108 | \item most information that you supply to the Distutils is supplied as
|
---|
109 | keyword arguments to the \function{setup()} function
|
---|
110 | \item those keyword arguments fall into two categories: package
|
---|
111 | metadata (name, version number) and information about what's in the
|
---|
112 | package (a list of pure Python modules, in this case)
|
---|
113 | \item modules are specified by module name, not filename (the same will
|
---|
114 | hold true for packages and extensions)
|
---|
115 | \item it's recommended that you supply a little more metadata, in
|
---|
116 | particular your name, email address and a URL for the project
|
---|
117 | (see section~\ref{setup-script} for an example)
|
---|
118 | \end{itemize}
|
---|
119 |
|
---|
120 | To create a source distribution for this module, you would create a
|
---|
121 | setup script, \file{setup.py}, containing the above code, and run:
|
---|
122 |
|
---|
123 | \begin{verbatim}
|
---|
124 | python setup.py sdist
|
---|
125 | \end{verbatim}
|
---|
126 |
|
---|
127 | which will create an archive file (e.g., tarball on \UNIX, ZIP file on
|
---|
128 | Windows) containing your setup script \file{setup.py}, and your module
|
---|
129 | \file{foo.py}. The archive file will be named \file{foo-1.0.tar.gz} (or
|
---|
130 | \file{.zip}), and will unpack into a directory \file{foo-1.0}.
|
---|
131 |
|
---|
132 | If an end-user wishes to install your \module{foo} module, all she has
|
---|
133 | to do is download \file{foo-1.0.tar.gz} (or \file{.zip}), unpack it,
|
---|
134 | and---from the \file{foo-1.0} directory---run
|
---|
135 |
|
---|
136 | \begin{verbatim}
|
---|
137 | python setup.py install
|
---|
138 | \end{verbatim}
|
---|
139 |
|
---|
140 | which will ultimately copy \file{foo.py} to the appropriate directory
|
---|
141 | for third-party modules in their Python installation.
|
---|
142 |
|
---|
143 | This simple example demonstrates some fundamental concepts of the
|
---|
144 | Distutils. First, both developers and installers have the same basic
|
---|
145 | user interface, i.e. the setup script. The difference is which
|
---|
146 | Distutils \emph{commands} they use: the \command{sdist} command is
|
---|
147 | almost exclusively for module developers, while \command{install} is
|
---|
148 | more often for installers (although most developers will want to install
|
---|
149 | their own code occasionally).
|
---|
150 |
|
---|
151 | If you want to make things really easy for your users, you can create
|
---|
152 | one or more built distributions for them. For instance, if you are
|
---|
153 | running on a Windows machine, and want to make things easy for other
|
---|
154 | Windows users, you can create an executable installer (the most
|
---|
155 | appropriate type of built distribution for this platform) with the
|
---|
156 | \command{bdist\_wininst} command. For example:
|
---|
157 |
|
---|
158 | \begin{verbatim}
|
---|
159 | python setup.py bdist_wininst
|
---|
160 | \end{verbatim}
|
---|
161 |
|
---|
162 | will create an executable installer, \file{foo-1.0.win32.exe}, in the
|
---|
163 | current directory.
|
---|
164 |
|
---|
165 | Other useful built distribution formats are RPM, implemented by the
|
---|
166 | \command{bdist\_rpm} command, Solaris \program{pkgtool}
|
---|
167 | (\command{bdist\_pkgtool}), and HP-UX \program{swinstall}
|
---|
168 | (\command{bdist_sdux}). For example, the following command will
|
---|
169 | create an RPM file called \file{foo-1.0.noarch.rpm}:
|
---|
170 |
|
---|
171 | \begin{verbatim}
|
---|
172 | python setup.py bdist_rpm
|
---|
173 | \end{verbatim}
|
---|
174 |
|
---|
175 | (The \command{bdist\_rpm} command uses the \command{rpm} executable,
|
---|
176 | therefore this has to be run on an RPM-based system such as Red Hat
|
---|
177 | Linux, SuSE Linux, or Mandrake Linux.)
|
---|
178 |
|
---|
179 | You can find out what distribution formats are available at any time by
|
---|
180 | running
|
---|
181 |
|
---|
182 | \begin{verbatim}
|
---|
183 | python setup.py bdist --help-formats
|
---|
184 | \end{verbatim}
|
---|
185 |
|
---|
186 |
|
---|
187 | \section{General Python terminology}
|
---|
188 | \label{python-terms}
|
---|
189 |
|
---|
190 | If you're reading this document, you probably have a good idea of what
|
---|
191 | modules, extensions, and so forth are. Nevertheless, just to be sure
|
---|
192 | that everyone is operating from a common starting point, we offer the
|
---|
193 | following glossary of common Python terms:
|
---|
194 | \begin{description}
|
---|
195 | \item[module] the basic unit of code reusability in Python: a block of
|
---|
196 | code imported by some other code. Three types of modules concern us
|
---|
197 | here: pure Python modules, extension modules, and packages.
|
---|
198 |
|
---|
199 | \item[pure Python module] a module written in Python and contained in a
|
---|
200 | single \file{.py} file (and possibly associated \file{.pyc} and/or
|
---|
201 | \file{.pyo} files). Sometimes referred to as a ``pure module.''
|
---|
202 |
|
---|
203 | \item[extension module] a module written in the low-level language of
|
---|
204 | the Python implementation: C/\Cpp{} for Python, Java for Jython.
|
---|
205 | Typically contained in a single dynamically loadable pre-compiled
|
---|
206 | file, e.g. a shared object (\file{.so}) file for Python extensions on
|
---|
207 | \UNIX, a DLL (given the \file{.pyd} extension) for Python extensions
|
---|
208 | on Windows, or a Java class file for Jython extensions. (Note that
|
---|
209 | currently, the Distutils only handles C/\Cpp{} extensions for Python.)
|
---|
210 |
|
---|
211 | \item[package] a module that contains other modules; typically contained
|
---|
212 | in a directory in the filesystem and distinguished from other
|
---|
213 | directories by the presence of a file \file{\_\_init\_\_.py}.
|
---|
214 |
|
---|
215 | \item[root package] the root of the hierarchy of packages. (This isn't
|
---|
216 | really a package, since it doesn't have an \file{\_\_init\_\_.py}
|
---|
217 | file. But we have to call it something.) The vast majority of the
|
---|
218 | standard library is in the root package, as are many small, standalone
|
---|
219 | third-party modules that don't belong to a larger module collection.
|
---|
220 | Unlike regular packages, modules in the root package can be found in
|
---|
221 | many directories: in fact, every directory listed in \code{sys.path}
|
---|
222 | contributes modules to the root package.
|
---|
223 | \end{description}
|
---|
224 |
|
---|
225 |
|
---|
226 | \section{Distutils-specific terminology}
|
---|
227 | \label{distutils-term}
|
---|
228 |
|
---|
229 | The following terms apply more specifically to the domain of
|
---|
230 | distributing Python modules using the Distutils:
|
---|
231 | \begin{description}
|
---|
232 | \item[module distribution] a collection of Python modules distributed
|
---|
233 | together as a single downloadable resource and meant to be installed
|
---|
234 | \emph{en masse}. Examples of some well-known module distributions are
|
---|
235 | Numeric Python, PyXML, PIL (the Python Imaging Library), or
|
---|
236 | mxBase. (This would be called a \emph{package}, except that term
|
---|
237 | is already taken in the Python context: a single module distribution
|
---|
238 | may contain zero, one, or many Python packages.)
|
---|
239 |
|
---|
240 | \item[pure module distribution] a module distribution that contains only
|
---|
241 | pure Python modules and packages. Sometimes referred to as a ``pure
|
---|
242 | distribution.''
|
---|
243 |
|
---|
244 | \item[non-pure module distribution] a module distribution that contains
|
---|
245 | at least one extension module. Sometimes referred to as a ``non-pure
|
---|
246 | distribution.''
|
---|
247 |
|
---|
248 | \item[distribution root] the top-level directory of your source tree (or
|
---|
249 | source distribution); the directory where \file{setup.py} exists. Generally
|
---|
250 | \file{setup.py} will be run from this directory.
|
---|
251 | \end{description}
|
---|
252 |
|
---|
253 |
|
---|
254 | \chapter{Writing the Setup Script}
|
---|
255 | \label{setup-script}
|
---|
256 |
|
---|
257 | The setup script is the centre of all activity in building,
|
---|
258 | distributing, and installing modules using the Distutils. The main
|
---|
259 | purpose of the setup script is to describe your module distribution to
|
---|
260 | the Distutils, so that the various commands that operate on your modules
|
---|
261 | do the right thing. As we saw in section~\ref{simple-example} above,
|
---|
262 | the setup script consists mainly of a call to \function{setup()}, and
|
---|
263 | most information supplied to the Distutils by the module developer is
|
---|
264 | supplied as keyword arguments to \function{setup()}.
|
---|
265 |
|
---|
266 | Here's a slightly more involved example, which we'll follow for the next
|
---|
267 | couple of sections: the Distutils' own setup script. (Keep in mind that
|
---|
268 | although the Distutils are included with Python 1.6 and later, they also
|
---|
269 | have an independent existence so that Python 1.5.2 users can use them to
|
---|
270 | install other module distributions. The Distutils' own setup script,
|
---|
271 | shown here, is used to install the package into Python 1.5.2.)
|
---|
272 |
|
---|
273 | \begin{verbatim}
|
---|
274 | #!/usr/bin/env python
|
---|
275 |
|
---|
276 | from distutils.core import setup
|
---|
277 |
|
---|
278 | setup(name='Distutils',
|
---|
279 | version='1.0',
|
---|
280 | description='Python Distribution Utilities',
|
---|
281 | author='Greg Ward',
|
---|
282 | author_email='gward@python.net',
|
---|
283 | url='http://www.python.org/sigs/distutils-sig/',
|
---|
284 | packages=['distutils', 'distutils.command'],
|
---|
285 | )
|
---|
286 | \end{verbatim}
|
---|
287 |
|
---|
288 | There are only two differences between this and the trivial one-file
|
---|
289 | distribution presented in section~\ref{simple-example}: more
|
---|
290 | metadata, and the specification of pure Python modules by package,
|
---|
291 | rather than by module. This is important since the Distutils consist of
|
---|
292 | a couple of dozen modules split into (so far) two packages; an explicit
|
---|
293 | list of every module would be tedious to generate and difficult to
|
---|
294 | maintain. For more information on the additional meta-data, see
|
---|
295 | section~\ref{meta-data}.
|
---|
296 |
|
---|
297 | Note that any pathnames (files or directories) supplied in the setup
|
---|
298 | script should be written using the \UNIX{} convention, i.e.
|
---|
299 | slash-separated. The Distutils will take care of converting this
|
---|
300 | platform-neutral representation into whatever is appropriate on your
|
---|
301 | current platform before actually using the pathname. This makes your
|
---|
302 | setup script portable across operating systems, which of course is one
|
---|
303 | of the major goals of the Distutils. In this spirit, all pathnames in
|
---|
304 | this document are slash-separated. (Mac OS 9 programmers should keep in
|
---|
305 | mind that the \emph{absence} of a leading slash indicates a relative
|
---|
306 | path, the opposite of the Mac OS convention with colons.)
|
---|
307 |
|
---|
308 | This, of course, only applies to pathnames given to Distutils
|
---|
309 | functions. If you, for example, use standard Python functions such as
|
---|
310 | \function{glob.glob()} or \function{os.listdir()} to specify files, you
|
---|
311 | should be careful to write portable code instead of hardcoding path
|
---|
312 | separators:
|
---|
313 |
|
---|
314 | \begin{verbatim}
|
---|
315 | glob.glob(os.path.join('mydir', 'subdir', '*.html'))
|
---|
316 | os.listdir(os.path.join('mydir', 'subdir'))
|
---|
317 | \end{verbatim}
|
---|
318 |
|
---|
319 |
|
---|
320 | \section{Listing whole packages}
|
---|
321 | \label{listing-packages}
|
---|
322 |
|
---|
323 | The \option{packages} option tells the Distutils to process (build,
|
---|
324 | distribute, install, etc.) all pure Python modules found in each package
|
---|
325 | mentioned in the \option{packages} list. In order to do this, of
|
---|
326 | course, there has to be a correspondence between package names and
|
---|
327 | directories in the filesystem. The default correspondence is the most
|
---|
328 | obvious one, i.e. package \module{distutils} is found in the directory
|
---|
329 | \file{distutils} relative to the distribution root. Thus, when you say
|
---|
330 | \code{packages = ['foo']} in your setup script, you are promising that
|
---|
331 | the Distutils will find a file \file{foo/\_\_init\_\_.py} (which might
|
---|
332 | be spelled differently on your system, but you get the idea) relative to
|
---|
333 | the directory where your setup script lives. If you break this
|
---|
334 | promise, the Distutils will issue a warning but still process the broken
|
---|
335 | package anyways.
|
---|
336 |
|
---|
337 | If you use a different convention to lay out your source directory,
|
---|
338 | that's no problem: you just have to supply the \option{package\_dir}
|
---|
339 | option to tell the Distutils about your convention. For example, say
|
---|
340 | you keep all Python source under \file{lib}, so that modules in the
|
---|
341 | ``root package'' (i.e., not in any package at all) are in
|
---|
342 | \file{lib}, modules in the \module{foo} package are in \file{lib/foo},
|
---|
343 | and so forth. Then you would put
|
---|
344 |
|
---|
345 | \begin{verbatim}
|
---|
346 | package_dir = {'': 'lib'}
|
---|
347 | \end{verbatim}
|
---|
348 |
|
---|
349 | in your setup script. The keys to this dictionary are package names,
|
---|
350 | and an empty package name stands for the root package. The values are
|
---|
351 | directory names relative to your distribution root. In this case, when
|
---|
352 | you say \code{packages = ['foo']}, you are promising that the file
|
---|
353 | \file{lib/foo/\_\_init\_\_.py} exists.
|
---|
354 |
|
---|
355 | Another possible convention is to put the \module{foo} package right in
|
---|
356 | \file{lib}, the \module{foo.bar} package in \file{lib/bar}, etc. This
|
---|
357 | would be written in the setup script as
|
---|
358 |
|
---|
359 | \begin{verbatim}
|
---|
360 | package_dir = {'foo': 'lib'}
|
---|
361 | \end{verbatim}
|
---|
362 |
|
---|
363 | A \code{\var{package}: \var{dir}} entry in the \option{package\_dir}
|
---|
364 | dictionary implicitly applies to all packages below \var{package}, so
|
---|
365 | the \module{foo.bar} case is automatically handled here. In this
|
---|
366 | example, having \code{packages = ['foo', 'foo.bar']} tells the Distutils
|
---|
367 | to look for \file{lib/\_\_init\_\_.py} and
|
---|
368 | \file{lib/bar/\_\_init\_\_.py}. (Keep in mind that although
|
---|
369 | \option{package\_dir} applies recursively, you must explicitly list all
|
---|
370 | packages in \option{packages}: the Distutils will \emph{not} recursively
|
---|
371 | scan your source tree looking for any directory with an
|
---|
372 | \file{\_\_init\_\_.py} file.)
|
---|
373 |
|
---|
374 |
|
---|
375 | \section{Listing individual modules}
|
---|
376 | \label{listing-modules}
|
---|
377 |
|
---|
378 | For a small module distribution, you might prefer to list all modules
|
---|
379 | rather than listing packages---especially the case of a single module
|
---|
380 | that goes in the ``root package'' (i.e., no package at all). This
|
---|
381 | simplest case was shown in section~\ref{simple-example}; here is a
|
---|
382 | slightly more involved example:
|
---|
383 |
|
---|
384 | \begin{verbatim}
|
---|
385 | py_modules = ['mod1', 'pkg.mod2']
|
---|
386 | \end{verbatim}
|
---|
387 |
|
---|
388 | This describes two modules, one of them in the ``root'' package, the
|
---|
389 | other in the \module{pkg} package. Again, the default package/directory
|
---|
390 | layout implies that these two modules can be found in \file{mod1.py} and
|
---|
391 | \file{pkg/mod2.py}, and that \file{pkg/\_\_init\_\_.py} exists as well.
|
---|
392 | And again, you can override the package/directory correspondence using
|
---|
393 | the \option{package\_dir} option.
|
---|
394 |
|
---|
395 |
|
---|
396 | \section{Describing extension modules}
|
---|
397 | \label{describing-extensions}
|
---|
398 |
|
---|
399 | % XXX read over this section
|
---|
400 | Just as writing Python extension modules is a bit more complicated than
|
---|
401 | writing pure Python modules, describing them to the Distutils is a bit
|
---|
402 | more complicated. Unlike pure modules, it's not enough just to list
|
---|
403 | modules or packages and expect the Distutils to go out and find the
|
---|
404 | right files; you have to specify the extension name, source file(s), and
|
---|
405 | any compile/link requirements (include directories, libraries to link
|
---|
406 | with, etc.).
|
---|
407 |
|
---|
408 | All of this is done through another keyword argument to
|
---|
409 | \function{setup()}, the \option{ext_modules} option. \option{ext_modules}
|
---|
410 | is just a list of \class{Extension} instances, each of which describes a
|
---|
411 | single extension module. Suppose your distribution includes a single
|
---|
412 | extension, called \module{foo} and implemented by \file{foo.c}. If no
|
---|
413 | additional instructions to the compiler/linker are needed, describing
|
---|
414 | this extension is quite simple:
|
---|
415 |
|
---|
416 | \begin{verbatim}
|
---|
417 | Extension('foo', ['foo.c'])
|
---|
418 | \end{verbatim}
|
---|
419 |
|
---|
420 | The \class{Extension} class can be imported from
|
---|
421 | \module{distutils.core} along with \function{setup()}. Thus, the setup
|
---|
422 | script for a module distribution that contains only this one extension
|
---|
423 | and nothing else might be:
|
---|
424 |
|
---|
425 | \begin{verbatim}
|
---|
426 | from distutils.core import setup, Extension
|
---|
427 | setup(name='foo',
|
---|
428 | version='1.0',
|
---|
429 | ext_modules=[Extension('foo', ['foo.c'])],
|
---|
430 | )
|
---|
431 | \end{verbatim}
|
---|
432 |
|
---|
433 | The \class{Extension} class (actually, the underlying extension-building
|
---|
434 | machinery implemented by the \command{build\_ext} command) supports a
|
---|
435 | great deal of flexibility in describing Python extensions, which is
|
---|
436 | explained in the following sections.
|
---|
437 |
|
---|
438 |
|
---|
439 | \subsection{Extension names and packages}
|
---|
440 |
|
---|
441 | The first argument to the \class{Extension} constructor is always the
|
---|
442 | name of the extension, including any package names. For example,
|
---|
443 |
|
---|
444 | \begin{verbatim}
|
---|
445 | Extension('foo', ['src/foo1.c', 'src/foo2.c'])
|
---|
446 | \end{verbatim}
|
---|
447 |
|
---|
448 | describes an extension that lives in the root package, while
|
---|
449 |
|
---|
450 | \begin{verbatim}
|
---|
451 | Extension('pkg.foo', ['src/foo1.c', 'src/foo2.c'])
|
---|
452 | \end{verbatim}
|
---|
453 |
|
---|
454 | describes the same extension in the \module{pkg} package. The source
|
---|
455 | files and resulting object code are identical in both cases; the only
|
---|
456 | difference is where in the filesystem (and therefore where in Python's
|
---|
457 | namespace hierarchy) the resulting extension lives.
|
---|
458 |
|
---|
459 | If you have a number of extensions all in the same package (or all under
|
---|
460 | the same base package), use the \option{ext\_package} keyword argument
|
---|
461 | to \function{setup()}. For example,
|
---|
462 |
|
---|
463 | \begin{verbatim}
|
---|
464 | setup(...
|
---|
465 | ext_package='pkg',
|
---|
466 | ext_modules=[Extension('foo', ['foo.c']),
|
---|
467 | Extension('subpkg.bar', ['bar.c'])],
|
---|
468 | )
|
---|
469 | \end{verbatim}
|
---|
470 |
|
---|
471 | will compile \file{foo.c} to the extension \module{pkg.foo}, and
|
---|
472 | \file{bar.c} to \module{pkg.subpkg.bar}.
|
---|
473 |
|
---|
474 |
|
---|
475 | \subsection{Extension source files}
|
---|
476 |
|
---|
477 | The second argument to the \class{Extension} constructor is a list of
|
---|
478 | source files. Since the Distutils currently only support C, \Cpp, and
|
---|
479 | Objective-C extensions, these are normally C/\Cpp/Objective-C source
|
---|
480 | files. (Be sure to use appropriate extensions to distinguish \Cpp\
|
---|
481 | source files: \file{.cc} and \file{.cpp} seem to be recognized by both
|
---|
482 | \UNIX{} and Windows compilers.)
|
---|
483 |
|
---|
484 | However, you can also include SWIG interface (\file{.i}) files in the
|
---|
485 | list; the \command{build\_ext} command knows how to deal with SWIG
|
---|
486 | extensions: it will run SWIG on the interface file and compile the
|
---|
487 | resulting C/\Cpp{} file into your extension.
|
---|
488 |
|
---|
489 | \XXX{SWIG support is rough around the edges and largely untested;
|
---|
490 | especially SWIG support for \Cpp{} extensions! Explain in more detail
|
---|
491 | here when the interface firms up.}
|
---|
492 |
|
---|
493 | On some platforms, you can include non-source files that are processed
|
---|
494 | by the compiler and included in your extension. Currently, this just
|
---|
495 | means Windows message text (\file{.mc}) files and resource definition
|
---|
496 | (\file{.rc}) files for Visual \Cpp. These will be compiled to binary resource
|
---|
497 | (\file{.res}) files and linked into the executable.
|
---|
498 |
|
---|
499 |
|
---|
500 | \subsection{Preprocessor options}
|
---|
501 |
|
---|
502 | Three optional arguments to \class{Extension} will help if you need to
|
---|
503 | specify include directories to search or preprocessor macros to
|
---|
504 | define/undefine: \code{include\_dirs}, \code{define\_macros}, and
|
---|
505 | \code{undef\_macros}.
|
---|
506 |
|
---|
507 | For example, if your extension requires header files in the
|
---|
508 | \file{include} directory under your distribution root, use the
|
---|
509 | \code{include\_dirs} option:
|
---|
510 |
|
---|
511 | \begin{verbatim}
|
---|
512 | Extension('foo', ['foo.c'], include_dirs=['include'])
|
---|
513 | \end{verbatim}
|
---|
514 |
|
---|
515 | You can specify absolute directories there; if you know that your
|
---|
516 | extension will only be built on \UNIX{} systems with X11R6 installed to
|
---|
517 | \file{/usr}, you can get away with
|
---|
518 |
|
---|
519 | \begin{verbatim}
|
---|
520 | Extension('foo', ['foo.c'], include_dirs=['/usr/include/X11'])
|
---|
521 | \end{verbatim}
|
---|
522 |
|
---|
523 | You should avoid this sort of non-portable usage if you plan to
|
---|
524 | distribute your code: it's probably better to write C code like
|
---|
525 | \begin{verbatim}
|
---|
526 | #include <X11/Xlib.h>
|
---|
527 | \end{verbatim}
|
---|
528 |
|
---|
529 | If you need to include header files from some other Python extension,
|
---|
530 | you can take advantage of the fact that header files are installed in a
|
---|
531 | consistent way by the Distutils \command{install\_header} command. For
|
---|
532 | example, the Numerical Python header files are installed (on a standard
|
---|
533 | \UNIX{} installation) to \file{/usr/local/include/python1.5/Numerical}.
|
---|
534 | (The exact location will differ according to your platform and Python
|
---|
535 | installation.) Since the Python include
|
---|
536 | directory---\file{/usr/local/include/python1.5} in this case---is always
|
---|
537 | included in the search path when building Python extensions, the best
|
---|
538 | approach is to write C code like
|
---|
539 | \begin{verbatim}
|
---|
540 | #include <Numerical/arrayobject.h>
|
---|
541 | \end{verbatim}
|
---|
542 | If you must put the \file{Numerical} include directory right into your
|
---|
543 | header search path, though, you can find that directory using the
|
---|
544 | Distutils \refmodule{distutils.sysconfig} module:
|
---|
545 |
|
---|
546 | \begin{verbatim}
|
---|
547 | from distutils.sysconfig import get_python_inc
|
---|
548 | incdir = os.path.join(get_python_inc(plat_specific=1), 'Numerical')
|
---|
549 | setup(...,
|
---|
550 | Extension(..., include_dirs=[incdir]),
|
---|
551 | )
|
---|
552 | \end{verbatim}
|
---|
553 |
|
---|
554 | Even though this is quite portable---it will work on any Python
|
---|
555 | installation, regardless of platform---it's probably easier to just
|
---|
556 | write your C code in the sensible way.
|
---|
557 |
|
---|
558 | You can define and undefine pre-processor macros with the
|
---|
559 | \code{define\_macros} and \code{undef\_macros} options.
|
---|
560 | \code{define\_macros} takes a list of \code{(name, value)} tuples, where
|
---|
561 | \code{name} is the name of the macro to define (a string) and
|
---|
562 | \code{value} is its value: either a string or \code{None}. (Defining a
|
---|
563 | macro \code{FOO} to \code{None} is the equivalent of a bare
|
---|
564 | \code{\#define FOO} in your C source: with most compilers, this sets
|
---|
565 | \code{FOO} to the string \code{1}.) \code{undef\_macros} is just
|
---|
566 | a list of macros to undefine.
|
---|
567 |
|
---|
568 | For example:
|
---|
569 |
|
---|
570 | \begin{verbatim}
|
---|
571 | Extension(...,
|
---|
572 | define_macros=[('NDEBUG', '1'),
|
---|
573 | ('HAVE_STRFTIME', None)],
|
---|
574 | undef_macros=['HAVE_FOO', 'HAVE_BAR'])
|
---|
575 | \end{verbatim}
|
---|
576 |
|
---|
577 | is the equivalent of having this at the top of every C source file:
|
---|
578 |
|
---|
579 | \begin{verbatim}
|
---|
580 | #define NDEBUG 1
|
---|
581 | #define HAVE_STRFTIME
|
---|
582 | #undef HAVE_FOO
|
---|
583 | #undef HAVE_BAR
|
---|
584 | \end{verbatim}
|
---|
585 |
|
---|
586 |
|
---|
587 | \subsection{Library options}
|
---|
588 |
|
---|
589 | You can also specify the libraries to link against when building your
|
---|
590 | extension, and the directories to search for those libraries. The
|
---|
591 | \code{libraries} option is a list of libraries to link against,
|
---|
592 | \code{library\_dirs} is a list of directories to search for libraries at
|
---|
593 | link-time, and \code{runtime\_library\_dirs} is a list of directories to
|
---|
594 | search for shared (dynamically loaded) libraries at run-time.
|
---|
595 |
|
---|
596 | For example, if you need to link against libraries known to be in the
|
---|
597 | standard library search path on target systems
|
---|
598 |
|
---|
599 | \begin{verbatim}
|
---|
600 | Extension(...,
|
---|
601 | libraries=['gdbm', 'readline'])
|
---|
602 | \end{verbatim}
|
---|
603 |
|
---|
604 | If you need to link with libraries in a non-standard location, you'll
|
---|
605 | have to include the location in \code{library\_dirs}:
|
---|
606 |
|
---|
607 | \begin{verbatim}
|
---|
608 | Extension(...,
|
---|
609 | library_dirs=['/usr/X11R6/lib'],
|
---|
610 | libraries=['X11', 'Xt'])
|
---|
611 | \end{verbatim}
|
---|
612 |
|
---|
613 | (Again, this sort of non-portable construct should be avoided if you
|
---|
614 | intend to distribute your code.)
|
---|
615 |
|
---|
616 | \XXX{Should mention clib libraries here or somewhere else!}
|
---|
617 |
|
---|
618 | \subsection{Other options}
|
---|
619 |
|
---|
620 | There are still some other options which can be used to handle special
|
---|
621 | cases.
|
---|
622 |
|
---|
623 | The \option{extra\_objects} option is a list of object files to be passed
|
---|
624 | to the linker. These files must not have extensions, as the default
|
---|
625 | extension for the compiler is used.
|
---|
626 |
|
---|
627 | \option{extra\_compile\_args} and \option{extra\_link\_args} can be used
|
---|
628 | to specify additional command line options for the respective compiler and
|
---|
629 | linker command lines.
|
---|
630 |
|
---|
631 | \option{export\_symbols} is only useful on Windows. It can contain a list
|
---|
632 | of symbols (functions or variables) to be exported. This option
|
---|
633 | is not needed when building compiled extensions: Distutils
|
---|
634 | will automatically add \code{initmodule}
|
---|
635 | to the list of exported symbols.
|
---|
636 |
|
---|
637 | \section{Relationships between Distributions and Packages}
|
---|
638 |
|
---|
639 | A distribution may relate to packages in three specific ways:
|
---|
640 |
|
---|
641 | \begin{enumerate}
|
---|
642 | \item It can require packages or modules.
|
---|
643 |
|
---|
644 | \item It can provide packages or modules.
|
---|
645 |
|
---|
646 | \item It can obsolete packages or modules.
|
---|
647 | \end{enumerate}
|
---|
648 |
|
---|
649 | These relationships can be specified using keyword arguments to the
|
---|
650 | \function{distutils.core.setup()} function.
|
---|
651 |
|
---|
652 | Dependencies on other Python modules and packages can be specified by
|
---|
653 | supplying the \var{requires} keyword argument to \function{setup()}.
|
---|
654 | The value must be a list of strings. Each string specifies a package
|
---|
655 | that is required, and optionally what versions are sufficient.
|
---|
656 |
|
---|
657 | To specify that any version of a module or package is required, the
|
---|
658 | string should consist entirely of the module or package name.
|
---|
659 | Examples include \code{'mymodule'} and \code{'xml.parsers.expat'}.
|
---|
660 |
|
---|
661 | If specific versions are required, a sequence of qualifiers can be
|
---|
662 | supplied in parentheses. Each qualifier may consist of a comparison
|
---|
663 | operator and a version number. The accepted comparison operators are:
|
---|
664 |
|
---|
665 | \begin{verbatim}
|
---|
666 | < > ==
|
---|
667 | <= >= !=
|
---|
668 | \end{verbatim}
|
---|
669 |
|
---|
670 | These can be combined by using multiple qualifiers separated by commas
|
---|
671 | (and optional whitespace). In this case, all of the qualifiers must
|
---|
672 | be matched; a logical AND is used to combine the evaluations.
|
---|
673 |
|
---|
674 | Let's look at a bunch of examples:
|
---|
675 |
|
---|
676 | \begin{tableii}{l|l}{code}{Requires Expression}{Explanation}
|
---|
677 | \lineii{==1.0} {Only version \code{1.0} is compatible}
|
---|
678 | \lineii{>1.0, !=1.5.1, <2.0} {Any version after \code{1.0} and before
|
---|
679 | \code{2.0} is compatible, except
|
---|
680 | \code{1.5.1}}
|
---|
681 | \end{tableii}
|
---|
682 |
|
---|
683 | Now that we can specify dependencies, we also need to be able to
|
---|
684 | specify what we provide that other distributions can require. This is
|
---|
685 | done using the \var{provides} keyword argument to \function{setup()}.
|
---|
686 | The value for this keyword is a list of strings, each of which names a
|
---|
687 | Python module or package, and optionally identifies the version. If
|
---|
688 | the version is not specified, it is assumed to match that of the
|
---|
689 | distribution.
|
---|
690 |
|
---|
691 | Some examples:
|
---|
692 |
|
---|
693 | \begin{tableii}{l|l}{code}{Provides Expression}{Explanation}
|
---|
694 | \lineii{mypkg} {Provide \code{mypkg}, using the distribution version}
|
---|
695 | \lineii{mypkg (1.1} {Provide \code{mypkg} version 1.1, regardless of the
|
---|
696 | distribution version}
|
---|
697 | \end{tableii}
|
---|
698 |
|
---|
699 | A package can declare that it obsoletes other packages using the
|
---|
700 | \var{obsoletes} keyword argument. The value for this is similar to
|
---|
701 | that of the \var{requires} keyword: a list of strings giving module or
|
---|
702 | package specifiers. Each specifier consists of a module or package
|
---|
703 | name optionally followed by one or more version qualifiers. Version
|
---|
704 | qualifiers are given in parentheses after the module or package name.
|
---|
705 |
|
---|
706 | The versions identified by the qualifiers are those that are obsoleted
|
---|
707 | by the distribution being described. If no qualifiers are given, all
|
---|
708 | versions of the named module or package are understood to be
|
---|
709 | obsoleted.
|
---|
710 |
|
---|
711 |
|
---|
712 | \section{Installing Scripts}
|
---|
713 |
|
---|
714 | So far we have been dealing with pure and non-pure Python modules,
|
---|
715 | which are usually not run by themselves but imported by scripts.
|
---|
716 |
|
---|
717 | Scripts are files containing Python source code, intended to be
|
---|
718 | started from the command line. Scripts don't require Distutils to do
|
---|
719 | anything very complicated. The only clever feature is that if the
|
---|
720 | first line of the script starts with \code{\#!} and contains the word
|
---|
721 | ``python'', the Distutils will adjust the first line to refer to the
|
---|
722 | current interpreter location. By default, it is replaced with the
|
---|
723 | current interpreter location. The \longprogramopt{executable} (or
|
---|
724 | \programopt{-e}) option will allow the interpreter path to be
|
---|
725 | explicitly overridden.
|
---|
726 |
|
---|
727 | The \option{scripts} option simply is a list of files to be handled
|
---|
728 | in this way. From the PyXML setup script:
|
---|
729 |
|
---|
730 | \begin{verbatim}
|
---|
731 | setup(...
|
---|
732 | scripts=['scripts/xmlproc_parse', 'scripts/xmlproc_val']
|
---|
733 | )
|
---|
734 | \end{verbatim}
|
---|
735 |
|
---|
736 |
|
---|
737 | \section{Installing Package Data}
|
---|
738 |
|
---|
739 | Often, additional files need to be installed into a package. These
|
---|
740 | files are often data that's closely related to the package's
|
---|
741 | implementation, or text files containing documentation that might be
|
---|
742 | of interest to programmers using the package. These files are called
|
---|
743 | \dfn{package data}.
|
---|
744 |
|
---|
745 | Package data can be added to packages using the \code{package_data}
|
---|
746 | keyword argument to the \function{setup()} function. The value must
|
---|
747 | be a mapping from package name to a list of relative path names that
|
---|
748 | should be copied into the package. The paths are interpreted as
|
---|
749 | relative to the directory containing the package (information from the
|
---|
750 | \code{package_dir} mapping is used if appropriate); that is, the files
|
---|
751 | are expected to be part of the package in the source directories.
|
---|
752 | They may contain glob patterns as well.
|
---|
753 |
|
---|
754 | The path names may contain directory portions; any necessary
|
---|
755 | directories will be created in the installation.
|
---|
756 |
|
---|
757 | For example, if a package should contain a subdirectory with several
|
---|
758 | data files, the files can be arranged like this in the source tree:
|
---|
759 |
|
---|
760 | \begin{verbatim}
|
---|
761 | setup.py
|
---|
762 | src/
|
---|
763 | mypkg/
|
---|
764 | __init__.py
|
---|
765 | module.py
|
---|
766 | data/
|
---|
767 | tables.dat
|
---|
768 | spoons.dat
|
---|
769 | forks.dat
|
---|
770 | \end{verbatim}
|
---|
771 |
|
---|
772 | The corresponding call to \function{setup()} might be:
|
---|
773 |
|
---|
774 | \begin{verbatim}
|
---|
775 | setup(...,
|
---|
776 | packages=['mypkg'],
|
---|
777 | package_dir={'mypkg': 'src/mypkg'},
|
---|
778 | package_data={'mypkg': ['data/*.dat']},
|
---|
779 | )
|
---|
780 | \end{verbatim}
|
---|
781 |
|
---|
782 |
|
---|
783 | \versionadded{2.4}
|
---|
784 |
|
---|
785 |
|
---|
786 | \section{Installing Additional Files}
|
---|
787 |
|
---|
788 | The \option{data\_files} option can be used to specify additional
|
---|
789 | files needed by the module distribution: configuration files, message
|
---|
790 | catalogs, data files, anything which doesn't fit in the previous
|
---|
791 | categories.
|
---|
792 |
|
---|
793 | \option{data\_files} specifies a sequence of (\var{directory},
|
---|
794 | \var{files}) pairs in the following way:
|
---|
795 |
|
---|
796 | \begin{verbatim}
|
---|
797 | setup(...
|
---|
798 | data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
|
---|
799 | ('config', ['cfg/data.cfg']),
|
---|
800 | ('/etc/init.d', ['init-script'])]
|
---|
801 | )
|
---|
802 | \end{verbatim}
|
---|
803 |
|
---|
804 | Note that you can specify the directory names where the data files
|
---|
805 | will be installed, but you cannot rename the data files themselves.
|
---|
806 |
|
---|
807 | Each (\var{directory}, \var{files}) pair in the sequence specifies the
|
---|
808 | installation directory and the files to install there. If
|
---|
809 | \var{directory} is a relative path, it is interpreted relative to the
|
---|
810 | installation prefix (Python's \code{sys.prefix} for pure-Python
|
---|
811 | packages, \code{sys.exec_prefix} for packages that contain extension
|
---|
812 | modules). Each file name in \var{files} is interpreted relative to
|
---|
813 | the \file{setup.py} script at the top of the package source
|
---|
814 | distribution. No directory information from \var{files} is used to
|
---|
815 | determine the final location of the installed file; only the name of
|
---|
816 | the file is used.
|
---|
817 |
|
---|
818 | You can specify the \option{data\_files} options as a simple sequence
|
---|
819 | of files without specifying a target directory, but this is not recommended,
|
---|
820 | and the \command{install} command will print a warning in this case.
|
---|
821 | To install data files directly in the target directory, an empty
|
---|
822 | string should be given as the directory.
|
---|
823 |
|
---|
824 | \section{Additional meta-data}
|
---|
825 | \label{meta-data}
|
---|
826 |
|
---|
827 | The setup script may include additional meta-data beyond the name and
|
---|
828 | version. This information includes:
|
---|
829 |
|
---|
830 | \begin{tableiv}{l|l|l|c}{code}%
|
---|
831 | {Meta-Data}{Description}{Value}{Notes}
|
---|
832 | \lineiv{name}{name of the package}
|
---|
833 | {short string}{(1)}
|
---|
834 | \lineiv{version}{version of this release}
|
---|
835 | {short string}{(1)(2)}
|
---|
836 | \lineiv{author}{package author's name}
|
---|
837 | {short string}{(3)}
|
---|
838 | \lineiv{author_email}{email address of the package author}
|
---|
839 | {email address}{(3)}
|
---|
840 | \lineiv{maintainer}{package maintainer's name}
|
---|
841 | {short string}{(3)}
|
---|
842 | \lineiv{maintainer_email}{email address of the package maintainer}
|
---|
843 | {email address}{(3)}
|
---|
844 | \lineiv{url}{home page for the package}
|
---|
845 | {URL}{(1)}
|
---|
846 | \lineiv{description}{short, summary description of the package}
|
---|
847 | {short string}{}
|
---|
848 | \lineiv{long_description}{longer description of the package}
|
---|
849 | {long string}{}
|
---|
850 | \lineiv{download_url}{location where the package may be downloaded}
|
---|
851 | {URL}{(4)}
|
---|
852 | \lineiv{classifiers}{a list of classifiers}
|
---|
853 | {list of strings}{(4)}
|
---|
854 | \end{tableiv}
|
---|
855 |
|
---|
856 | \noindent Notes:
|
---|
857 | \begin{description}
|
---|
858 | \item[(1)] These fields are required.
|
---|
859 | \item[(2)] It is recommended that versions take the form
|
---|
860 | \emph{major.minor\optional{.patch\optional{.sub}}}.
|
---|
861 | \item[(3)] Either the author or the maintainer must be identified.
|
---|
862 | \item[(4)] These fields should not be used if your package is to be
|
---|
863 | compatible with Python versions prior to 2.2.3 or 2.3. The list is
|
---|
864 | available from the \ulink{PyPI website}{http://www.python.org/pypi}.
|
---|
865 |
|
---|
866 | \item['short string'] A single line of text, not more than 200 characters.
|
---|
867 | \item['long string'] Multiple lines of plain text in reStructuredText
|
---|
868 | format (see \url{http://docutils.sf.net/}).
|
---|
869 | \item['list of strings'] See below.
|
---|
870 | \end{description}
|
---|
871 |
|
---|
872 | None of the string values may be Unicode.
|
---|
873 |
|
---|
874 | Encoding the version information is an art in itself. Python packages
|
---|
875 | generally adhere to the version format
|
---|
876 | \emph{major.minor\optional{.patch}\optional{sub}}. The major number is
|
---|
877 | 0 for
|
---|
878 | initial, experimental releases of software. It is incremented for
|
---|
879 | releases that represent major milestones in a package. The minor
|
---|
880 | number is incremented when important new features are added to the
|
---|
881 | package. The patch number increments when bug-fix releases are
|
---|
882 | made. Additional trailing version information is sometimes used to
|
---|
883 | indicate sub-releases. These are "a1,a2,...,aN" (for alpha releases,
|
---|
884 | where functionality and API may change), "b1,b2,...,bN" (for beta
|
---|
885 | releases, which only fix bugs) and "pr1,pr2,...,prN" (for final
|
---|
886 | pre-release release testing). Some examples:
|
---|
887 |
|
---|
888 | \begin{description}
|
---|
889 | \item[0.1.0] the first, experimental release of a package
|
---|
890 | \item[1.0.1a2] the second alpha release of the first patch version of 1.0
|
---|
891 | \end{description}
|
---|
892 |
|
---|
893 | \option{classifiers} are specified in a python list:
|
---|
894 |
|
---|
895 | \begin{verbatim}
|
---|
896 | setup(...
|
---|
897 | classifiers=[
|
---|
898 | 'Development Status :: 4 - Beta',
|
---|
899 | 'Environment :: Console',
|
---|
900 | 'Environment :: Web Environment',
|
---|
901 | 'Intended Audience :: End Users/Desktop',
|
---|
902 | 'Intended Audience :: Developers',
|
---|
903 | 'Intended Audience :: System Administrators',
|
---|
904 | 'License :: OSI Approved :: Python Software Foundation License',
|
---|
905 | 'Operating System :: MacOS :: MacOS X',
|
---|
906 | 'Operating System :: Microsoft :: Windows',
|
---|
907 | 'Operating System :: POSIX',
|
---|
908 | 'Programming Language :: Python',
|
---|
909 | 'Topic :: Communications :: Email',
|
---|
910 | 'Topic :: Office/Business',
|
---|
911 | 'Topic :: Software Development :: Bug Tracking',
|
---|
912 | ],
|
---|
913 | )
|
---|
914 | \end{verbatim}
|
---|
915 |
|
---|
916 | If you wish to include classifiers in your \file{setup.py} file and also
|
---|
917 | wish to remain backwards-compatible with Python releases prior to 2.2.3,
|
---|
918 | then you can include the following code fragment in your \file{setup.py}
|
---|
919 | before the \function{setup()} call.
|
---|
920 |
|
---|
921 | \begin{verbatim}
|
---|
922 | # patch distutils if it can't cope with the "classifiers" or
|
---|
923 | # "download_url" keywords
|
---|
924 | from sys import version
|
---|
925 | if version < '2.2.3':
|
---|
926 | from distutils.dist import DistributionMetadata
|
---|
927 | DistributionMetadata.classifiers = None
|
---|
928 | DistributionMetadata.download_url = None
|
---|
929 | \end{verbatim}
|
---|
930 |
|
---|
931 |
|
---|
932 | \section{Debugging the setup script}
|
---|
933 |
|
---|
934 | Sometimes things go wrong, and the setup script doesn't do what the
|
---|
935 | developer wants.
|
---|
936 |
|
---|
937 | Distutils catches any exceptions when running the setup script, and
|
---|
938 | print a simple error message before the script is terminated. The
|
---|
939 | motivation for this behaviour is to not confuse administrators who
|
---|
940 | don't know much about Python and are trying to install a package. If
|
---|
941 | they get a big long traceback from deep inside the guts of Distutils,
|
---|
942 | they may think the package or the Python installation is broken
|
---|
943 | because they don't read all the way down to the bottom and see that
|
---|
944 | it's a permission problem.
|
---|
945 |
|
---|
946 | On the other hand, this doesn't help the developer to find the cause
|
---|
947 | of the failure. For this purpose, the DISTUTILS_DEBUG environment
|
---|
948 | variable can be set to anything except an empty string, and distutils
|
---|
949 | will now print detailed information what it is doing, and prints the
|
---|
950 | full traceback in case an exception occurs.
|
---|
951 |
|
---|
952 | \chapter{Writing the Setup Configuration File}
|
---|
953 | \label{setup-config}
|
---|
954 |
|
---|
955 | Often, it's not possible to write down everything needed to build a
|
---|
956 | distribution \emph{a priori}: you may need to get some information from
|
---|
957 | the user, or from the user's system, in order to proceed. As long as
|
---|
958 | that information is fairly simple---a list of directories to search for
|
---|
959 | C header files or libraries, for example---then providing a
|
---|
960 | configuration file, \file{setup.cfg}, for users to edit is a cheap and
|
---|
961 | easy way to solicit it. Configuration files also let you provide
|
---|
962 | default values for any command option, which the installer can then
|
---|
963 | override either on the command-line or by editing the config file.
|
---|
964 |
|
---|
965 | % (If you have more advanced needs, such as determining which extensions
|
---|
966 | % to build based on what capabilities are present on the target system,
|
---|
967 | % then you need the Distutils ``auto-configuration'' facility. This
|
---|
968 | % started to appear in Distutils 0.9 but, as of this writing, isn't mature
|
---|
969 | % or stable enough yet for real-world use.)
|
---|
970 |
|
---|
971 | The setup configuration file is a useful middle-ground between the setup
|
---|
972 | script---which, ideally, would be opaque to installers\footnote{This
|
---|
973 | ideal probably won't be achieved until auto-configuration is fully
|
---|
974 | supported by the Distutils.}---and the command-line to the setup
|
---|
975 | script, which is outside of your control and entirely up to the
|
---|
976 | installer. In fact, \file{setup.cfg} (and any other Distutils
|
---|
977 | configuration files present on the target system) are processed after
|
---|
978 | the contents of the setup script, but before the command-line. This has
|
---|
979 | several useful consequences:
|
---|
980 | \begin{itemize}
|
---|
981 | \item installers can override some of what you put in \file{setup.py} by
|
---|
982 | editing \file{setup.cfg}
|
---|
983 | \item you can provide non-standard defaults for options that are not
|
---|
984 | easily set in \file{setup.py}
|
---|
985 | \item installers can override anything in \file{setup.cfg} using the
|
---|
986 | command-line options to \file{setup.py}
|
---|
987 | \end{itemize}
|
---|
988 |
|
---|
989 | The basic syntax of the configuration file is simple:
|
---|
990 |
|
---|
991 | \begin{verbatim}
|
---|
992 | [command]
|
---|
993 | option=value
|
---|
994 | ...
|
---|
995 | \end{verbatim}
|
---|
996 |
|
---|
997 | where \var{command} is one of the Distutils commands (e.g.
|
---|
998 | \command{build\_py}, \command{install}), and \var{option} is one of
|
---|
999 | the options that command supports. Any number of options can be
|
---|
1000 | supplied for each command, and any number of command sections can be
|
---|
1001 | included in the file. Blank lines are ignored, as are comments, which
|
---|
1002 | run from a \character{\#} character until the end of the line. Long
|
---|
1003 | option values can be split across multiple lines simply by indenting
|
---|
1004 | the continuation lines.
|
---|
1005 |
|
---|
1006 | You can find out the list of options supported by a particular command
|
---|
1007 | with the universal \longprogramopt{help} option, e.g.
|
---|
1008 |
|
---|
1009 | \begin{verbatim}
|
---|
1010 | > python setup.py --help build_ext
|
---|
1011 | [...]
|
---|
1012 | Options for 'build_ext' command:
|
---|
1013 | --build-lib (-b) directory for compiled extension modules
|
---|
1014 | --build-temp (-t) directory for temporary files (build by-products)
|
---|
1015 | --inplace (-i) ignore build-lib and put compiled extensions into the
|
---|
1016 | source directory alongside your pure Python modules
|
---|
1017 | --include-dirs (-I) list of directories to search for header files
|
---|
1018 | --define (-D) C preprocessor macros to define
|
---|
1019 | --undef (-U) C preprocessor macros to undefine
|
---|
1020 | [...]
|
---|
1021 | \end{verbatim}
|
---|
1022 |
|
---|
1023 | Note that an option spelled \longprogramopt{foo-bar} on the command-line
|
---|
1024 | is spelled \option{foo\_bar} in configuration files.
|
---|
1025 |
|
---|
1026 | For example, say you want your extensions to be built
|
---|
1027 | ``in-place''---that is, you have an extension \module{pkg.ext}, and you
|
---|
1028 | want the compiled extension file (\file{ext.so} on \UNIX, say) to be put
|
---|
1029 | in the same source directory as your pure Python modules
|
---|
1030 | \module{pkg.mod1} and \module{pkg.mod2}. You can always use the
|
---|
1031 | \longprogramopt{inplace} option on the command-line to ensure this:
|
---|
1032 |
|
---|
1033 | \begin{verbatim}
|
---|
1034 | python setup.py build_ext --inplace
|
---|
1035 | \end{verbatim}
|
---|
1036 |
|
---|
1037 | But this requires that you always specify the \command{build\_ext}
|
---|
1038 | command explicitly, and remember to provide \longprogramopt{inplace}.
|
---|
1039 | An easier way is to ``set and forget'' this option, by encoding it in
|
---|
1040 | \file{setup.cfg}, the configuration file for this distribution:
|
---|
1041 |
|
---|
1042 | \begin{verbatim}
|
---|
1043 | [build_ext]
|
---|
1044 | inplace=1
|
---|
1045 | \end{verbatim}
|
---|
1046 |
|
---|
1047 | This will affect all builds of this module distribution, whether or not
|
---|
1048 | you explicitly specify \command{build\_ext}. If you include
|
---|
1049 | \file{setup.cfg} in your source distribution, it will also affect
|
---|
1050 | end-user builds---which is probably a bad idea for this option, since
|
---|
1051 | always building extensions in-place would break installation of the
|
---|
1052 | module distribution. In certain peculiar cases, though, modules are
|
---|
1053 | built right in their installation directory, so this is conceivably a
|
---|
1054 | useful ability. (Distributing extensions that expect to be built in
|
---|
1055 | their installation directory is almost always a bad idea, though.)
|
---|
1056 |
|
---|
1057 | Another example: certain commands take a lot of options that don't
|
---|
1058 | change from run to run; for example, \command{bdist\_rpm} needs to know
|
---|
1059 | everything required to generate a ``spec'' file for creating an RPM
|
---|
1060 | distribution. Some of this information comes from the setup script, and
|
---|
1061 | some is automatically generated by the Distutils (such as the list of
|
---|
1062 | files installed). But some of it has to be supplied as options to
|
---|
1063 | \command{bdist\_rpm}, which would be very tedious to do on the
|
---|
1064 | command-line for every run. Hence, here is a snippet from the
|
---|
1065 | Distutils' own \file{setup.cfg}:
|
---|
1066 |
|
---|
1067 | \begin{verbatim}
|
---|
1068 | [bdist_rpm]
|
---|
1069 | release = 1
|
---|
1070 | packager = Greg Ward <gward@python.net>
|
---|
1071 | doc_files = CHANGES.txt
|
---|
1072 | README.txt
|
---|
1073 | USAGE.txt
|
---|
1074 | doc/
|
---|
1075 | examples/
|
---|
1076 | \end{verbatim}
|
---|
1077 |
|
---|
1078 | Note that the \option{doc\_files} option is simply a
|
---|
1079 | whitespace-separated string split across multiple lines for readability.
|
---|
1080 |
|
---|
1081 |
|
---|
1082 | \begin{seealso}
|
---|
1083 | \seetitle[../inst/config-syntax.html]{Installing Python
|
---|
1084 | Modules}{More information on the configuration files is
|
---|
1085 | available in the manual for system administrators.}
|
---|
1086 | \end{seealso}
|
---|
1087 |
|
---|
1088 |
|
---|
1089 | \chapter{Creating a Source Distribution}
|
---|
1090 | \label{source-dist}
|
---|
1091 |
|
---|
1092 | As shown in section~\ref{simple-example}, you use the
|
---|
1093 | \command{sdist} command to create a source distribution. In the
|
---|
1094 | simplest case,
|
---|
1095 |
|
---|
1096 | \begin{verbatim}
|
---|
1097 | python setup.py sdist
|
---|
1098 | \end{verbatim}
|
---|
1099 |
|
---|
1100 | (assuming you haven't specified any \command{sdist} options in the setup
|
---|
1101 | script or config file), \command{sdist} creates the archive of the
|
---|
1102 | default format for the current platform. The default format is a gzip'ed
|
---|
1103 | tar file (\file{.tar.gz}) on \UNIX, and ZIP file on Windows.
|
---|
1104 |
|
---|
1105 | You can specify as many formats as you like using the
|
---|
1106 | \longprogramopt{formats} option, for example:
|
---|
1107 |
|
---|
1108 | \begin{verbatim}
|
---|
1109 | python setup.py sdist --formats=gztar,zip
|
---|
1110 | \end{verbatim}
|
---|
1111 |
|
---|
1112 | to create a gzipped tarball and a zip file. The available formats are:
|
---|
1113 |
|
---|
1114 | \begin{tableiii}{l|l|c}{code}%
|
---|
1115 | {Format}{Description}{Notes}
|
---|
1116 | \lineiii{zip}{zip file (\file{.zip})}{(1),(3)}
|
---|
1117 | \lineiii{gztar}{gzip'ed tar file (\file{.tar.gz})}{(2),(4)}
|
---|
1118 | \lineiii{bztar}{bzip2'ed tar file (\file{.tar.bz2})}{(4)}
|
---|
1119 | \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{(4)}
|
---|
1120 | \lineiii{tar}{tar file (\file{.tar})}{(4)}
|
---|
1121 | \end{tableiii}
|
---|
1122 |
|
---|
1123 | \noindent Notes:
|
---|
1124 | \begin{description}
|
---|
1125 | \item[(1)] default on Windows
|
---|
1126 | \item[(2)] default on \UNIX
|
---|
1127 | \item[(3)] requires either external \program{zip} utility or
|
---|
1128 | \module{zipfile} module (part of the standard Python library since
|
---|
1129 | Python~1.6)
|
---|
1130 | \item[(4)] requires external utilities: \program{tar} and possibly one
|
---|
1131 | of \program{gzip}, \program{bzip2}, or \program{compress}
|
---|
1132 | \end{description}
|
---|
1133 |
|
---|
1134 |
|
---|
1135 |
|
---|
1136 | \section{Specifying the files to distribute}
|
---|
1137 | \label{manifest}
|
---|
1138 |
|
---|
1139 | If you don't supply an explicit list of files (or instructions on how to
|
---|
1140 | generate one), the \command{sdist} command puts a minimal default set
|
---|
1141 | into the source distribution:
|
---|
1142 | \begin{itemize}
|
---|
1143 | \item all Python source files implied by the \option{py\_modules} and
|
---|
1144 | \option{packages} options
|
---|
1145 | \item all C source files mentioned in the \option{ext\_modules} or
|
---|
1146 | \option{libraries} options (\XXX{getting C library sources currently
|
---|
1147 | broken---no \method{get_source_files()} method in \file{build_clib.py}!})
|
---|
1148 | \item scripts identified by the \option{scripts} option
|
---|
1149 | \item anything that looks like a test script: \file{test/test*.py}
|
---|
1150 | (currently, the Distutils don't do anything with test scripts except
|
---|
1151 | include them in source distributions, but in the future there will be
|
---|
1152 | a standard for testing Python module distributions)
|
---|
1153 | \item \file{README.txt} (or \file{README}), \file{setup.py} (or whatever
|
---|
1154 | you called your setup script), and \file{setup.cfg}
|
---|
1155 | \end{itemize}
|
---|
1156 |
|
---|
1157 | Sometimes this is enough, but usually you will want to specify
|
---|
1158 | additional files to distribute. The typical way to do this is to write
|
---|
1159 | a \emph{manifest template}, called \file{MANIFEST.in} by default. The
|
---|
1160 | manifest template is just a list of instructions for how to generate
|
---|
1161 | your manifest file, \file{MANIFEST}, which is the exact list of files to
|
---|
1162 | include in your source distribution. The \command{sdist} command
|
---|
1163 | processes this template and generates a manifest based on its
|
---|
1164 | instructions and what it finds in the filesystem.
|
---|
1165 |
|
---|
1166 | If you prefer to roll your own manifest file, the format is simple: one
|
---|
1167 | filename per line, regular files (or symlinks to them) only. If you do
|
---|
1168 | supply your own \file{MANIFEST}, you must specify everything: the
|
---|
1169 | default set of files described above does not apply in this case.
|
---|
1170 |
|
---|
1171 | The manifest template has one command per line, where each command
|
---|
1172 | specifies a set of files to include or exclude from the source
|
---|
1173 | distribution. For an example, again we turn to the Distutils' own
|
---|
1174 | manifest template:
|
---|
1175 |
|
---|
1176 | \begin{verbatim}
|
---|
1177 | include *.txt
|
---|
1178 | recursive-include examples *.txt *.py
|
---|
1179 | prune examples/sample?/build
|
---|
1180 | \end{verbatim}
|
---|
1181 |
|
---|
1182 | The meanings should be fairly clear: include all files in the
|
---|
1183 | distribution root matching \file{*.txt}, all files anywhere under the
|
---|
1184 | \file{examples} directory matching \file{*.txt} or \file{*.py}, and
|
---|
1185 | exclude all directories matching \file{examples/sample?/build}. All of
|
---|
1186 | this is done \emph{after} the standard include set, so you can exclude
|
---|
1187 | files from the standard set with explicit instructions in the manifest
|
---|
1188 | template. (Or, you can use the \longprogramopt{no-defaults} option to
|
---|
1189 | disable the standard set entirely.) There are several other commands
|
---|
1190 | available in the manifest template mini-language; see
|
---|
1191 | section~\ref{sdist-cmd}.
|
---|
1192 |
|
---|
1193 | The order of commands in the manifest template matters: initially, we
|
---|
1194 | have the list of default files as described above, and each command in
|
---|
1195 | the template adds to or removes from that list of files. Once we have
|
---|
1196 | fully processed the manifest template, we remove files that should not
|
---|
1197 | be included in the source distribution:
|
---|
1198 | \begin{itemize}
|
---|
1199 | \item all files in the Distutils ``build'' tree (default \file{build/})
|
---|
1200 | \item all files in directories named \file{RCS}, \file{CVS} or \file{.svn}
|
---|
1201 | \end{itemize}
|
---|
1202 | Now we have our complete list of files, which is written to the manifest
|
---|
1203 | for future reference, and then used to build the source distribution
|
---|
1204 | archive(s).
|
---|
1205 |
|
---|
1206 | You can disable the default set of included files with the
|
---|
1207 | \longprogramopt{no-defaults} option, and you can disable the standard
|
---|
1208 | exclude set with \longprogramopt{no-prune}.
|
---|
1209 |
|
---|
1210 | Following the Distutils' own manifest template, let's trace how the
|
---|
1211 | \command{sdist} command builds the list of files to include in the
|
---|
1212 | Distutils source distribution:
|
---|
1213 | \begin{enumerate}
|
---|
1214 | \item include all Python source files in the \file{distutils} and
|
---|
1215 | \file{distutils/command} subdirectories (because packages
|
---|
1216 | corresponding to those two directories were mentioned in the
|
---|
1217 | \option{packages} option in the setup script---see
|
---|
1218 | section~\ref{setup-script})
|
---|
1219 | \item include \file{README.txt}, \file{setup.py}, and \file{setup.cfg}
|
---|
1220 | (standard files)
|
---|
1221 | \item include \file{test/test*.py} (standard files)
|
---|
1222 | \item include \file{*.txt} in the distribution root (this will find
|
---|
1223 | \file{README.txt} a second time, but such redundancies are weeded out
|
---|
1224 | later)
|
---|
1225 | \item include anything matching \file{*.txt} or \file{*.py} in the
|
---|
1226 | sub-tree under \file{examples},
|
---|
1227 | \item exclude all files in the sub-trees starting at directories
|
---|
1228 | matching \file{examples/sample?/build}---this may exclude files
|
---|
1229 | included by the previous two steps, so it's important that the
|
---|
1230 | \code{prune} command in the manifest template comes after the
|
---|
1231 | \code{recursive-include} command
|
---|
1232 | \item exclude the entire \file{build} tree, and any \file{RCS},
|
---|
1233 | \file{CVS} and \file{.svn} directories
|
---|
1234 | \end{enumerate}
|
---|
1235 | Just like in the setup script, file and directory names in the manifest
|
---|
1236 | template should always be slash-separated; the Distutils will take care
|
---|
1237 | of converting them to the standard representation on your platform.
|
---|
1238 | That way, the manifest template is portable across operating systems.
|
---|
1239 |
|
---|
1240 |
|
---|
1241 | \section{Manifest-related options}
|
---|
1242 | \label{manifest-options}
|
---|
1243 |
|
---|
1244 | The normal course of operations for the \command{sdist} command is as
|
---|
1245 | follows:
|
---|
1246 | \begin{itemize}
|
---|
1247 | \item if the manifest file, \file{MANIFEST} doesn't exist, read
|
---|
1248 | \file{MANIFEST.in} and create the manifest
|
---|
1249 | \item if neither \file{MANIFEST} nor \file{MANIFEST.in} exist, create a
|
---|
1250 | manifest with just the default file set
|
---|
1251 | \item if either \file{MANIFEST.in} or the setup script (\file{setup.py})
|
---|
1252 | are more recent than \file{MANIFEST}, recreate \file{MANIFEST} by
|
---|
1253 | reading \file{MANIFEST.in}
|
---|
1254 | \item use the list of files now in \file{MANIFEST} (either just
|
---|
1255 | generated or read in) to create the source distribution archive(s)
|
---|
1256 | \end{itemize}
|
---|
1257 | There are a couple of options that modify this behaviour. First, use
|
---|
1258 | the \longprogramopt{no-defaults} and \longprogramopt{no-prune} to
|
---|
1259 | disable the standard ``include'' and ``exclude'' sets.
|
---|
1260 |
|
---|
1261 | Second, you might want to force the manifest to be regenerated---for
|
---|
1262 | example, if you have added or removed files or directories that match an
|
---|
1263 | existing pattern in the manifest template, you should regenerate the
|
---|
1264 | manifest:
|
---|
1265 |
|
---|
1266 | \begin{verbatim}
|
---|
1267 | python setup.py sdist --force-manifest
|
---|
1268 | \end{verbatim}
|
---|
1269 |
|
---|
1270 | Or, you might just want to (re)generate the manifest, but not create a
|
---|
1271 | source distribution:
|
---|
1272 |
|
---|
1273 | \begin{verbatim}
|
---|
1274 | python setup.py sdist --manifest-only
|
---|
1275 | \end{verbatim}
|
---|
1276 |
|
---|
1277 | \longprogramopt{manifest-only} implies \longprogramopt{force-manifest}.
|
---|
1278 | \programopt{-o} is a shortcut for \longprogramopt{manifest-only}, and
|
---|
1279 | \programopt{-f} for \longprogramopt{force-manifest}.
|
---|
1280 |
|
---|
1281 |
|
---|
1282 | \chapter{Creating Built Distributions}
|
---|
1283 | \label{built-dist}
|
---|
1284 |
|
---|
1285 | A ``built distribution'' is what you're probably used to thinking of
|
---|
1286 | either as a ``binary package'' or an ``installer'' (depending on your
|
---|
1287 | background). It's not necessarily binary, though, because it might
|
---|
1288 | contain only Python source code and/or byte-code; and we don't call it a
|
---|
1289 | package, because that word is already spoken for in Python. (And
|
---|
1290 | ``installer'' is a term specific to the world of mainstream desktop
|
---|
1291 | systems.)
|
---|
1292 |
|
---|
1293 | A built distribution is how you make life as easy as possible for
|
---|
1294 | installers of your module distribution: for users of RPM-based Linux
|
---|
1295 | systems, it's a binary RPM; for Windows users, it's an executable
|
---|
1296 | installer; for Debian-based Linux users, it's a Debian package; and so
|
---|
1297 | forth. Obviously, no one person will be able to create built
|
---|
1298 | distributions for every platform under the sun, so the Distutils are
|
---|
1299 | designed to enable module developers to concentrate on their
|
---|
1300 | specialty---writing code and creating source distributions---while an
|
---|
1301 | intermediary species called \emph{packagers} springs up to turn source
|
---|
1302 | distributions into built distributions for as many platforms as there
|
---|
1303 | are packagers.
|
---|
1304 |
|
---|
1305 | Of course, the module developer could be his own packager; or the
|
---|
1306 | packager could be a volunteer ``out there'' somewhere who has access to
|
---|
1307 | a platform which the original developer does not; or it could be
|
---|
1308 | software periodically grabbing new source distributions and turning them
|
---|
1309 | into built distributions for as many platforms as the software has
|
---|
1310 | access to. Regardless of who they are, a packager uses the
|
---|
1311 | setup script and the \command{bdist} command family to generate built
|
---|
1312 | distributions.
|
---|
1313 |
|
---|
1314 | As a simple example, if I run the following command in the Distutils
|
---|
1315 | source tree:
|
---|
1316 |
|
---|
1317 | \begin{verbatim}
|
---|
1318 | python setup.py bdist
|
---|
1319 | \end{verbatim}
|
---|
1320 |
|
---|
1321 | then the Distutils builds my module distribution (the Distutils itself
|
---|
1322 | in this case), does a ``fake'' installation (also in the \file{build}
|
---|
1323 | directory), and creates the default type of built distribution for my
|
---|
1324 | platform. The default format for built distributions is a ``dumb'' tar
|
---|
1325 | file on \UNIX, and a simple executable installer on Windows. (That tar
|
---|
1326 | file is considered ``dumb'' because it has to be unpacked in a specific
|
---|
1327 | location to work.)
|
---|
1328 |
|
---|
1329 | Thus, the above command on a \UNIX{} system creates
|
---|
1330 | \file{Distutils-1.0.\filevar{plat}.tar.gz}; unpacking this tarball
|
---|
1331 | from the right place installs the Distutils just as though you had
|
---|
1332 | downloaded the source distribution and run \code{python setup.py
|
---|
1333 | install}. (The ``right place'' is either the root of the filesystem or
|
---|
1334 | Python's \filevar{prefix} directory, depending on the options given to
|
---|
1335 | the \command{bdist\_dumb} command; the default is to make dumb
|
---|
1336 | distributions relative to \filevar{prefix}.)
|
---|
1337 |
|
---|
1338 | Obviously, for pure Python distributions, this isn't any simpler than
|
---|
1339 | just running \code{python setup.py install}---but for non-pure
|
---|
1340 | distributions, which include extensions that would need to be
|
---|
1341 | compiled, it can mean the difference between someone being able to use
|
---|
1342 | your extensions or not. And creating ``smart'' built distributions,
|
---|
1343 | such as an RPM package or an executable installer for Windows, is far
|
---|
1344 | more convenient for users even if your distribution doesn't include
|
---|
1345 | any extensions.
|
---|
1346 |
|
---|
1347 | The \command{bdist} command has a \longprogramopt{formats} option,
|
---|
1348 | similar to the \command{sdist} command, which you can use to select the
|
---|
1349 | types of built distribution to generate: for example,
|
---|
1350 |
|
---|
1351 | \begin{verbatim}
|
---|
1352 | python setup.py bdist --format=zip
|
---|
1353 | \end{verbatim}
|
---|
1354 |
|
---|
1355 | would, when run on a \UNIX{} system, create
|
---|
1356 | \file{Distutils-1.0.\filevar{plat}.zip}---again, this archive would be
|
---|
1357 | unpacked from the root directory to install the Distutils.
|
---|
1358 |
|
---|
1359 | The available formats for built distributions are:
|
---|
1360 |
|
---|
1361 | \begin{tableiii}{l|l|c}{code}%
|
---|
1362 | {Format}{Description}{Notes}
|
---|
1363 | \lineiii{gztar}{gzipped tar file (\file{.tar.gz})}{(1),(3)}
|
---|
1364 | \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{(3)}
|
---|
1365 | \lineiii{tar}{tar file (\file{.tar})}{(3)}
|
---|
1366 | \lineiii{zip}{zip file (\file{.zip})}{(4)}
|
---|
1367 | \lineiii{rpm}{RPM}{(5)}
|
---|
1368 | \lineiii{pkgtool}{Solaris \program{pkgtool}}{}
|
---|
1369 | \lineiii{sdux}{HP-UX \program{swinstall}}{}
|
---|
1370 | \lineiii{rpm}{RPM}{(5)}
|
---|
1371 | % \lineiii{srpm}{source RPM}{(5) \XXX{to do!}}
|
---|
1372 | \lineiii{wininst}{self-extracting ZIP file for Windows}{(2),(4)}
|
---|
1373 | \end{tableiii}
|
---|
1374 |
|
---|
1375 | \noindent Notes:
|
---|
1376 | \begin{description}
|
---|
1377 | \item[(1)] default on \UNIX
|
---|
1378 | \item[(2)] default on Windows \XXX{to-do!}
|
---|
1379 | \item[(3)] requires external utilities: \program{tar} and possibly one
|
---|
1380 | of \program{gzip}, \program{bzip2}, or \program{compress}
|
---|
1381 | \item[(4)] requires either external \program{zip} utility or
|
---|
1382 | \module{zipfile} module (part of the standard Python library since
|
---|
1383 | Python~1.6)
|
---|
1384 | \item[(5)] requires external \program{rpm} utility, version 3.0.4 or
|
---|
1385 | better (use \code{rpm --version} to find out which version you have)
|
---|
1386 | \end{description}
|
---|
1387 |
|
---|
1388 | You don't have to use the \command{bdist} command with the
|
---|
1389 | \longprogramopt{formats} option; you can also use the command that
|
---|
1390 | directly implements the format you're interested in. Some of these
|
---|
1391 | \command{bdist} ``sub-commands'' actually generate several similar
|
---|
1392 | formats; for instance, the \command{bdist\_dumb} command generates all
|
---|
1393 | the ``dumb'' archive formats (\code{tar}, \code{ztar}, \code{gztar}, and
|
---|
1394 | \code{zip}), and \command{bdist\_rpm} generates both binary and source
|
---|
1395 | RPMs. The \command{bdist} sub-commands, and the formats generated by
|
---|
1396 | each, are:
|
---|
1397 |
|
---|
1398 | \begin{tableii}{l|l}{command}%
|
---|
1399 | {Command}{Formats}
|
---|
1400 | \lineii{bdist\_dumb}{tar, ztar, gztar, zip}
|
---|
1401 | \lineii{bdist\_rpm}{rpm, srpm}
|
---|
1402 | \lineii{bdist\_wininst}{wininst}
|
---|
1403 | \end{tableii}
|
---|
1404 |
|
---|
1405 | The following sections give details on the individual \command{bdist\_*}
|
---|
1406 | commands.
|
---|
1407 |
|
---|
1408 |
|
---|
1409 | \section{Creating dumb built distributions}
|
---|
1410 | \label{creating-dumb}
|
---|
1411 |
|
---|
1412 | \XXX{Need to document absolute vs. prefix-relative packages here, but
|
---|
1413 | first I have to implement it!}
|
---|
1414 |
|
---|
1415 |
|
---|
1416 | \section{Creating RPM packages}
|
---|
1417 | \label{creating-rpms}
|
---|
1418 |
|
---|
1419 | The RPM format is used by many popular Linux distributions, including
|
---|
1420 | Red Hat, SuSE, and Mandrake. If one of these (or any of the other
|
---|
1421 | RPM-based Linux distributions) is your usual environment, creating RPM
|
---|
1422 | packages for other users of that same distribution is trivial.
|
---|
1423 | Depending on the complexity of your module distribution and differences
|
---|
1424 | between Linux distributions, you may also be able to create RPMs that
|
---|
1425 | work on different RPM-based distributions.
|
---|
1426 |
|
---|
1427 | The usual way to create an RPM of your module distribution is to run the
|
---|
1428 | \command{bdist\_rpm} command:
|
---|
1429 |
|
---|
1430 | \begin{verbatim}
|
---|
1431 | python setup.py bdist_rpm
|
---|
1432 | \end{verbatim}
|
---|
1433 |
|
---|
1434 | or the \command{bdist} command with the \longprogramopt{format} option:
|
---|
1435 |
|
---|
1436 | \begin{verbatim}
|
---|
1437 | python setup.py bdist --formats=rpm
|
---|
1438 | \end{verbatim}
|
---|
1439 |
|
---|
1440 | The former allows you to specify RPM-specific options; the latter allows
|
---|
1441 | you to easily specify multiple formats in one run. If you need to do
|
---|
1442 | both, you can explicitly specify multiple \command{bdist\_*} commands
|
---|
1443 | and their options:
|
---|
1444 |
|
---|
1445 | \begin{verbatim}
|
---|
1446 | python setup.py bdist_rpm --packager="John Doe <jdoe@example.org>" \
|
---|
1447 | bdist_wininst --target_version="2.0"
|
---|
1448 | \end{verbatim}
|
---|
1449 |
|
---|
1450 | Creating RPM packages is driven by a \file{.spec} file, much as using
|
---|
1451 | the Distutils is driven by the setup script. To make your life easier,
|
---|
1452 | the \command{bdist\_rpm} command normally creates a \file{.spec} file
|
---|
1453 | based on the information you supply in the setup script, on the command
|
---|
1454 | line, and in any Distutils configuration files. Various options and
|
---|
1455 | sections in the \file{.spec} file are derived from options in the setup
|
---|
1456 | script as follows:
|
---|
1457 |
|
---|
1458 | \begin{tableii}{l|l}{textrm}%
|
---|
1459 | {RPM \file{.spec} file option or section}{Distutils setup script option}
|
---|
1460 | \lineii{Name}{\option{name}}
|
---|
1461 | \lineii{Summary (in preamble)}{\option{description}}
|
---|
1462 | \lineii{Version}{\option{version}}
|
---|
1463 | \lineii{Vendor}{\option{author} and \option{author\_email}, or \\&
|
---|
1464 | \option{maintainer} and \option{maintainer\_email}}
|
---|
1465 | \lineii{Copyright}{\option{licence}}
|
---|
1466 | \lineii{Url}{\option{url}}
|
---|
1467 | \lineii{\%description (section)}{\option{long\_description}}
|
---|
1468 | \end{tableii}
|
---|
1469 |
|
---|
1470 | Additionally, there are many options in \file{.spec} files that don't have
|
---|
1471 | corresponding options in the setup script. Most of these are handled
|
---|
1472 | through options to the \command{bdist\_rpm} command as follows:
|
---|
1473 |
|
---|
1474 | \begin{tableiii}{l|l|l}{textrm}%
|
---|
1475 | {RPM \file{.spec} file option or section}%
|
---|
1476 | {\command{bdist\_rpm} option}%
|
---|
1477 | {default value}
|
---|
1478 | \lineiii{Release}{\option{release}}{``1''}
|
---|
1479 | \lineiii{Group}{\option{group}}{``Development/Libraries''}
|
---|
1480 | \lineiii{Vendor}{\option{vendor}}{(see above)}
|
---|
1481 | \lineiii{Packager}{\option{packager}}{(none)}
|
---|
1482 | \lineiii{Provides}{\option{provides}}{(none)}
|
---|
1483 | \lineiii{Requires}{\option{requires}}{(none)}
|
---|
1484 | \lineiii{Conflicts}{\option{conflicts}}{(none)}
|
---|
1485 | \lineiii{Obsoletes}{\option{obsoletes}}{(none)}
|
---|
1486 | \lineiii{Distribution}{\option{distribution\_name}}{(none)}
|
---|
1487 | \lineiii{BuildRequires}{\option{build\_requires}}{(none)}
|
---|
1488 | \lineiii{Icon}{\option{icon}}{(none)}
|
---|
1489 | \end{tableiii}
|
---|
1490 |
|
---|
1491 | Obviously, supplying even a few of these options on the command-line
|
---|
1492 | would be tedious and error-prone, so it's usually best to put them in
|
---|
1493 | the setup configuration file, \file{setup.cfg}---see
|
---|
1494 | section~\ref{setup-config}. If you distribute or package many Python
|
---|
1495 | module distributions, you might want to put options that apply to all of
|
---|
1496 | them in your personal Distutils configuration file
|
---|
1497 | (\file{\textasciitilde/.pydistutils.cfg}).
|
---|
1498 |
|
---|
1499 | There are three steps to building a binary RPM package, all of which are
|
---|
1500 | handled automatically by the Distutils:
|
---|
1501 |
|
---|
1502 | \begin{enumerate}
|
---|
1503 | \item create a \file{.spec} file, which describes the package (analogous
|
---|
1504 | to the Distutils setup script; in fact, much of the information in the
|
---|
1505 | setup script winds up in the \file{.spec} file)
|
---|
1506 | \item create the source RPM
|
---|
1507 | \item create the ``binary'' RPM (which may or may not contain binary
|
---|
1508 | code, depending on whether your module distribution contains Python
|
---|
1509 | extensions)
|
---|
1510 | \end{enumerate}
|
---|
1511 |
|
---|
1512 | Normally, RPM bundles the last two steps together; when you use the
|
---|
1513 | Distutils, all three steps are typically bundled together.
|
---|
1514 |
|
---|
1515 | If you wish, you can separate these three steps. You can use the
|
---|
1516 | \longprogramopt{spec-only} option to make \command{bdist_rpm} just
|
---|
1517 | create the \file{.spec} file and exit; in this case, the \file{.spec}
|
---|
1518 | file will be written to the ``distribution directory''---normally
|
---|
1519 | \file{dist/}, but customizable with the \longprogramopt{dist-dir}
|
---|
1520 | option. (Normally, the \file{.spec} file winds up deep in the ``build
|
---|
1521 | tree,'' in a temporary directory created by \command{bdist_rpm}.)
|
---|
1522 |
|
---|
1523 | % \XXX{this isn't implemented yet---is it needed?!}
|
---|
1524 | % You can also specify a custom \file{.spec} file with the
|
---|
1525 | % \longprogramopt{spec-file} option; used in conjunction with
|
---|
1526 | % \longprogramopt{spec-only}, this gives you an opportunity to customize
|
---|
1527 | % the \file{.spec} file manually:
|
---|
1528 | %
|
---|
1529 | % \ begin{verbatim}
|
---|
1530 | % > python setup.py bdist_rpm --spec-only
|
---|
1531 | % # ...edit dist/FooBar-1.0.spec
|
---|
1532 | % > python setup.py bdist_rpm --spec-file=dist/FooBar-1.0.spec
|
---|
1533 | % \ end{verbatim}
|
---|
1534 | %
|
---|
1535 | % (Although a better way to do this is probably to override the standard
|
---|
1536 | % \command{bdist\_rpm} command with one that writes whatever else you want
|
---|
1537 | % to the \file{.spec} file.)
|
---|
1538 |
|
---|
1539 |
|
---|
1540 | \section{Creating Windows Installers}
|
---|
1541 | \label{creating-wininst}
|
---|
1542 |
|
---|
1543 | Executable installers are the natural format for binary distributions
|
---|
1544 | on Windows. They display a nice graphical user interface, display
|
---|
1545 | some information about the module distribution to be installed taken
|
---|
1546 | from the metadata in the setup script, let the user select a few
|
---|
1547 | options, and start or cancel the installation.
|
---|
1548 |
|
---|
1549 | Since the metadata is taken from the setup script, creating Windows
|
---|
1550 | installers is usually as easy as running:
|
---|
1551 |
|
---|
1552 | \begin{verbatim}
|
---|
1553 | python setup.py bdist_wininst
|
---|
1554 | \end{verbatim}
|
---|
1555 |
|
---|
1556 | or the \command{bdist} command with the \longprogramopt{formats} option:
|
---|
1557 |
|
---|
1558 | \begin{verbatim}
|
---|
1559 | python setup.py bdist --formats=wininst
|
---|
1560 | \end{verbatim}
|
---|
1561 |
|
---|
1562 | If you have a pure module distribution (only containing pure Python
|
---|
1563 | modules and packages), the resulting installer will be version
|
---|
1564 | independent and have a name like \file{foo-1.0.win32.exe}. These
|
---|
1565 | installers can even be created on \UNIX{} or Mac OS platforms.
|
---|
1566 |
|
---|
1567 | If you have a non-pure distribution, the extensions can only be
|
---|
1568 | created on a Windows platform, and will be Python version dependent.
|
---|
1569 | The installer filename will reflect this and now has the form
|
---|
1570 | \file{foo-1.0.win32-py2.0.exe}. You have to create a separate installer
|
---|
1571 | for every Python version you want to support.
|
---|
1572 |
|
---|
1573 | The installer will try to compile pure modules into bytecode after
|
---|
1574 | installation on the target system in normal and optimizing mode. If
|
---|
1575 | you don't want this to happen for some reason, you can run the
|
---|
1576 | \command{bdist_wininst} command with the
|
---|
1577 | \longprogramopt{no-target-compile} and/or the
|
---|
1578 | \longprogramopt{no-target-optimize} option.
|
---|
1579 |
|
---|
1580 | By default the installer will display the cool ``Python Powered'' logo
|
---|
1581 | when it is run, but you can also supply your own bitmap which must be
|
---|
1582 | a Windows \file{.bmp} file with the \longprogramopt{bitmap} option.
|
---|
1583 |
|
---|
1584 | The installer will also display a large title on the desktop
|
---|
1585 | background window when it is run, which is constructed from the name
|
---|
1586 | of your distribution and the version number. This can be changed to
|
---|
1587 | another text by using the \longprogramopt{title} option.
|
---|
1588 |
|
---|
1589 | The installer file will be written to the ``distribution directory''
|
---|
1590 | --- normally \file{dist/}, but customizable with the
|
---|
1591 | \longprogramopt{dist-dir} option.
|
---|
1592 |
|
---|
1593 | \subsection{The Postinstallation script}
|
---|
1594 | \label{postinstallation-script}
|
---|
1595 |
|
---|
1596 | Starting with Python 2.3, a postinstallation script can be specified
|
---|
1597 | which the \longprogramopt{install-script} option. The basename of the
|
---|
1598 | script must be specified, and the script filename must also be listed
|
---|
1599 | in the scripts argument to the setup function.
|
---|
1600 |
|
---|
1601 | This script will be run at installation time on the target system
|
---|
1602 | after all the files have been copied, with \code{argv[1]} set to
|
---|
1603 | \programopt{-install}, and again at uninstallation time before the
|
---|
1604 | files are removed with \code{argv[1]} set to \programopt{-remove}.
|
---|
1605 |
|
---|
1606 | The installation script runs embedded in the windows installer, every
|
---|
1607 | output (\code{sys.stdout}, \code{sys.stderr}) is redirected into a
|
---|
1608 | buffer and will be displayed in the GUI after the script has finished.
|
---|
1609 |
|
---|
1610 | Some functions especially useful in this context are available as
|
---|
1611 | additional built-in functions in the installation script.
|
---|
1612 |
|
---|
1613 | \begin{funcdesc}{directory_created}{path}
|
---|
1614 | \funcline{file_created}{path}
|
---|
1615 | These functions should be called when a directory or file is created
|
---|
1616 | by the postinstall script at installation time. It will register
|
---|
1617 | \var{path} with the uninstaller, so that it will be removed when the
|
---|
1618 | distribution is uninstalled. To be safe, directories are only removed
|
---|
1619 | if they are empty.
|
---|
1620 | \end{funcdesc}
|
---|
1621 |
|
---|
1622 | \begin{funcdesc}{get_special_folder_path}{csidl_string}
|
---|
1623 | This function can be used to retrieve special folder locations on
|
---|
1624 | Windows like the Start Menu or the Desktop. It returns the full
|
---|
1625 | path to the folder. \var{csidl_string} must be one of the following
|
---|
1626 | strings:
|
---|
1627 |
|
---|
1628 | \begin{verbatim}
|
---|
1629 | "CSIDL_APPDATA"
|
---|
1630 |
|
---|
1631 | "CSIDL_COMMON_STARTMENU"
|
---|
1632 | "CSIDL_STARTMENU"
|
---|
1633 |
|
---|
1634 | "CSIDL_COMMON_DESKTOPDIRECTORY"
|
---|
1635 | "CSIDL_DESKTOPDIRECTORY"
|
---|
1636 |
|
---|
1637 | "CSIDL_COMMON_STARTUP"
|
---|
1638 | "CSIDL_STARTUP"
|
---|
1639 |
|
---|
1640 | "CSIDL_COMMON_PROGRAMS"
|
---|
1641 | "CSIDL_PROGRAMS"
|
---|
1642 |
|
---|
1643 | "CSIDL_FONTS"
|
---|
1644 | \end{verbatim}
|
---|
1645 |
|
---|
1646 | If the folder cannot be retrieved, \exception{OSError} is raised.
|
---|
1647 |
|
---|
1648 | Which folders are available depends on the exact Windows version,
|
---|
1649 | and probably also the configuration. For details refer to
|
---|
1650 | Microsoft's documentation of the
|
---|
1651 | \cfunction{SHGetSpecialFolderPath()} function.
|
---|
1652 | \end{funcdesc}
|
---|
1653 |
|
---|
1654 | \begin{funcdesc}{create_shortcut}{target, description,
|
---|
1655 | filename\optional{,
|
---|
1656 | arguments\optional{,
|
---|
1657 | workdir\optional{,
|
---|
1658 | iconpath\optional{, iconindex}}}}}
|
---|
1659 | This function creates a shortcut.
|
---|
1660 | \var{target} is the path to the program to be started by the shortcut.
|
---|
1661 | \var{description} is the description of the shortcut.
|
---|
1662 | \var{filename} is the title of the shortcut that the user will see.
|
---|
1663 | \var{arguments} specifies the command line arguments, if any.
|
---|
1664 | \var{workdir} is the working directory for the program.
|
---|
1665 | \var{iconpath} is the file containing the icon for the shortcut,
|
---|
1666 | and \var{iconindex} is the index of the icon in the file
|
---|
1667 | \var{iconpath}. Again, for details consult the Microsoft
|
---|
1668 | documentation for the \class{IShellLink} interface.
|
---|
1669 | \end{funcdesc}
|
---|
1670 |
|
---|
1671 | \chapter{Registering with the Package Index}
|
---|
1672 | \label{package-index}
|
---|
1673 |
|
---|
1674 | The Python Package Index (PyPI) holds meta-data describing distributions
|
---|
1675 | packaged with distutils. The distutils command \command{register} is
|
---|
1676 | used to submit your distribution's meta-data to the index. It is invoked
|
---|
1677 | as follows:
|
---|
1678 |
|
---|
1679 | \begin{verbatim}
|
---|
1680 | python setup.py register
|
---|
1681 | \end{verbatim}
|
---|
1682 |
|
---|
1683 | Distutils will respond with the following prompt:
|
---|
1684 |
|
---|
1685 | \begin{verbatim}
|
---|
1686 | running register
|
---|
1687 | We need to know who you are, so please choose either:
|
---|
1688 | 1. use your existing login,
|
---|
1689 | 2. register as a new user,
|
---|
1690 | 3. have the server generate a new password for you (and email it to you), or
|
---|
1691 | 4. quit
|
---|
1692 | Your selection [default 1]:
|
---|
1693 | \end{verbatim}
|
---|
1694 |
|
---|
1695 | \noindent Note: if your username and password are saved locally, you will
|
---|
1696 | not see this menu.
|
---|
1697 |
|
---|
1698 | If you have not registered with PyPI, then you will need to do so now. You
|
---|
1699 | should choose option 2, and enter your details as required. Soon after
|
---|
1700 | submitting your details, you will receive an email which will be used to
|
---|
1701 | confirm your registration.
|
---|
1702 |
|
---|
1703 | Once you are registered, you may choose option 1 from the menu. You will
|
---|
1704 | be prompted for your PyPI username and password, and \command{register}
|
---|
1705 | will then submit your meta-data to the index.
|
---|
1706 |
|
---|
1707 | You may submit any number of versions of your distribution to the index. If
|
---|
1708 | you alter the meta-data for a particular version, you may submit it again
|
---|
1709 | and the index will be updated.
|
---|
1710 |
|
---|
1711 | PyPI holds a record for each (name, version) combination submitted. The
|
---|
1712 | first user to submit information for a given name is designated the Owner
|
---|
1713 | of that name. They may submit changes through the \command{register}
|
---|
1714 | command or through the web interface. They may also designate other users
|
---|
1715 | as Owners or Maintainers. Maintainers may edit the package information, but
|
---|
1716 | not designate other Owners or Maintainers.
|
---|
1717 |
|
---|
1718 | By default PyPI will list all versions of a given package. To hide certain
|
---|
1719 | versions, the Hidden property should be set to yes. This must be edited
|
---|
1720 | through the web interface.
|
---|
1721 |
|
---|
1722 | \section{The .pypirc file}
|
---|
1723 | \label{pypirc}
|
---|
1724 |
|
---|
1725 | The format of the \file{.pypirc} file is formated as follows:
|
---|
1726 |
|
---|
1727 | \begin{verbatim}
|
---|
1728 | [server-login]
|
---|
1729 | repository: <repository-url>
|
---|
1730 | username: <username>
|
---|
1731 | password: <password>
|
---|
1732 | \end{verbatim}
|
---|
1733 |
|
---|
1734 | \var{repository} can be ommitted and defaults to
|
---|
1735 | \code{http://www.python.org/pypi}.
|
---|
1736 |
|
---|
1737 | \chapter{Uploading Packages to the Package Index}
|
---|
1738 | \label{package-upload}
|
---|
1739 |
|
---|
1740 | \versionadded{2.5}
|
---|
1741 |
|
---|
1742 | The Python Package Index (PyPI) not only stores the package info, but also
|
---|
1743 | the package data if the author of the package wishes to. The distutils
|
---|
1744 | command \command{upload} pushes the distribution files to PyPI.
|
---|
1745 |
|
---|
1746 | The command is invoked immediately after building one or more distribution
|
---|
1747 | files. For example, the command
|
---|
1748 |
|
---|
1749 | \begin{verbatim}
|
---|
1750 | python setup.py sdist bdist_wininst upload
|
---|
1751 | \end{verbatim}
|
---|
1752 |
|
---|
1753 | will cause the source distribution and the Windows installer to be
|
---|
1754 | uploaded to PyPI. Note that these will be uploaded even if they are
|
---|
1755 | built using an earlier invocation of \file{setup.py}, but that only
|
---|
1756 | distributions named on the command line for the invocation including
|
---|
1757 | the \command{upload} command are uploaded.
|
---|
1758 |
|
---|
1759 | The \command{upload} command uses the username, password, and repository
|
---|
1760 | URL from the \file{\$HOME/.pypirc} file (see section~\ref{pypirc} for
|
---|
1761 | more on this file).
|
---|
1762 |
|
---|
1763 | You can use the \longprogramopt{sign} option to tell \command{upload} to
|
---|
1764 | sign each uploaded file using GPG (GNU Privacy Guard). The
|
---|
1765 | \program{gpg} program must be available for execution on the system
|
---|
1766 | \envvar{PATH}. You can also specify which key to use for signing
|
---|
1767 | using the \longprogramopt{identity=\var{name}} option.
|
---|
1768 |
|
---|
1769 | Other \command{upload} options include
|
---|
1770 | \longprogramopt{repository=\var{url}} (which lets you override the
|
---|
1771 | repository setting from \file{\$HOME/.pypirc}), and
|
---|
1772 | \longprogramopt{show-response} (which displays the full response text
|
---|
1773 | from the PyPI server for help in debugging upload problems).
|
---|
1774 |
|
---|
1775 | \chapter{Examples}
|
---|
1776 | \label{examples}
|
---|
1777 |
|
---|
1778 | This chapter provides a number of basic examples to help get started
|
---|
1779 | with distutils. Additional information about using distutils can be
|
---|
1780 | found in the Distutils Cookbook.
|
---|
1781 |
|
---|
1782 | \begin{seealso}
|
---|
1783 | \seelink{http://www.python.org/cgi-bin/moinmoin/DistutilsCookbook}
|
---|
1784 | {Distutils Cookbook}
|
---|
1785 | {Collection of recipes showing how to achieve more control
|
---|
1786 | over distutils.}
|
---|
1787 | \end{seealso}
|
---|
1788 |
|
---|
1789 |
|
---|
1790 | \section{Pure Python distribution (by module)}
|
---|
1791 | \label{pure-mod}
|
---|
1792 |
|
---|
1793 | If you're just distributing a couple of modules, especially if they
|
---|
1794 | don't live in a particular package, you can specify them individually
|
---|
1795 | using the \option{py\_modules} option in the setup script.
|
---|
1796 |
|
---|
1797 | In the simplest case, you'll have two files to worry about: a setup
|
---|
1798 | script and the single module you're distributing, \file{foo.py} in this
|
---|
1799 | example:
|
---|
1800 | \begin{verbatim}
|
---|
1801 | <root>/
|
---|
1802 | setup.py
|
---|
1803 | foo.py
|
---|
1804 | \end{verbatim}
|
---|
1805 | (In all diagrams in this section, \verb|<root>| will refer to the
|
---|
1806 | distribution root directory.) A minimal setup script to describe this
|
---|
1807 | situation would be:
|
---|
1808 | \begin{verbatim}
|
---|
1809 | from distutils.core import setup
|
---|
1810 | setup(name='foo',
|
---|
1811 | version='1.0',
|
---|
1812 | py_modules=['foo'],
|
---|
1813 | )
|
---|
1814 | \end{verbatim}
|
---|
1815 | Note that the name of the distribution is specified independently with
|
---|
1816 | the \option{name} option, and there's no rule that says it has to be the
|
---|
1817 | same as the name of the sole module in the distribution (although that's
|
---|
1818 | probably a good convention to follow). However, the distribution name
|
---|
1819 | is used to generate filenames, so you should stick to letters, digits,
|
---|
1820 | underscores, and hyphens.
|
---|
1821 |
|
---|
1822 | Since \option{py\_modules} is a list, you can of course specify multiple
|
---|
1823 | modules, eg. if you're distributing modules \module{foo} and
|
---|
1824 | \module{bar}, your setup might look like this:
|
---|
1825 | \begin{verbatim}
|
---|
1826 | <root>/
|
---|
1827 | setup.py
|
---|
1828 | foo.py
|
---|
1829 | bar.py
|
---|
1830 | \end{verbatim}
|
---|
1831 | and the setup script might be
|
---|
1832 | \begin{verbatim}
|
---|
1833 | from distutils.core import setup
|
---|
1834 | setup(name='foobar',
|
---|
1835 | version='1.0',
|
---|
1836 | py_modules=['foo', 'bar'],
|
---|
1837 | )
|
---|
1838 | \end{verbatim}
|
---|
1839 |
|
---|
1840 | You can put module source files into another directory, but if you have
|
---|
1841 | enough modules to do that, it's probably easier to specify modules by
|
---|
1842 | package rather than listing them individually.
|
---|
1843 |
|
---|
1844 |
|
---|
1845 | \section{Pure Python distribution (by package)}
|
---|
1846 | \label{pure-pkg}
|
---|
1847 |
|
---|
1848 | If you have more than a couple of modules to distribute, especially if
|
---|
1849 | they are in multiple packages, it's probably easier to specify whole
|
---|
1850 | packages rather than individual modules. This works even if your
|
---|
1851 | modules are not in a package; you can just tell the Distutils to process
|
---|
1852 | modules from the root package, and that works the same as any other
|
---|
1853 | package (except that you don't have to have an \file{\_\_init\_\_.py}
|
---|
1854 | file).
|
---|
1855 |
|
---|
1856 | The setup script from the last example could also be written as
|
---|
1857 | \begin{verbatim}
|
---|
1858 | from distutils.core import setup
|
---|
1859 | setup(name='foobar',
|
---|
1860 | version='1.0',
|
---|
1861 | packages=[''],
|
---|
1862 | )
|
---|
1863 | \end{verbatim}
|
---|
1864 | (The empty string stands for the root package.)
|
---|
1865 |
|
---|
1866 | If those two files are moved into a subdirectory, but remain in the root
|
---|
1867 | package, e.g.:
|
---|
1868 | \begin{verbatim}
|
---|
1869 | <root>/
|
---|
1870 | setup.py
|
---|
1871 | src/ foo.py
|
---|
1872 | bar.py
|
---|
1873 | \end{verbatim}
|
---|
1874 | then you would still specify the root package, but you have to tell the
|
---|
1875 | Distutils where source files in the root package live:
|
---|
1876 | \begin{verbatim}
|
---|
1877 | from distutils.core import setup
|
---|
1878 | setup(name='foobar',
|
---|
1879 | version='1.0',
|
---|
1880 | package_dir={'': 'src'},
|
---|
1881 | packages=[''],
|
---|
1882 | )
|
---|
1883 | \end{verbatim}
|
---|
1884 |
|
---|
1885 | More typically, though, you will want to distribute multiple modules in
|
---|
1886 | the same package (or in sub-packages). For example, if the \module{foo}
|
---|
1887 | and \module{bar} modules belong in package \module{foobar}, one way to
|
---|
1888 | layout your source tree is
|
---|
1889 | \begin{verbatim}
|
---|
1890 | <root>/
|
---|
1891 | setup.py
|
---|
1892 | foobar/
|
---|
1893 | __init__.py
|
---|
1894 | foo.py
|
---|
1895 | bar.py
|
---|
1896 | \end{verbatim}
|
---|
1897 | This is in fact the default layout expected by the Distutils, and the
|
---|
1898 | one that requires the least work to describe in your setup script:
|
---|
1899 | \begin{verbatim}
|
---|
1900 | from distutils.core import setup
|
---|
1901 | setup(name='foobar',
|
---|
1902 | version='1.0',
|
---|
1903 | packages=['foobar'],
|
---|
1904 | )
|
---|
1905 | \end{verbatim}
|
---|
1906 |
|
---|
1907 | If you want to put modules in directories not named for their package,
|
---|
1908 | then you need to use the \option{package\_dir} option again. For
|
---|
1909 | example, if the \file{src} directory holds modules in the
|
---|
1910 | \module{foobar} package:
|
---|
1911 | \begin{verbatim}
|
---|
1912 | <root>/
|
---|
1913 | setup.py
|
---|
1914 | src/
|
---|
1915 | __init__.py
|
---|
1916 | foo.py
|
---|
1917 | bar.py
|
---|
1918 | \end{verbatim}
|
---|
1919 | an appropriate setup script would be
|
---|
1920 | \begin{verbatim}
|
---|
1921 | from distutils.core import setup
|
---|
1922 | setup(name='foobar',
|
---|
1923 | version='1.0',
|
---|
1924 | package_dir={'foobar': 'src'},
|
---|
1925 | packages=['foobar'],
|
---|
1926 | )
|
---|
1927 | \end{verbatim}
|
---|
1928 |
|
---|
1929 | Or, you might put modules from your main package right in the
|
---|
1930 | distribution root:
|
---|
1931 | \begin{verbatim}
|
---|
1932 | <root>/
|
---|
1933 | setup.py
|
---|
1934 | __init__.py
|
---|
1935 | foo.py
|
---|
1936 | bar.py
|
---|
1937 | \end{verbatim}
|
---|
1938 | in which case your setup script would be
|
---|
1939 | \begin{verbatim}
|
---|
1940 | from distutils.core import setup
|
---|
1941 | setup(name='foobar',
|
---|
1942 | version='1.0',
|
---|
1943 | package_dir={'foobar': ''},
|
---|
1944 | packages=['foobar'],
|
---|
1945 | )
|
---|
1946 | \end{verbatim}
|
---|
1947 | (The empty string also stands for the current directory.)
|
---|
1948 |
|
---|
1949 | If you have sub-packages, they must be explicitly listed in
|
---|
1950 | \option{packages}, but any entries in \option{package\_dir}
|
---|
1951 | automatically extend to sub-packages. (In other words, the Distutils
|
---|
1952 | does \emph{not} scan your source tree, trying to figure out which
|
---|
1953 | directories correspond to Python packages by looking for
|
---|
1954 | \file{\_\_init\_\_.py} files.) Thus, if the default layout grows a
|
---|
1955 | sub-package:
|
---|
1956 | \begin{verbatim}
|
---|
1957 | <root>/
|
---|
1958 | setup.py
|
---|
1959 | foobar/
|
---|
1960 | __init__.py
|
---|
1961 | foo.py
|
---|
1962 | bar.py
|
---|
1963 | subfoo/
|
---|
1964 | __init__.py
|
---|
1965 | blah.py
|
---|
1966 | \end{verbatim}
|
---|
1967 | then the corresponding setup script would be
|
---|
1968 | \begin{verbatim}
|
---|
1969 | from distutils.core import setup
|
---|
1970 | setup(name='foobar',
|
---|
1971 | version='1.0',
|
---|
1972 | packages=['foobar', 'foobar.subfoo'],
|
---|
1973 | )
|
---|
1974 | \end{verbatim}
|
---|
1975 | (Again, the empty string in \option{package\_dir} stands for the current
|
---|
1976 | directory.)
|
---|
1977 |
|
---|
1978 |
|
---|
1979 | \section{Single extension module}
|
---|
1980 | \label{single-ext}
|
---|
1981 |
|
---|
1982 | Extension modules are specified using the \option{ext\_modules} option.
|
---|
1983 | \option{package\_dir} has no effect on where extension source files are
|
---|
1984 | found; it only affects the source for pure Python modules. The simplest
|
---|
1985 | case, a single extension module in a single C source file, is:
|
---|
1986 | \begin{verbatim}
|
---|
1987 | <root>/
|
---|
1988 | setup.py
|
---|
1989 | foo.c
|
---|
1990 | \end{verbatim}
|
---|
1991 | If the \module{foo} extension belongs in the root package, the setup
|
---|
1992 | script for this could be
|
---|
1993 | \begin{verbatim}
|
---|
1994 | from distutils.core import setup
|
---|
1995 | from distutils.extension import Extension
|
---|
1996 | setup(name='foobar',
|
---|
1997 | version='1.0',
|
---|
1998 | ext_modules=[Extension('foo', ['foo.c'])],
|
---|
1999 | )
|
---|
2000 | \end{verbatim}
|
---|
2001 |
|
---|
2002 | If the extension actually belongs in a package, say \module{foopkg},
|
---|
2003 | then
|
---|
2004 |
|
---|
2005 | With exactly the same source tree layout, this extension can be put in
|
---|
2006 | the \module{foopkg} package simply by changing the name of the
|
---|
2007 | extension:
|
---|
2008 | \begin{verbatim}
|
---|
2009 | from distutils.core import setup
|
---|
2010 | from distutils.extension import Extension
|
---|
2011 | setup(name='foobar',
|
---|
2012 | version='1.0',
|
---|
2013 | ext_modules=[Extension('foopkg.foo', ['foo.c'])],
|
---|
2014 | )
|
---|
2015 | \end{verbatim}
|
---|
2016 |
|
---|
2017 |
|
---|
2018 | %\section{Multiple extension modules}
|
---|
2019 | %\label{multiple-ext}
|
---|
2020 |
|
---|
2021 |
|
---|
2022 | %\section{Putting it all together}
|
---|
2023 |
|
---|
2024 |
|
---|
2025 | \chapter{Extending Distutils \label{extending}}
|
---|
2026 |
|
---|
2027 | Distutils can be extended in various ways. Most extensions take the
|
---|
2028 | form of new commands or replacements for existing commands. New
|
---|
2029 | commands may be written to support new types of platform-specific
|
---|
2030 | packaging, for example, while replacements for existing commands may
|
---|
2031 | be made to modify details of how the command operates on a package.
|
---|
2032 |
|
---|
2033 | Most extensions of the distutils are made within \file{setup.py}
|
---|
2034 | scripts that want to modify existing commands; many simply add a few
|
---|
2035 | file extensions that should be copied into packages in addition to
|
---|
2036 | \file{.py} files as a convenience.
|
---|
2037 |
|
---|
2038 | Most distutils command implementations are subclasses of the
|
---|
2039 | \class{Command} class from \refmodule{distutils.cmd}. New commands
|
---|
2040 | may directly inherit from \class{Command}, while replacements often
|
---|
2041 | derive from \class{Command} indirectly, directly subclassing the
|
---|
2042 | command they are replacing. Commands are required to derive from
|
---|
2043 | \class{Command}.
|
---|
2044 |
|
---|
2045 |
|
---|
2046 | %\section{Extending existing commands}
|
---|
2047 | %\label{extend-existing}
|
---|
2048 |
|
---|
2049 |
|
---|
2050 | %\section{Writing new commands}
|
---|
2051 | %\label{new-commands}
|
---|
2052 |
|
---|
2053 | %\XXX{Would an uninstall command be a good example here?}
|
---|
2054 |
|
---|
2055 | \section{Integrating new commands}
|
---|
2056 |
|
---|
2057 | There are different ways to integrate new command implementations into
|
---|
2058 | distutils. The most difficult is to lobby for the inclusion of the
|
---|
2059 | new features in distutils itself, and wait for (and require) a version
|
---|
2060 | of Python that provides that support. This is really hard for many
|
---|
2061 | reasons.
|
---|
2062 |
|
---|
2063 | The most common, and possibly the most reasonable for most needs, is
|
---|
2064 | to include the new implementations with your \file{setup.py} script,
|
---|
2065 | and cause the \function{distutils.core.setup()} function use them:
|
---|
2066 |
|
---|
2067 | \begin{verbatim}
|
---|
2068 | from distutils.command.build_py import build_py as _build_py
|
---|
2069 | from distutils.core import setup
|
---|
2070 |
|
---|
2071 | class build_py(_build_py):
|
---|
2072 | """Specialized Python source builder."""
|
---|
2073 |
|
---|
2074 | # implement whatever needs to be different...
|
---|
2075 |
|
---|
2076 | setup(cmdclass={'build_py': build_py},
|
---|
2077 | ...)
|
---|
2078 | \end{verbatim}
|
---|
2079 |
|
---|
2080 | This approach is most valuable if the new implementations must be used
|
---|
2081 | to use a particular package, as everyone interested in the package
|
---|
2082 | will need to have the new command implementation.
|
---|
2083 |
|
---|
2084 | Beginning with Python 2.4, a third option is available, intended to
|
---|
2085 | allow new commands to be added which can support existing
|
---|
2086 | \file{setup.py} scripts without requiring modifications to the Python
|
---|
2087 | installation. This is expected to allow third-party extensions to
|
---|
2088 | provide support for additional packaging systems, but the commands can
|
---|
2089 | be used for anything distutils commands can be used for. A new
|
---|
2090 | configuration option, \option{command\_packages} (command-line option
|
---|
2091 | \longprogramopt{command-packages}), can be used to specify additional
|
---|
2092 | packages to be searched for modules implementing commands. Like all
|
---|
2093 | distutils options, this can be specified on the command line or in a
|
---|
2094 | configuration file. This option can only be set in the
|
---|
2095 | \code{[global]} section of a configuration file, or before any
|
---|
2096 | commands on the command line. If set in a configuration file, it can
|
---|
2097 | be overridden from the command line; setting it to an empty string on
|
---|
2098 | the command line causes the default to be used. This should never be
|
---|
2099 | set in a configuration file provided with a package.
|
---|
2100 |
|
---|
2101 | This new option can be used to add any number of packages to the list
|
---|
2102 | of packages searched for command implementations; multiple package
|
---|
2103 | names should be separated by commas. When not specified, the search
|
---|
2104 | is only performed in the \module{distutils.command} package. When
|
---|
2105 | \file{setup.py} is run with the option
|
---|
2106 | \longprogramopt{command-packages} \programopt{distcmds,buildcmds},
|
---|
2107 | however, the packages \module{distutils.command}, \module{distcmds},
|
---|
2108 | and \module{buildcmds} will be searched in that order. New commands
|
---|
2109 | are expected to be implemented in modules of the same name as the
|
---|
2110 | command by classes sharing the same name. Given the example command
|
---|
2111 | line option above, the command \command{bdist\_openpkg} could be
|
---|
2112 | implemented by the class \class{distcmds.bdist_openpkg.bdist_openpkg}
|
---|
2113 | or \class{buildcmds.bdist_openpkg.bdist_openpkg}.
|
---|
2114 |
|
---|
2115 | \section{Adding new distribution types}
|
---|
2116 |
|
---|
2117 | Commands that create distributions (files in the \file{dist/}
|
---|
2118 | directory) need to add \code{(\var{command}, \var{filename})} pairs to
|
---|
2119 | \code{self.distribution.dist_files} so that \command{upload} can
|
---|
2120 | upload it to PyPI. The \var{filename} in the pair contains no path
|
---|
2121 | information, only the name of the file itself. In dry-run mode, pairs
|
---|
2122 | should still be added to represent what would have been created.
|
---|
2123 |
|
---|
2124 | \chapter{Command Reference}
|
---|
2125 | \label{reference}
|
---|
2126 |
|
---|
2127 |
|
---|
2128 | %\section{Building modules: the \protect\command{build} command family}
|
---|
2129 | %\label{build-cmds}
|
---|
2130 |
|
---|
2131 | %\subsubsection{\protect\command{build}}
|
---|
2132 | %\label{build-cmd}
|
---|
2133 |
|
---|
2134 | %\subsubsection{\protect\command{build\_py}}
|
---|
2135 | %\label{build-py-cmd}
|
---|
2136 |
|
---|
2137 | %\subsubsection{\protect\command{build\_ext}}
|
---|
2138 | %\label{build-ext-cmd}
|
---|
2139 |
|
---|
2140 | %\subsubsection{\protect\command{build\_clib}}
|
---|
2141 | %\label{build-clib-cmd}
|
---|
2142 |
|
---|
2143 |
|
---|
2144 | \section{Installing modules: the \protect\command{install} command family}
|
---|
2145 | \label{install-cmd}
|
---|
2146 |
|
---|
2147 | The install command ensures that the build commands have been run and then
|
---|
2148 | runs the subcommands \command{install\_lib},
|
---|
2149 | \command{install\_data} and
|
---|
2150 | \command{install\_scripts}.
|
---|
2151 |
|
---|
2152 | %\subsubsection{\protect\command{install\_lib}}
|
---|
2153 | %\label{install-lib-cmd}
|
---|
2154 |
|
---|
2155 | \subsection{\protect\command{install\_data}}
|
---|
2156 | \label{install-data-cmd}
|
---|
2157 | This command installs all data files provided with the distribution.
|
---|
2158 |
|
---|
2159 | \subsection{\protect\command{install\_scripts}}
|
---|
2160 | \label{install-scripts-cmd}
|
---|
2161 | This command installs all (Python) scripts in the distribution.
|
---|
2162 |
|
---|
2163 |
|
---|
2164 | %\subsection{Cleaning up: the \protect\command{clean} command}
|
---|
2165 | %\label{clean-cmd}
|
---|
2166 |
|
---|
2167 |
|
---|
2168 | \section{Creating a source distribution: the
|
---|
2169 | \protect\command{sdist} command}
|
---|
2170 | \label{sdist-cmd}
|
---|
2171 |
|
---|
2172 |
|
---|
2173 | \XXX{fragment moved down from above: needs context!}
|
---|
2174 |
|
---|
2175 | The manifest template commands are:
|
---|
2176 |
|
---|
2177 | \begin{tableii}{ll}{command}{Command}{Description}
|
---|
2178 | \lineii{include \var{pat1} \var{pat2} ... }
|
---|
2179 | {include all files matching any of the listed patterns}
|
---|
2180 | \lineii{exclude \var{pat1} \var{pat2} ... }
|
---|
2181 | {exclude all files matching any of the listed patterns}
|
---|
2182 | \lineii{recursive-include \var{dir} \var{pat1} \var{pat2} ... }
|
---|
2183 | {include all files under \var{dir} matching any of the listed patterns}
|
---|
2184 | \lineii{recursive-exclude \var{dir} \var{pat1} \var{pat2} ...}
|
---|
2185 | {exclude all files under \var{dir} matching any of the listed patterns}
|
---|
2186 | \lineii{global-include \var{pat1} \var{pat2} ...}
|
---|
2187 | {include all files anywhere in the source tree matching\\&
|
---|
2188 | any of the listed patterns}
|
---|
2189 | \lineii{global-exclude \var{pat1} \var{pat2} ...}
|
---|
2190 | {exclude all files anywhere in the source tree matching\\&
|
---|
2191 | any of the listed patterns}
|
---|
2192 | \lineii{prune \var{dir}}{exclude all files under \var{dir}}
|
---|
2193 | \lineii{graft \var{dir}}{include all files under \var{dir}}
|
---|
2194 | \end{tableii}
|
---|
2195 |
|
---|
2196 | The patterns here are \UNIX-style ``glob'' patterns: \code{*} matches any
|
---|
2197 | sequence of regular filename characters, \code{?} matches any single
|
---|
2198 | regular filename character, and \code{[\var{range}]} matches any of the
|
---|
2199 | characters in \var{range} (e.g., \code{a-z}, \code{a-zA-Z},
|
---|
2200 | \code{a-f0-9\_.}). The definition of ``regular filename character'' is
|
---|
2201 | platform-specific: on \UNIX{} it is anything except slash; on Windows
|
---|
2202 | anything except backslash or colon; on Mac OS 9 anything except colon.
|
---|
2203 |
|
---|
2204 | \XXX{Windows support not there yet}
|
---|
2205 |
|
---|
2206 |
|
---|
2207 | %\section{Creating a built distribution: the
|
---|
2208 | % \protect\command{bdist} command family}
|
---|
2209 | %\label{bdist-cmds}
|
---|
2210 |
|
---|
2211 |
|
---|
2212 | %\subsection{\protect\command{bdist}}
|
---|
2213 |
|
---|
2214 | %\subsection{\protect\command{bdist\_dumb}}
|
---|
2215 |
|
---|
2216 | %\subsection{\protect\command{bdist\_rpm}}
|
---|
2217 |
|
---|
2218 | %\subsection{\protect\command{bdist\_wininst}}
|
---|
2219 |
|
---|
2220 |
|
---|
2221 | \chapter{API Reference \label{api-reference}}
|
---|
2222 |
|
---|
2223 | \section{\module{distutils.core} --- Core Distutils functionality}
|
---|
2224 |
|
---|
2225 | \declaremodule{standard}{distutils.core}
|
---|
2226 | \modulesynopsis{The core Distutils functionality}
|
---|
2227 |
|
---|
2228 | The \module{distutils.core} module is the only module that needs to be
|
---|
2229 | installed to use the Distutils. It provides the \function{setup()} (which
|
---|
2230 | is called from the setup script). Indirectly provides the
|
---|
2231 | \class{distutils.dist.Distribution} and \class{distutils.cmd.Command} class.
|
---|
2232 |
|
---|
2233 | \begin{funcdesc}{setup}{arguments}
|
---|
2234 | The basic do-everything function that does most everything you could ever
|
---|
2235 | ask for from a Distutils method. See XXXXX
|
---|
2236 |
|
---|
2237 | The setup function takes a large number of arguments. These
|
---|
2238 | are laid out in the following table.
|
---|
2239 |
|
---|
2240 | \begin{tableiii}{c|l|l}{argument name}{argument name}{value}{type}
|
---|
2241 | \lineiii{name}{The name of the package}{a string}
|
---|
2242 | \lineiii{version}{The version number of the package}{See \refmodule{distutils.version}}
|
---|
2243 | \lineiii{description}{A single line describing the package}{a string}
|
---|
2244 | \lineiii{long_description}{Longer description of the package}{a string}
|
---|
2245 | \lineiii{author}{The name of the package author}{a string}
|
---|
2246 | \lineiii{author_email}{The email address of the package author}{a string}
|
---|
2247 | \lineiii{maintainer}{The name of the current maintainer, if different from the author}{a string}
|
---|
2248 | \lineiii{maintainer_email}{The email address of the current maintainer, if different from the author}{}
|
---|
2249 | \lineiii{url}{A URL for the package (homepage)}{a URL}
|
---|
2250 | \lineiii{download_url}{A URL to download the package}{a URL}
|
---|
2251 | \lineiii{packages}{A list of Python packages that distutils will manipulate}{a list of strings}
|
---|
2252 | \lineiii{py_modules}{A list of Python modules that distutils will manipulate}{a list of strings}
|
---|
2253 | \lineiii{scripts}{A list of standalone script files to be built and installed}{a list of strings}
|
---|
2254 | \lineiii{ext_modules}{A list of Python extensions to be built}{A list of
|
---|
2255 | instances of \class{distutils.core.Extension}}
|
---|
2256 | \lineiii{classifiers}{A list of categories for the package}{The list of available categorizations is at \url{http://cheeseshop.python.org/pypi?:action=list_classifiers}.}
|
---|
2257 | \lineiii{distclass}{the \class{Distribution} class to use}{A subclass of \class{distutils.core.Distribution}}
|
---|
2258 | % What on earth is the use case for script_name?
|
---|
2259 | \lineiii{script_name}{The name of the setup.py script - defaults to \code{sys.argv[0]}}{a string}
|
---|
2260 | \lineiii{script_args}{Arguments to supply to the setup script}{a list of strings}
|
---|
2261 | \lineiii{options}{default options for the setup script}{a string}
|
---|
2262 | \lineiii{license}{The license for the package}{}
|
---|
2263 | \lineiii{keywords}{Descriptive meta-data. See \pep{314}}{}
|
---|
2264 | \lineiii{platforms}{}{}
|
---|
2265 | \lineiii{cmdclass}{A mapping of command names to \class{Command} subclasses}{a dictionary}
|
---|
2266 | \end{tableiii}
|
---|
2267 |
|
---|
2268 | \end{funcdesc}
|
---|
2269 |
|
---|
2270 | \begin{funcdesc}{run_setup}{script_name\optional{, script_args=\code{None}, stop_after=\code{'run'}}}
|
---|
2271 | Run a setup script in a somewhat controlled environment, and return
|
---|
2272 | the \class{distutils.dist.Distribution} instance that drives things.
|
---|
2273 | This is useful if you need to find out the distribution meta-data
|
---|
2274 | (passed as keyword args from \var{script} to \function{setup()}), or
|
---|
2275 | the contents of the config files or command-line.
|
---|
2276 |
|
---|
2277 | \var{script_name} is a file that will be run with \function{execfile()}
|
---|
2278 | \code{sys.argv[0]} will be replaced with \var{script} for the duration of the
|
---|
2279 | call. \var{script_args} is a list of strings; if supplied,
|
---|
2280 | \code{sys.argv[1:]} will be replaced by \var{script_args} for the duration
|
---|
2281 | of the call.
|
---|
2282 |
|
---|
2283 | \var{stop_after} tells \function{setup()} when to stop processing; possible
|
---|
2284 | values:
|
---|
2285 |
|
---|
2286 | \begin{tableii}{c|l}{value}{value}{description}
|
---|
2287 | \lineii{init}{Stop after the \class{Distribution} instance has been created
|
---|
2288 | and populated with the keyword arguments to \function{setup()}}
|
---|
2289 | \lineii{config}{Stop after config files have been parsed (and their data
|
---|
2290 | stored in the \class{Distribution} instance)}
|
---|
2291 | \lineii{commandline}{Stop after the command-line (\code{sys.argv[1:]} or
|
---|
2292 | \var{script_args}) have been parsed (and the data stored in the
|
---|
2293 | \class{Distribution} instance.)}
|
---|
2294 | \lineii{run}{Stop after all commands have been run (the same as
|
---|
2295 | if \function{setup()} had been called in the usual way). This is the default
|
---|
2296 | value.}
|
---|
2297 | \end{tableii}
|
---|
2298 | \end{funcdesc}
|
---|
2299 |
|
---|
2300 | In addition, the \module{distutils.core} module exposed a number of
|
---|
2301 | classes that live elsewhere.
|
---|
2302 |
|
---|
2303 | \begin{itemize}
|
---|
2304 | \item \class{Extension} from \refmodule{distutils.extension}
|
---|
2305 | \item \class{Command} from \refmodule{distutils.cmd}
|
---|
2306 | \item \class{Distribution} from \refmodule{distutils.dist}
|
---|
2307 | \end{itemize}
|
---|
2308 |
|
---|
2309 | A short description of each of these follows, but see the relevant
|
---|
2310 | module for the full reference.
|
---|
2311 |
|
---|
2312 | \begin{classdesc*}{Extension}
|
---|
2313 |
|
---|
2314 | The Extension class describes a single C or \Cpp extension module in a
|
---|
2315 | setup script. It accepts the following keyword arguments in its
|
---|
2316 | constructor
|
---|
2317 |
|
---|
2318 | \begin{tableiii}{c|l|l}{argument name}{argument name}{value}{type}
|
---|
2319 | \lineiii{name}{the full name of the extension, including any packages
|
---|
2320 | --- ie. \emph{not} a filename or pathname, but Python dotted name}{string}
|
---|
2321 | \lineiii{sources}{list of source filenames, relative to the distribution
|
---|
2322 | root (where the setup script lives), in \UNIX{} form (slash-separated) for
|
---|
2323 | portability. Source files may be C, \Cpp, SWIG (.i), platform-specific
|
---|
2324 | resource files, or whatever else is recognized by the \command{build_ext}
|
---|
2325 | command as source for a Python extension.}{string}
|
---|
2326 | \lineiii{include_dirs}{list of directories to search for C/\Cpp{} header
|
---|
2327 | files (in \UNIX{} form for portability)}{string}
|
---|
2328 | \lineiii{define_macros}{list of macros to define; each macro is defined
|
---|
2329 | using a 2-tuple, where 'value' is either the string to define it to or
|
---|
2330 | \code{None} to define it without a particular value (equivalent of
|
---|
2331 | \code{\#define FOO} in source or \programopt{-DFOO} on \UNIX{} C
|
---|
2332 | compiler command line) }{ (string,string)
|
---|
2333 | tuple or (name,\code{None}) }
|
---|
2334 | \lineiii{undef_macros}{list of macros to undefine explicitly}{string}
|
---|
2335 | \lineiii{library_dirs}{list of directories to search for C/\Cpp{} libraries
|
---|
2336 | at link time }{string}
|
---|
2337 | \lineiii{libraries}{list of library names (not filenames or paths) to
|
---|
2338 | link against }{string}
|
---|
2339 | \lineiii{runtime_library_dirs}{list of directories to search for C/\Cpp{}
|
---|
2340 | libraries at run time (for shared extensions, this is when the extension
|
---|
2341 | is loaded)}{string}
|
---|
2342 | \lineiii{extra_objects}{list of extra files to link with (eg. object
|
---|
2343 | files not implied by 'sources', static library that must be explicitly
|
---|
2344 | specified, binary resource files, etc.)}{string}
|
---|
2345 | \lineiii{extra_compile_args}{any extra platform- and compiler-specific
|
---|
2346 | information to use when compiling the source files in 'sources'. For
|
---|
2347 | platforms and compilers where a command line makes sense, this is
|
---|
2348 | typically a list of command-line arguments, but for other platforms it
|
---|
2349 | could be anything.}{string}
|
---|
2350 | \lineiii{extra_link_args}{any extra platform- and compiler-specific
|
---|
2351 | information to use when linking object files together to create the
|
---|
2352 | extension (or to create a new static Python interpreter). Similar
|
---|
2353 | interpretation as for 'extra_compile_args'.}{string}
|
---|
2354 | \lineiii{export_symbols}{list of symbols to be exported from a shared
|
---|
2355 | extension. Not used on all platforms, and not generally necessary for
|
---|
2356 | Python extensions, which typically export exactly one symbol: \code{init} +
|
---|
2357 | extension_name. }{string}
|
---|
2358 | \lineiii{depends}{list of files that the extension depends on }{string}
|
---|
2359 | \lineiii{language}{extension language (i.e. \code{'c'}, \code{'c++'},
|
---|
2360 | \code{'objc'}). Will be detected from the source extensions if not provided.
|
---|
2361 | }{string}
|
---|
2362 | \end{tableiii}
|
---|
2363 | \end{classdesc*}
|
---|
2364 |
|
---|
2365 | \begin{classdesc*}{Distribution}
|
---|
2366 | A \class{Distribution} describes how to build, install and package up a
|
---|
2367 | Python software package.
|
---|
2368 |
|
---|
2369 | See the \function{setup()} function for a list of keyword arguments accepted
|
---|
2370 | by the Distribution constructor. \function{setup()} creates a Distribution
|
---|
2371 | instance.
|
---|
2372 | \end{classdesc*}
|
---|
2373 |
|
---|
2374 | \begin{classdesc*}{Command}
|
---|
2375 | A \class{Command} class (or rather, an instance of one of its subclasses)
|
---|
2376 | implement a single distutils command.
|
---|
2377 | \end{classdesc*}
|
---|
2378 |
|
---|
2379 |
|
---|
2380 | \section{\module{distutils.ccompiler} --- CCompiler base class}
|
---|
2381 | \declaremodule{standard}{distutils.ccompiler}
|
---|
2382 | \modulesynopsis{Abstract CCompiler class}
|
---|
2383 |
|
---|
2384 | This module provides the abstract base class for the \class{CCompiler}
|
---|
2385 | classes. A \class{CCompiler} instance can be used for all the compile
|
---|
2386 | and link steps needed to build a single project. Methods are provided to
|
---|
2387 | set options for the compiler --- macro definitions, include directories,
|
---|
2388 | link path, libraries and the like.
|
---|
2389 |
|
---|
2390 | This module provides the following functions.
|
---|
2391 |
|
---|
2392 | \begin{funcdesc}{gen_lib_options}{compiler, library_dirs, runtime_library_dirs, libraries}
|
---|
2393 | Generate linker options for searching library directories and
|
---|
2394 | linking with specific libraries. \var{libraries} and \var{library_dirs} are,
|
---|
2395 | respectively, lists of library names (not filenames!) and search
|
---|
2396 | directories. Returns a list of command-line options suitable for use
|
---|
2397 | with some compiler (depending on the two format strings passed in).
|
---|
2398 | \end{funcdesc}
|
---|
2399 |
|
---|
2400 | \begin{funcdesc}{gen_preprocess_options}{macros, include_dirs}
|
---|
2401 | Generate C pre-processor options (\programopt{-D}, \programopt{-U},
|
---|
2402 | \programopt{-I}) as used by at least
|
---|
2403 | two types of compilers: the typical \UNIX{} compiler and Visual \Cpp.
|
---|
2404 | \var{macros} is the usual thing, a list of 1- or 2-tuples, where
|
---|
2405 | \code{(\var{name},)} means undefine (\programopt{-U}) macro \var{name},
|
---|
2406 | and \code{(\var{name}, \var{value})} means define (\programopt{-D})
|
---|
2407 | macro \var{name} to \var{value}. \var{include_dirs} is just a list of
|
---|
2408 | directory names to be added to the header file search path (\programopt{-I}).
|
---|
2409 | Returns a list of command-line options suitable for either \UNIX{} compilers
|
---|
2410 | or Visual \Cpp.
|
---|
2411 | \end{funcdesc}
|
---|
2412 |
|
---|
2413 | \begin{funcdesc}{get_default_compiler}{osname, platform}
|
---|
2414 | Determine the default compiler to use for the given platform.
|
---|
2415 |
|
---|
2416 | \var{osname} should be one of the standard Python OS names (i.e.\ the
|
---|
2417 | ones returned by \code{os.name}) and \var{platform} the common value
|
---|
2418 | returned by \code{sys.platform} for the platform in question.
|
---|
2419 |
|
---|
2420 | The default values are \code{os.name} and \code{sys.platform} in case the
|
---|
2421 | parameters are not given.
|
---|
2422 | \end{funcdesc}
|
---|
2423 |
|
---|
2424 | \begin{funcdesc}{new_compiler}{plat=\code{None}, compiler=\code{None}, verbose=\code{0}, dry_run=\code{0}, force=\code{0}}
|
---|
2425 | Factory function to generate an instance of some CCompiler subclass
|
---|
2426 | for the supplied platform/compiler combination. \var{plat} defaults
|
---|
2427 | to \code{os.name} (eg. \code{'posix'}, \code{'nt'}), and \var{compiler}
|
---|
2428 | defaults to the default compiler for that platform. Currently only
|
---|
2429 | \code{'posix'} and \code{'nt'} are supported, and the default
|
---|
2430 | compilers are ``traditional \UNIX{} interface'' (\class{UnixCCompiler}
|
---|
2431 | class) and Visual \Cpp (\class{MSVCCompiler} class). Note that it's
|
---|
2432 | perfectly possible to ask for a \UNIX{} compiler object under Windows,
|
---|
2433 | and a Microsoft compiler object under \UNIX---if you supply a value
|
---|
2434 | for \var{compiler}, \var{plat} is ignored.
|
---|
2435 | % Is the posix/nt only thing still true? Mac OS X seems to work, and
|
---|
2436 | % returns a UnixCCompiler instance. How to document this... hmm.
|
---|
2437 | \end{funcdesc}
|
---|
2438 |
|
---|
2439 | \begin{funcdesc}{show_compilers}{}
|
---|
2440 | Print list of available compilers (used by the
|
---|
2441 | \longprogramopt{help-compiler} options to \command{build},
|
---|
2442 | \command{build_ext}, \command{build_clib}).
|
---|
2443 | \end{funcdesc}
|
---|
2444 |
|
---|
2445 | \begin{classdesc}{CCompiler}{\optional{verbose=\code{0}, dry_run=\code{0}, force=\code{0}}}
|
---|
2446 |
|
---|
2447 | The abstract base class \class{CCompiler} defines the interface that
|
---|
2448 | must be implemented by real compiler classes. The class also has
|
---|
2449 | some utility methods used by several compiler classes.
|
---|
2450 |
|
---|
2451 | The basic idea behind a compiler abstraction class is that each
|
---|
2452 | instance can be used for all the compile/link steps in building a
|
---|
2453 | single project. Thus, attributes common to all of those compile and
|
---|
2454 | link steps --- include directories, macros to define, libraries to link
|
---|
2455 | against, etc. --- are attributes of the compiler instance. To allow for
|
---|
2456 | variability in how individual files are treated, most of those
|
---|
2457 | attributes may be varied on a per-compilation or per-link basis.
|
---|
2458 |
|
---|
2459 | The constructor for each subclass creates an instance of the Compiler
|
---|
2460 | object. Flags are \var{verbose} (show verbose output), \var{dry_run}
|
---|
2461 | (don't actually execute the steps) and \var{force} (rebuild
|
---|
2462 | everything, regardless of dependencies). All of these flags default to
|
---|
2463 | \code{0} (off). Note that you probably don't want to instantiate
|
---|
2464 | \class{CCompiler} or one of its subclasses directly - use the
|
---|
2465 | \function{distutils.CCompiler.new_compiler()} factory function
|
---|
2466 | instead.
|
---|
2467 |
|
---|
2468 | The following methods allow you to manually alter compiler options for
|
---|
2469 | the instance of the Compiler class.
|
---|
2470 |
|
---|
2471 | \begin{methoddesc}{add_include_dir}{dir}
|
---|
2472 | Add \var{dir} to the list of directories that will be searched for
|
---|
2473 | header files. The compiler is instructed to search directories in
|
---|
2474 | the order in which they are supplied by successive calls to
|
---|
2475 | \method{add_include_dir()}.
|
---|
2476 | \end{methoddesc}
|
---|
2477 |
|
---|
2478 | \begin{methoddesc}{set_include_dirs}{dirs}
|
---|
2479 | Set the list of directories that will be searched to \var{dirs} (a
|
---|
2480 | list of strings). Overrides any preceding calls to
|
---|
2481 | \method{add_include_dir()}; subsequent calls to
|
---|
2482 | \method{add_include_dir()} add to the list passed to
|
---|
2483 | \method{set_include_dirs()}. This does not affect any list of
|
---|
2484 | standard include directories that the compiler may search by default.
|
---|
2485 | \end{methoddesc}
|
---|
2486 |
|
---|
2487 | \begin{methoddesc}{add_library}{libname}
|
---|
2488 |
|
---|
2489 | Add \var{libname} to the list of libraries that will be included in
|
---|
2490 | all links driven by this compiler object. Note that \var{libname}
|
---|
2491 | should *not* be the name of a file containing a library, but the
|
---|
2492 | name of the library itself: the actual filename will be inferred by
|
---|
2493 | the linker, the compiler, or the compiler class (depending on the
|
---|
2494 | platform).
|
---|
2495 |
|
---|
2496 | The linker will be instructed to link against libraries in the
|
---|
2497 | order they were supplied to \method{add_library()} and/or
|
---|
2498 | \method{set_libraries()}. It is perfectly valid to duplicate library
|
---|
2499 | names; the linker will be instructed to link against libraries as
|
---|
2500 | many times as they are mentioned.
|
---|
2501 | \end{methoddesc}
|
---|
2502 |
|
---|
2503 | \begin{methoddesc}{set_libraries}{libnames}
|
---|
2504 | Set the list of libraries to be included in all links driven by
|
---|
2505 | this compiler object to \var{libnames} (a list of strings). This does
|
---|
2506 | not affect any standard system libraries that the linker may
|
---|
2507 | include by default.
|
---|
2508 | \end{methoddesc}
|
---|
2509 |
|
---|
2510 | \begin{methoddesc}{add_library_dir}{dir}
|
---|
2511 | Add \var{dir} to the list of directories that will be searched for
|
---|
2512 | libraries specified to \method{add_library()} and
|
---|
2513 | \method{set_libraries()}. The linker will be instructed to search for
|
---|
2514 | libraries in the order they are supplied to \method{add_library_dir()}
|
---|
2515 | and/or \method{set_library_dirs()}.
|
---|
2516 | \end{methoddesc}
|
---|
2517 |
|
---|
2518 | \begin{methoddesc}{set_library_dirs}{dirs}
|
---|
2519 | Set the list of library search directories to \var{dirs} (a list of
|
---|
2520 | strings). This does not affect any standard library search path
|
---|
2521 | that the linker may search by default.
|
---|
2522 | \end{methoddesc}
|
---|
2523 |
|
---|
2524 | \begin{methoddesc}{add_runtime_library_dir}{dir}
|
---|
2525 | Add \var{dir} to the list of directories that will be searched for
|
---|
2526 | shared libraries at runtime.
|
---|
2527 | \end{methoddesc}
|
---|
2528 |
|
---|
2529 | \begin{methoddesc}{set_runtime_library_dirs}{dirs}
|
---|
2530 | Set the list of directories to search for shared libraries at
|
---|
2531 | runtime to \var{dirs} (a list of strings). This does not affect any
|
---|
2532 | standard search path that the runtime linker may search by
|
---|
2533 | default.
|
---|
2534 | \end{methoddesc}
|
---|
2535 |
|
---|
2536 | \begin{methoddesc}{define_macro}{name\optional{, value=\code{None}}}
|
---|
2537 | Define a preprocessor macro for all compilations driven by this
|
---|
2538 | compiler object. The optional parameter \var{value} should be a
|
---|
2539 | string; if it is not supplied, then the macro will be defined
|
---|
2540 | without an explicit value and the exact outcome depends on the
|
---|
2541 | compiler used (XXX true? does ANSI say anything about this?)
|
---|
2542 | \end{methoddesc}
|
---|
2543 |
|
---|
2544 | \begin{methoddesc}{undefine_macro}{name}
|
---|
2545 | Undefine a preprocessor macro for all compilations driven by
|
---|
2546 | this compiler object. If the same macro is defined by
|
---|
2547 | \method{define_macro()} and undefined by \method{undefine_macro()}
|
---|
2548 | the last call takes precedence (including multiple redefinitions or
|
---|
2549 | undefinitions). If the macro is redefined/undefined on a
|
---|
2550 | per-compilation basis (ie. in the call to \method{compile()}), then that
|
---|
2551 | takes precedence.
|
---|
2552 | \end{methoddesc}
|
---|
2553 |
|
---|
2554 | \begin{methoddesc}{add_link_object}{object}
|
---|
2555 | Add \var{object} to the list of object files (or analogues, such as
|
---|
2556 | explicitly named library files or the output of ``resource
|
---|
2557 | compilers'') to be included in every link driven by this compiler
|
---|
2558 | object.
|
---|
2559 | \end{methoddesc}
|
---|
2560 |
|
---|
2561 | \begin{methoddesc}{set_link_objects}{objects}
|
---|
2562 | Set the list of object files (or analogues) to be included in
|
---|
2563 | every link to \var{objects}. This does not affect any standard object
|
---|
2564 | files that the linker may include by default (such as system
|
---|
2565 | libraries).
|
---|
2566 | \end{methoddesc}
|
---|
2567 |
|
---|
2568 | The following methods implement methods for autodetection of compiler
|
---|
2569 | options, providing some functionality similar to GNU \program{autoconf}.
|
---|
2570 |
|
---|
2571 | \begin{methoddesc}{detect_language}{sources}
|
---|
2572 | Detect the language of a given file, or list of files. Uses the
|
---|
2573 | instance attributes \member{language_map} (a dictionary), and
|
---|
2574 | \member{language_order} (a list) to do the job.
|
---|
2575 | \end{methoddesc}
|
---|
2576 |
|
---|
2577 | \begin{methoddesc}{find_library_file}{dirs, lib\optional{, debug=\code{0}}}
|
---|
2578 | Search the specified list of directories for a static or shared
|
---|
2579 | library file \var{lib} and return the full path to that file. If
|
---|
2580 | \var{debug} is true, look for a debugging version (if that makes sense on
|
---|
2581 | the current platform). Return \code{None} if \var{lib} wasn't found in any of
|
---|
2582 | the specified directories.
|
---|
2583 | \end{methoddesc}
|
---|
2584 |
|
---|
2585 | \begin{methoddesc}{has_function}{funcname \optional{, includes=\code{None}, include_dirs=\code{None}, libraries=\code{None}, library_dirs=\code{None}}}
|
---|
2586 | Return a boolean indicating whether \var{funcname} is supported on
|
---|
2587 | the current platform. The optional arguments can be used to
|
---|
2588 | augment the compilation environment by providing additional include
|
---|
2589 | files and paths and libraries and paths.
|
---|
2590 | \end{methoddesc}
|
---|
2591 |
|
---|
2592 | \begin{methoddesc}{library_dir_option}{dir}
|
---|
2593 | Return the compiler option to add \var{dir} to the list of
|
---|
2594 | directories searched for libraries.
|
---|
2595 | \end{methoddesc}
|
---|
2596 |
|
---|
2597 | \begin{methoddesc}{library_option}{lib}
|
---|
2598 | Return the compiler option to add \var{dir} to the list of libraries
|
---|
2599 | linked into the shared library or executable.
|
---|
2600 | \end{methoddesc}
|
---|
2601 |
|
---|
2602 | \begin{methoddesc}{runtime_library_dir_option}{dir}
|
---|
2603 | Return the compiler option to add \var{dir} to the list of
|
---|
2604 | directories searched for runtime libraries.
|
---|
2605 | \end{methoddesc}
|
---|
2606 |
|
---|
2607 | \begin{methoddesc}{set_executables}{**args}
|
---|
2608 | Define the executables (and options for them) that will be run
|
---|
2609 | to perform the various stages of compilation. The exact set of
|
---|
2610 | executables that may be specified here depends on the compiler
|
---|
2611 | class (via the 'executables' class attribute), but most will have:
|
---|
2612 |
|
---|
2613 | \begin{tableii}{l|l}{attribute}{attribute}{description}
|
---|
2614 | \lineii{compiler}{the C/\Cpp{} compiler}
|
---|
2615 | \lineii{linker_so}{linker used to create shared objects and libraries}
|
---|
2616 | \lineii{linker_exe}{linker used to create binary executables}
|
---|
2617 | \lineii{archiver}{static library creator}
|
---|
2618 | \end{tableii}
|
---|
2619 |
|
---|
2620 | On platforms with a command-line (\UNIX, DOS/Windows), each of these
|
---|
2621 | is a string that will be split into executable name and (optional)
|
---|
2622 | list of arguments. (Splitting the string is done similarly to how
|
---|
2623 | \UNIX{} shells operate: words are delimited by spaces, but quotes and
|
---|
2624 | backslashes can override this. See
|
---|
2625 | \function{distutils.util.split_quoted()}.)
|
---|
2626 | \end{methoddesc}
|
---|
2627 |
|
---|
2628 | The following methods invoke stages in the build process.
|
---|
2629 |
|
---|
2630 | \begin{methoddesc}{compile}{sources\optional{, output_dir=\code{None}, macros=\code{None}, include_dirs=\code{None}, debug=\code{0}, extra_preargs=\code{None}, extra_postargs=\code{None}, depends=\code{None}}}
|
---|
2631 | Compile one or more source files. Generates object files (e.g.
|
---|
2632 | transforms a \file{.c} file to a \file{.o} file.)
|
---|
2633 |
|
---|
2634 | \var{sources} must be a list of filenames, most likely C/\Cpp
|
---|
2635 | files, but in reality anything that can be handled by a
|
---|
2636 | particular compiler and compiler class (eg. \class{MSVCCompiler} can
|
---|
2637 | handle resource files in \var{sources}). Return a list of object
|
---|
2638 | filenames, one per source filename in \var{sources}. Depending on
|
---|
2639 | the implementation, not all source files will necessarily be
|
---|
2640 | compiled, but all corresponding object filenames will be
|
---|
2641 | returned.
|
---|
2642 |
|
---|
2643 | If \var{output_dir} is given, object files will be put under it, while
|
---|
2644 | retaining their original path component. That is, \file{foo/bar.c}
|
---|
2645 | normally compiles to \file{foo/bar.o} (for a \UNIX{} implementation); if
|
---|
2646 | \var{output_dir} is \var{build}, then it would compile to
|
---|
2647 | \file{build/foo/bar.o}.
|
---|
2648 |
|
---|
2649 | \var{macros}, if given, must be a list of macro definitions. A macro
|
---|
2650 | definition is either a \code{(\var{name}, \var{value})} 2-tuple or a
|
---|
2651 | \code{(\var{name},)} 1-tuple.
|
---|
2652 | The former defines a macro; if the value is \code{None}, the macro is
|
---|
2653 | defined without an explicit value. The 1-tuple case undefines a
|
---|
2654 | macro. Later definitions/redefinitions/undefinitions take
|
---|
2655 | precedence.
|
---|
2656 |
|
---|
2657 | \var{include_dirs}, if given, must be a list of strings, the
|
---|
2658 | directories to add to the default include file search path for this
|
---|
2659 | compilation only.
|
---|
2660 |
|
---|
2661 | \var{debug} is a boolean; if true, the compiler will be instructed to
|
---|
2662 | output debug symbols in (or alongside) the object file(s).
|
---|
2663 |
|
---|
2664 | \var{extra_preargs} and \var{extra_postargs} are implementation-dependent.
|
---|
2665 | On platforms that have the notion of a command-line (e.g. \UNIX,
|
---|
2666 | DOS/Windows), they are most likely lists of strings: extra
|
---|
2667 | command-line arguments to prepend/append to the compiler command
|
---|
2668 | line. On other platforms, consult the implementation class
|
---|
2669 | documentation. In any event, they are intended as an escape hatch
|
---|
2670 | for those occasions when the abstract compiler framework doesn't
|
---|
2671 | cut the mustard.
|
---|
2672 |
|
---|
2673 | \var{depends}, if given, is a list of filenames that all targets
|
---|
2674 | depend on. If a source file is older than any file in
|
---|
2675 | depends, then the source file will be recompiled. This
|
---|
2676 | supports dependency tracking, but only at a coarse
|
---|
2677 | granularity.
|
---|
2678 |
|
---|
2679 | Raises \exception{CompileError} on failure.
|
---|
2680 | \end{methoddesc}
|
---|
2681 |
|
---|
2682 | \begin{methoddesc}{create_static_lib}{objects, output_libname\optional{, output_dir=\code{None}, debug=\code{0}, target_lang=\code{None}}}
|
---|
2683 | Link a bunch of stuff together to create a static library file.
|
---|
2684 | The ``bunch of stuff'' consists of the list of object files supplied
|
---|
2685 | as \var{objects}, the extra object files supplied to
|
---|
2686 | \method{add_link_object()} and/or \method{set_link_objects()}, the libraries
|
---|
2687 | supplied to \method{add_library()} and/or \method{set_libraries()}, and the
|
---|
2688 | libraries supplied as \var{libraries} (if any).
|
---|
2689 |
|
---|
2690 | \var{output_libname} should be a library name, not a filename; the
|
---|
2691 | filename will be inferred from the library name. \var{output_dir} is
|
---|
2692 | the directory where the library file will be put. XXX defaults to what?
|
---|
2693 |
|
---|
2694 | \var{debug} is a boolean; if true, debugging information will be
|
---|
2695 | included in the library (note that on most platforms, it is the
|
---|
2696 | compile step where this matters: the \var{debug} flag is included here
|
---|
2697 | just for consistency).
|
---|
2698 |
|
---|
2699 | \var{target_lang} is the target language for which the given objects
|
---|
2700 | are being compiled. This allows specific linkage time treatment of
|
---|
2701 | certain languages.
|
---|
2702 |
|
---|
2703 | Raises \exception{LibError} on failure.
|
---|
2704 | \end{methoddesc}
|
---|
2705 |
|
---|
2706 | \begin{methoddesc}{link}{target_desc, objects, output_filename\optional{, output_dir=\code{None}, libraries=\code{None}, library_dirs=\code{None}, runtime_library_dirs=\code{None}, export_symbols=\code{None}, debug=\code{0}, extra_preargs=\code{None}, extra_postargs=\code{None}, build_temp=\code{None}, target_lang=\code{None}}}
|
---|
2707 | Link a bunch of stuff together to create an executable or
|
---|
2708 | shared library file.
|
---|
2709 |
|
---|
2710 | The ``bunch of stuff'' consists of the list of object files supplied
|
---|
2711 | as \var{objects}. \var{output_filename} should be a filename. If
|
---|
2712 | \var{output_dir} is supplied, \var{output_filename} is relative to it
|
---|
2713 | (i.e. \var{output_filename} can provide directory components if
|
---|
2714 | needed).
|
---|
2715 |
|
---|
2716 | \var{libraries} is a list of libraries to link against. These are
|
---|
2717 | library names, not filenames, since they're translated into
|
---|
2718 | filenames in a platform-specific way (eg. \var{foo} becomes \file{libfoo.a}
|
---|
2719 | on \UNIX{} and \file{foo.lib} on DOS/Windows). However, they can include a
|
---|
2720 | directory component, which means the linker will look in that
|
---|
2721 | specific directory rather than searching all the normal locations.
|
---|
2722 |
|
---|
2723 | \var{library_dirs}, if supplied, should be a list of directories to
|
---|
2724 | search for libraries that were specified as bare library names
|
---|
2725 | (ie. no directory component). These are on top of the system
|
---|
2726 | default and those supplied to \method{add_library_dir()} and/or
|
---|
2727 | \method{set_library_dirs()}. \var{runtime_library_dirs} is a list of
|
---|
2728 | directories that will be embedded into the shared library and used
|
---|
2729 | to search for other shared libraries that *it* depends on at
|
---|
2730 | run-time. (This may only be relevant on \UNIX.)
|
---|
2731 |
|
---|
2732 | \var{export_symbols} is a list of symbols that the shared library will
|
---|
2733 | export. (This appears to be relevant only on Windows.)
|
---|
2734 |
|
---|
2735 | \var{debug} is as for \method{compile()} and \method{create_static_lib()},
|
---|
2736 | with the slight distinction that it actually matters on most platforms (as
|
---|
2737 | opposed to \method{create_static_lib()}, which includes a \var{debug} flag
|
---|
2738 | mostly for form's sake).
|
---|
2739 |
|
---|
2740 | \var{extra_preargs} and \var{extra_postargs} are as for \method{compile()}
|
---|
2741 | (except of course that they supply command-line arguments for the
|
---|
2742 | particular linker being used).
|
---|
2743 |
|
---|
2744 | \var{target_lang} is the target language for which the given objects
|
---|
2745 | are being compiled. This allows specific linkage time treatment of
|
---|
2746 | certain languages.
|
---|
2747 |
|
---|
2748 | Raises \exception{LinkError} on failure.
|
---|
2749 | \end{methoddesc}
|
---|
2750 |
|
---|
2751 | \begin{methoddesc}{link_executable}{objects, output_progname\optional{, output_dir=\code{None}, libraries=\code{None}, library_dirs=\code{None}, runtime_library_dirs=\code{None}, debug=\code{0}, extra_preargs=\code{None}, extra_postargs=\code{None}, target_lang=\code{None}}}
|
---|
2752 | Link an executable.
|
---|
2753 | \var{output_progname} is the name of the file executable,
|
---|
2754 | while \var{objects} are a list of object filenames to link in. Other arguments
|
---|
2755 | are as for the \method{link} method.
|
---|
2756 | \end{methoddesc}
|
---|
2757 |
|
---|
2758 | \begin{methoddesc}{link_shared_lib}{objects, output_libname\optional{, output_dir=\code{None}, libraries=\code{None}, library_dirs=\code{None}, runtime_library_dirs=\code{None}, export_symbols=\code{None}, debug=\code{0}, extra_preargs=\code{None}, extra_postargs=\code{None}, build_temp=\code{None}, target_lang=\code{None}}}
|
---|
2759 | Link a shared library. \var{output_libname} is the name of the output
|
---|
2760 | library, while \var{objects} is a list of object filenames to link in.
|
---|
2761 | Other arguments are as for the \method{link} method.
|
---|
2762 | \end{methoddesc}
|
---|
2763 |
|
---|
2764 | \begin{methoddesc}{link_shared_object}{objects, output_filename\optional{, output_dir=\code{None}, libraries=\code{None}, library_dirs=\code{None}, runtime_library_dirs=\code{None}, export_symbols=\code{None}, debug=\code{0}, extra_preargs=\code{None}, extra_postargs=\code{None}, build_temp=\code{None}, target_lang=\code{None}}}
|
---|
2765 | Link a shared object. \var{output_filename} is the name of the shared object
|
---|
2766 | that will be created, while \var{objects} is a list of object filenames
|
---|
2767 | to link in. Other arguments are as for the \method{link} method.
|
---|
2768 | \end{methoddesc}
|
---|
2769 |
|
---|
2770 | \begin{methoddesc}{preprocess}{source\optional{, output_file=\code{None}, macros=\code{None}, include_dirs=\code{None}, extra_preargs=\code{None}, extra_postargs=\code{None}}}
|
---|
2771 | Preprocess a single C/\Cpp{} source file, named in \var{source}.
|
---|
2772 | Output will be written to file named \var{output_file}, or \var{stdout} if
|
---|
2773 | \var{output_file} not supplied. \var{macros} is a list of macro
|
---|
2774 | definitions as for \method{compile()}, which will augment the macros set
|
---|
2775 | with \method{define_macro()} and \method{undefine_macro()}.
|
---|
2776 | \var{include_dirs} is a list of directory names that will be added to the
|
---|
2777 | default list, in the same way as \method{add_include_dir()}.
|
---|
2778 |
|
---|
2779 | Raises \exception{PreprocessError} on failure.
|
---|
2780 | \end{methoddesc}
|
---|
2781 |
|
---|
2782 | The following utility methods are defined by the \class{CCompiler} class,
|
---|
2783 | for use by the various concrete subclasses.
|
---|
2784 |
|
---|
2785 | \begin{methoddesc}{executable_filename}{basename\optional{, strip_dir=\code{0}, output_dir=\code{''}}}
|
---|
2786 | Returns the filename of the executable for the given \var{basename}.
|
---|
2787 | Typically for non-Windows platforms this is the same as the basename,
|
---|
2788 | while Windows will get a \file{.exe} added.
|
---|
2789 | \end{methoddesc}
|
---|
2790 |
|
---|
2791 | \begin{methoddesc}{library_filename}{libname\optional{, lib_type=\code{'static'}, strip_dir=\code{0}, output_dir=\code{''}}}
|
---|
2792 | Returns the filename for the given library name on the current platform.
|
---|
2793 | On \UNIX{} a library with \var{lib_type} of \code{'static'} will typically
|
---|
2794 | be of the form \file{liblibname.a}, while a \var{lib_type} of \code{'dynamic'}
|
---|
2795 | will be of the form \file{liblibname.so}.
|
---|
2796 | \end{methoddesc}
|
---|
2797 |
|
---|
2798 | \begin{methoddesc}{object_filenames}{source_filenames\optional{, strip_dir=\code{0}, output_dir=\code{''}}}
|
---|
2799 | Returns the name of the object files for the given source files.
|
---|
2800 | \var{source_filenames} should be a list of filenames.
|
---|
2801 | \end{methoddesc}
|
---|
2802 |
|
---|
2803 | \begin{methoddesc}{shared_object_filename}{basename\optional{, strip_dir=\code{0}, output_dir=\code{''}}}
|
---|
2804 | Returns the name of a shared object file for the given file name \var{basename}.
|
---|
2805 | \end{methoddesc}
|
---|
2806 |
|
---|
2807 | \begin{methoddesc}{execute}{func, args\optional{, msg=\code{None}, level=\code{1}}}
|
---|
2808 | Invokes \function{distutils.util.execute()} This method invokes a
|
---|
2809 | Python function \var{func} with the given arguments \var{args}, after
|
---|
2810 | logging and taking into account the \var{dry_run} flag. XXX see also.
|
---|
2811 | \end{methoddesc}
|
---|
2812 |
|
---|
2813 | \begin{methoddesc}{spawn}{cmd}
|
---|
2814 | Invokes \function{distutils.util.spawn()}. This invokes an external
|
---|
2815 | process to run the given command. XXX see also.
|
---|
2816 | \end{methoddesc}
|
---|
2817 |
|
---|
2818 | \begin{methoddesc}{mkpath}{name\optional{, mode=\code{511}}}
|
---|
2819 |
|
---|
2820 | Invokes \function{distutils.dir_util.mkpath()}. This creates a directory
|
---|
2821 | and any missing ancestor directories. XXX see also.
|
---|
2822 | \end{methoddesc}
|
---|
2823 |
|
---|
2824 | \begin{methoddesc}{move_file}{src, dst}
|
---|
2825 | Invokes \method{distutils.file_util.move_file()}. Renames \var{src} to
|
---|
2826 | \var{dst}. XXX see also.
|
---|
2827 | \end{methoddesc}
|
---|
2828 |
|
---|
2829 | \begin{methoddesc}{announce}{msg\optional{, level=\code{1}}}
|
---|
2830 | Write a message using \function{distutils.log.debug()}. XXX see also.
|
---|
2831 | \end{methoddesc}
|
---|
2832 |
|
---|
2833 | \begin{methoddesc}{warn}{msg}
|
---|
2834 | Write a warning message \var{msg} to standard error.
|
---|
2835 | \end{methoddesc}
|
---|
2836 |
|
---|
2837 | \begin{methoddesc}{debug_print}{msg}
|
---|
2838 | If the \var{debug} flag is set on this \class{CCompiler} instance, print
|
---|
2839 | \var{msg} to standard output, otherwise do nothing.
|
---|
2840 | \end{methoddesc}
|
---|
2841 |
|
---|
2842 | \end{classdesc}
|
---|
2843 |
|
---|
2844 | %\subsection{Compiler-specific modules}
|
---|
2845 | %
|
---|
2846 | %The following modules implement concrete subclasses of the abstract
|
---|
2847 | %\class{CCompiler} class. They should not be instantiated directly, but should
|
---|
2848 | %be created using \function{distutils.ccompiler.new_compiler()} factory
|
---|
2849 | %function.
|
---|
2850 |
|
---|
2851 | \section{\module{distutils.unixccompiler} --- Unix C Compiler}
|
---|
2852 | \declaremodule{standard}{distutils.unixccompiler}
|
---|
2853 | \modulesynopsis{UNIX C Compiler}
|
---|
2854 |
|
---|
2855 | This module provides the \class{UnixCCompiler} class, a subclass of
|
---|
2856 | \class{CCompiler} that handles the typical \UNIX-style command-line
|
---|
2857 | C compiler:
|
---|
2858 |
|
---|
2859 | \begin{itemize}
|
---|
2860 | \item macros defined with \programopt{-D\var{name}\optional{=value}}
|
---|
2861 | \item macros undefined with \programopt{-U\var{name}}
|
---|
2862 | \item include search directories specified with
|
---|
2863 | \programopt{-I\var{dir}}
|
---|
2864 | \item libraries specified with \programopt{-l\var{lib}}
|
---|
2865 | \item library search directories specified with \programopt{-L\var{dir}}
|
---|
2866 | \item compile handled by \program{cc} (or similar) executable with
|
---|
2867 | \programopt{-c} option: compiles \file{.c} to \file{.o}
|
---|
2868 | \item link static library handled by \program{ar} command (possibly
|
---|
2869 | with \program{ranlib})
|
---|
2870 | \item link shared library handled by \program{cc} \programopt{-shared}
|
---|
2871 | \end{itemize}
|
---|
2872 |
|
---|
2873 | \section{\module{distutils.msvccompiler} --- Microsoft Compiler}
|
---|
2874 | \declaremodule{standard}{distutils.msvccompiler}
|
---|
2875 | \modulesynopsis{Microsoft Compiler}
|
---|
2876 |
|
---|
2877 | This module provides \class{MSVCCompiler}, an implementation of the abstract
|
---|
2878 | \class{CCompiler} class for Microsoft Visual Studio. Typically, extension
|
---|
2879 | modules need to be compiled with the same compiler that was used to compile
|
---|
2880 | Python. For Python 2.3 and earlier, the compiler was Visual Studio 6. For
|
---|
2881 | Python 2.4 and 2.5, the compiler is Visual Studio .NET 2003. The AMD64
|
---|
2882 | and Itanium binaries are created using the Platform SDK.
|
---|
2883 |
|
---|
2884 | \class{MSVCCompiler} will normally choose the right compiler, linker etc.
|
---|
2885 | on its own. To override this choice, the environment variables
|
---|
2886 | \var{DISTUTILS\_USE\_SDK} and \var{MSSdk} must be both set. \var{MSSdk}
|
---|
2887 | indicates that the current environment has been setup by the SDK's
|
---|
2888 | \code{SetEnv.Cmd} script, or that the environment variables had been
|
---|
2889 | registered when the SDK was installed; \var{DISTUTILS\_USE\_SDK} indicates
|
---|
2890 | that the distutils user has made an explicit choice to override the
|
---|
2891 | compiler selection by \class{MSVCCompiler}.
|
---|
2892 |
|
---|
2893 | \section{\module{distutils.bcppcompiler} --- Borland Compiler}
|
---|
2894 | \declaremodule{standard}{distutils.bcppcompiler}
|
---|
2895 | This module provides \class{BorlandCCompiler}, an subclass of the abstract \class{CCompiler} class for the Borland \Cpp{} compiler.
|
---|
2896 |
|
---|
2897 | \section{\module{distutils.cygwincompiler} --- Cygwin Compiler}
|
---|
2898 | \declaremodule{standard}{distutils.cygwinccompiler}
|
---|
2899 |
|
---|
2900 | This module provides the \class{CygwinCCompiler} class, a subclass of \class{UnixCCompiler} that
|
---|
2901 | handles the Cygwin port of the GNU C compiler to Windows. It also contains
|
---|
2902 | the Mingw32CCompiler class which handles the mingw32 port of GCC (same as
|
---|
2903 | cygwin in no-cygwin mode).
|
---|
2904 |
|
---|
2905 | \section{\module{distutils.emxccompiler} --- OS/2 EMX Compiler}
|
---|
2906 | \declaremodule{standard}{distutils.emxccompiler}
|
---|
2907 | \modulesynopsis{OS/2 EMX Compiler support}
|
---|
2908 |
|
---|
2909 | This module provides the EMXCCompiler class, a subclass of \class{UnixCCompiler} that handles the EMX port of the GNU C compiler to OS/2.
|
---|
2910 |
|
---|
2911 | \section{\module{distutils.mwerkscompiler} --- Metrowerks CodeWarrior support}
|
---|
2912 | \declaremodule{standard}{distutils.mwerkscompiler}
|
---|
2913 | \modulesynopsis{Metrowerks CodeWarrior support}
|
---|
2914 |
|
---|
2915 | Contains \class{MWerksCompiler}, an implementation of the abstract
|
---|
2916 | \class{CCompiler} class for MetroWerks CodeWarrior on the pre-Mac OS X Macintosh.
|
---|
2917 | Needs work to support CW on Windows or Mac OS X.
|
---|
2918 |
|
---|
2919 |
|
---|
2920 | %\subsection{Utility modules}
|
---|
2921 | %
|
---|
2922 | %The following modules all provide general utility functions. They haven't
|
---|
2923 | %all been documented yet.
|
---|
2924 |
|
---|
2925 | \section{\module{distutils.archive_util} ---
|
---|
2926 | Archiving utilities}
|
---|
2927 | \declaremodule[distutils.archiveutil]{standard}{distutils.archive_util}
|
---|
2928 | \modulesynopsis{Utility functions for creating archive files (tarballs, zip files, ...)}
|
---|
2929 |
|
---|
2930 | This module provides a few functions for creating archive files, such as
|
---|
2931 | tarballs or zipfiles.
|
---|
2932 |
|
---|
2933 | \begin{funcdesc}{make_archive}{base_name, format\optional{, root_dir=\code{None}, base_dir=\code{None}, verbose=\code{0}, dry_run=\code{0}}}
|
---|
2934 | Create an archive file (eg. \code{zip} or \code{tar}). \var{base_name}
|
---|
2935 | is the name of the file to create, minus any format-specific extension;
|
---|
2936 | \var{format} is the archive format: one of \code{zip}, \code{tar},
|
---|
2937 | \code{ztar}, or \code{gztar}.
|
---|
2938 | \var{root_dir} is a directory that will be the root directory of the
|
---|
2939 | archive; ie. we typically \code{chdir} into \var{root_dir} before
|
---|
2940 | creating the archive. \var{base_dir} is the directory where we start
|
---|
2941 | archiving from; ie. \var{base_dir} will be the common prefix of all files and
|
---|
2942 | directories in the archive. \var{root_dir} and \var{base_dir} both default
|
---|
2943 | to the current directory. Returns the name of the archive file.
|
---|
2944 |
|
---|
2945 | \warning{This should be changed to support bz2 files}
|
---|
2946 | \end{funcdesc}
|
---|
2947 |
|
---|
2948 | \begin{funcdesc}{make_tarball}{base_name, base_dir\optional{, compress=\code{'gzip'}, verbose=\code{0}, dry_run=\code{0}}}'Create an (optional compressed) archive as a tar file from all files in and under \var{base_dir}. \var{compress} must be \code{'gzip'} (the default),
|
---|
2949 | \code{'compress'}, \code{'bzip2'}, or \code{None}. Both \program{tar}
|
---|
2950 | and the compression utility named by \var{compress} must be on the
|
---|
2951 | default program search path, so this is probably \UNIX-specific. The
|
---|
2952 | output tar file will be named \file{\var{base_dir}.tar}, possibly plus
|
---|
2953 | the appropriate compression extension (\file{.gz}, \file{.bz2} or
|
---|
2954 | \file{.Z}). Return the output filename.
|
---|
2955 |
|
---|
2956 | \warning{This should be replaced with calls to the \module{tarfile} module.}
|
---|
2957 | \end{funcdesc}
|
---|
2958 |
|
---|
2959 | \begin{funcdesc}{make_zipfile}{base_name, base_dir\optional{, verbose=\code{0}, dry_run=\code{0}}}
|
---|
2960 | Create a zip file from all files in and under \var{base_dir}. The output
|
---|
2961 | zip file will be named \var{base_dir} + \file{.zip}. Uses either the
|
---|
2962 | \module{zipfile} Python module (if available) or the InfoZIP \file{zip}
|
---|
2963 | utility (if installed and found on the default search path). If neither
|
---|
2964 | tool is available, raises \exception{DistutilsExecError}.
|
---|
2965 | Returns the name of the output zip file.
|
---|
2966 | \end{funcdesc}
|
---|
2967 |
|
---|
2968 | \section{\module{distutils.dep_util} --- Dependency checking}
|
---|
2969 | \declaremodule[distutils.deputil]{standard}{distutils.dep_util}
|
---|
2970 | \modulesynopsis{Utility functions for simple dependency checking}
|
---|
2971 |
|
---|
2972 | This module provides functions for performing simple, timestamp-based
|
---|
2973 | dependency of files and groups of files; also, functions based entirely
|
---|
2974 | on such timestamp dependency analysis.
|
---|
2975 |
|
---|
2976 | \begin{funcdesc}{newer}{source, target}
|
---|
2977 | Return true if \var{source} exists and is more recently modified than
|
---|
2978 | \var{target}, or if \var{source} exists and \var{target} doesn't.
|
---|
2979 | Return false if both exist and \var{target} is the same age or newer
|
---|
2980 | than \var{source}.
|
---|
2981 | Raise \exception{DistutilsFileError} if \var{source} does not exist.
|
---|
2982 | \end{funcdesc}
|
---|
2983 |
|
---|
2984 | \begin{funcdesc}{newer_pairwise}{sources, targets}
|
---|
2985 | Walk two filename lists in parallel, testing if each source is newer
|
---|
2986 | than its corresponding target. Return a pair of lists (\var{sources},
|
---|
2987 | \var{targets}) where source is newer than target, according to the semantics
|
---|
2988 | of \function{newer()}
|
---|
2989 | %% equivalent to a listcomp...
|
---|
2990 | \end{funcdesc}
|
---|
2991 |
|
---|
2992 | \begin{funcdesc}{newer_group}{sources, target\optional{, missing=\code{'error'}}}
|
---|
2993 | Return true if \var{target} is out-of-date with respect to any file
|
---|
2994 | listed in \var{sources} In other words, if \var{target} exists and is newer
|
---|
2995 | than every file in \var{sources}, return false; otherwise return true.
|
---|
2996 | \var{missing} controls what we do when a source file is missing; the
|
---|
2997 | default (\code{'error'}) is to blow up with an \exception{OSError} from
|
---|
2998 | inside \function{os.stat()};
|
---|
2999 | if it is \code{'ignore'}, we silently drop any missing source files; if it is
|
---|
3000 | \code{'newer'}, any missing source files make us assume that \var{target} is
|
---|
3001 | out-of-date (this is handy in ``dry-run'' mode: it'll make you pretend to
|
---|
3002 | carry out commands that wouldn't work because inputs are missing, but
|
---|
3003 | that doesn't matter because you're not actually going to run the
|
---|
3004 | commands).
|
---|
3005 | \end{funcdesc}
|
---|
3006 |
|
---|
3007 | \section{\module{distutils.dir_util} --- Directory tree operations}
|
---|
3008 | \declaremodule[distutils.dirutil]{standard}{distutils.dir_util}
|
---|
3009 | \modulesynopsis{Utility functions for operating on directories and directory trees}
|
---|
3010 |
|
---|
3011 | This module provides functions for operating on directories and trees
|
---|
3012 | of directories.
|
---|
3013 |
|
---|
3014 | \begin{funcdesc}{mkpath}{name\optional{, mode=\code{0777}, verbose=\code{0}, dry_run=\code{0}}}
|
---|
3015 | Create a directory and any missing ancestor directories. If the
|
---|
3016 | directory already exists (or if \var{name} is the empty string, which
|
---|
3017 | means the current directory, which of course exists), then do
|
---|
3018 | nothing. Raise \exception{DistutilsFileError} if unable to create some
|
---|
3019 | directory along the way (eg. some sub-path exists, but is a file
|
---|
3020 | rather than a directory). If \var{verbose} is true, print a one-line
|
---|
3021 | summary of each mkdir to stdout. Return the list of directories
|
---|
3022 | actually created.
|
---|
3023 | \end{funcdesc}
|
---|
3024 |
|
---|
3025 | \begin{funcdesc}{create_tree}{base_dir, files\optional{, mode=\code{0777}, verbose=\code{0}, dry_run=\code{0}}}
|
---|
3026 | Create all the empty directories under \var{base_dir} needed to
|
---|
3027 | put \var{files} there. \var{base_dir} is just the a name of a directory
|
---|
3028 | which doesn't necessarily exist yet; \var{files} is a list of filenames
|
---|
3029 | to be interpreted relative to \var{base_dir}. \var{base_dir} + the
|
---|
3030 | directory portion of every file in \var{files} will be created if it
|
---|
3031 | doesn't already exist. \var{mode}, \var{verbose} and \var{dry_run} flags
|
---|
3032 | are as for \function{mkpath()}.
|
---|
3033 | \end{funcdesc}
|
---|
3034 |
|
---|
3035 | \begin{funcdesc}{copy_tree}{src, dst\optional{preserve_mode=\code{1}, preserve_times=\code{1}, preserve_symlinks=\code{0}, update=\code{0}, verbose=\code{0}, dry_run=\code{0}}}
|
---|
3036 | Copy an entire directory tree \var{src} to a new location \var{dst}. Both
|
---|
3037 | \var{src} and \var{dst} must be directory names. If \var{src} is not a
|
---|
3038 | directory, raise \exception{DistutilsFileError}. If \var{dst} does
|
---|
3039 | not exist, it is created with \function{mkpath()}. The end result of the
|
---|
3040 | copy is that every file in \var{src} is copied to \var{dst}, and
|
---|
3041 | directories under \var{src} are recursively copied to \var{dst}.
|
---|
3042 | Return the list of files that were copied or might have been copied,
|
---|
3043 | using their output name. The return value is unaffected by \var{update}
|
---|
3044 | or \var{dry_run}: it is simply the list of all files under \var{src},
|
---|
3045 | with the names changed to be under \var{dst}.
|
---|
3046 |
|
---|
3047 | \var{preserve_mode} and \var{preserve_times} are the same as for
|
---|
3048 | \function{copy_file} in \refmodule[distutils.fileutil]{distutils.file_util};
|
---|
3049 | note that they only apply to regular files, not to directories. If
|
---|
3050 | \var{preserve_symlinks} is true, symlinks will be copied as symlinks
|
---|
3051 | (on platforms that support them!); otherwise (the default), the
|
---|
3052 | destination of the symlink will be copied. \var{update} and
|
---|
3053 | \var{verbose} are the same as for
|
---|
3054 | \function{copy_file()}.
|
---|
3055 | \end{funcdesc}
|
---|
3056 |
|
---|
3057 | \begin{funcdesc}{remove_tree}{directory\optional{verbose=\code{0}, dry_run=\code{0}}}
|
---|
3058 | Recursively remove \var{directory} and all files and directories underneath
|
---|
3059 | it. Any errors are ignored (apart from being reported to \code{sys.stdout} if
|
---|
3060 | \var{verbose} is true).
|
---|
3061 | \end{funcdesc}
|
---|
3062 |
|
---|
3063 | \XXX{Some of this could be replaced with the shutil module?}
|
---|
3064 |
|
---|
3065 | \section{\module{distutils.file_util} --- Single file operations}
|
---|
3066 | \declaremodule[distutils.fileutil]{standard}{distutils.file_util}
|
---|
3067 | \modulesynopsis{Utility functions for operating on single files}
|
---|
3068 |
|
---|
3069 | This module contains some utility functions for operating on individual files.
|
---|
3070 |
|
---|
3071 | \begin{funcdesc}{copy_file}{src, dst\optional{preserve_mode=\code{1}, preserve_times=\code{1}, update=\code{0}, link=\code{None}, verbose=\code{0}, dry_run=\code{0}}}
|
---|
3072 | Copy file \var{src} to \var{dst}. If \var{dst} is a directory, then
|
---|
3073 | \var{src} is copied there with the same name; otherwise, it must be a
|
---|
3074 | filename. (If the file exists, it will be ruthlessly clobbered.) If
|
---|
3075 | \var{preserve_mode} is true (the default), the file's mode (type and
|
---|
3076 | permission bits, or whatever is analogous on the current platform) is
|
---|
3077 | copied. If \var{preserve_times} is true (the default), the last-modified
|
---|
3078 | and last-access times are copied as well. If \var{update} is true,
|
---|
3079 | \var{src} will only be copied if \var{dst} does not exist, or if
|
---|
3080 | \var{dst} does exist but is older than \var{src}.
|
---|
3081 |
|
---|
3082 | \var{link} allows you to make hard links (using \function{os.link}) or
|
---|
3083 | symbolic links (using \function{os.symlink}) instead of copying: set it
|
---|
3084 | to \code{'hard'} or \code{'sym'}; if it is \code{None} (the default),
|
---|
3085 | files are copied. Don't set \var{link} on systems that don't support
|
---|
3086 | it: \function{copy_file()} doesn't check if hard or symbolic linking is
|
---|
3087 | available. It uses \function{_copy_file_contents()} to copy file contents.
|
---|
3088 |
|
---|
3089 | Return a tuple \samp{(dest_name, copied)}: \var{dest_name} is the actual
|
---|
3090 | name of the output file, and \var{copied} is true if the file was copied
|
---|
3091 | (or would have been copied, if \var{dry_run} true).
|
---|
3092 | % XXX if the destination file already exists, we clobber it if
|
---|
3093 | % copying, but blow up if linking. Hmmm. And I don't know what
|
---|
3094 | % macostools.copyfile() does. Should definitely be consistent, and
|
---|
3095 | % should probably blow up if destination exists and we would be
|
---|
3096 | % changing it (ie. it's not already a hard/soft link to src OR
|
---|
3097 | % (not update) and (src newer than dst)).
|
---|
3098 | \end{funcdesc}
|
---|
3099 |
|
---|
3100 | \begin{funcdesc}{move_file}{src, dst\optional{verbose, dry_run}}
|
---|
3101 | Move file \var{src} to \var{dst}. If \var{dst} is a directory, the file will
|
---|
3102 | be moved into it with the same name; otherwise, \var{src} is just renamed
|
---|
3103 | to \var{dst}. Returns the new full name of the file.
|
---|
3104 | \warning{Handles cross-device moves on \UNIX{} using \function{copy_file()}.
|
---|
3105 | What about other systems???}
|
---|
3106 | \end{funcdesc}
|
---|
3107 |
|
---|
3108 | \begin{funcdesc}{write_file}{filename, contents}
|
---|
3109 | Create a file called \var{filename} and write \var{contents} (a
|
---|
3110 | sequence of strings without line terminators) to it.
|
---|
3111 | \end{funcdesc}
|
---|
3112 |
|
---|
3113 | \section{\module{distutils.util} --- Miscellaneous other utility functions}
|
---|
3114 | \declaremodule{standard}{distutils.util}
|
---|
3115 | \modulesynopsis{Miscellaneous other utility functions}
|
---|
3116 |
|
---|
3117 | This module contains other assorted bits and pieces that don't fit into
|
---|
3118 | any other utility module.
|
---|
3119 |
|
---|
3120 | \begin{funcdesc}{get_platform}{}
|
---|
3121 | Return a string that identifies the current platform. This is used
|
---|
3122 | mainly to distinguish platform-specific build directories and
|
---|
3123 | platform-specific built distributions. Typically includes the OS name
|
---|
3124 | and version and the architecture (as supplied by 'os.uname()'),
|
---|
3125 | although the exact information included depends on the OS; eg. for IRIX
|
---|
3126 | the architecture isn't particularly important (IRIX only runs on SGI
|
---|
3127 | hardware), but for Linux the kernel version isn't particularly
|
---|
3128 | important.
|
---|
3129 |
|
---|
3130 | Examples of returned values:
|
---|
3131 | \begin{itemize}
|
---|
3132 | \item \code{linux-i586}
|
---|
3133 | \item \code{linux-alpha}
|
---|
3134 | \item \code{solaris-2.6-sun4u}
|
---|
3135 | \item \code{irix-5.3}
|
---|
3136 | \item \code{irix64-6.2}
|
---|
3137 | \end{itemize}
|
---|
3138 |
|
---|
3139 | For non-\POSIX{} platforms, currently just returns \code{sys.platform}.
|
---|
3140 | % XXX isn't this also provided by some other non-distutils module?
|
---|
3141 | \end{funcdesc}
|
---|
3142 |
|
---|
3143 | \begin{funcdesc}{convert_path}{pathname}
|
---|
3144 | Return 'pathname' as a name that will work on the native filesystem,
|
---|
3145 | i.e. split it on '/' and put it back together again using the current
|
---|
3146 | directory separator. Needed because filenames in the setup script are
|
---|
3147 | always supplied in \UNIX{} style, and have to be converted to the local
|
---|
3148 | convention before we can actually use them in the filesystem. Raises
|
---|
3149 | \exception{ValueError} on non-\UNIX-ish systems if \var{pathname} either
|
---|
3150 | starts or ends with a slash.
|
---|
3151 | \end{funcdesc}
|
---|
3152 |
|
---|
3153 | \begin{funcdesc}{change_root}{new_root, pathname}
|
---|
3154 | Return \var{pathname} with \var{new_root} prepended. If \var{pathname} is
|
---|
3155 | relative, this is equivalent to \samp{os.path.join(new_root,pathname)}
|
---|
3156 | Otherwise, it requires making \var{pathname} relative and then joining the
|
---|
3157 | two, which is tricky on DOS/Windows.
|
---|
3158 | \end{funcdesc}
|
---|
3159 |
|
---|
3160 | \begin{funcdesc}{check_environ}{}
|
---|
3161 | Ensure that 'os.environ' has all the environment variables we
|
---|
3162 | guarantee that users can use in config files, command-line options,
|
---|
3163 | etc. Currently this includes:
|
---|
3164 | \begin{itemize}
|
---|
3165 | \item \envvar{HOME} - user's home directory (\UNIX{} only)
|
---|
3166 | \item \envvar{PLAT} - description of the current platform, including
|
---|
3167 | hardware and OS (see \function{get_platform()})
|
---|
3168 | \end{itemize}
|
---|
3169 | \end{funcdesc}
|
---|
3170 |
|
---|
3171 | \begin{funcdesc}{subst_vars}{s, local_vars}
|
---|
3172 | Perform shell/Perl-style variable substitution on \var{s}. Every
|
---|
3173 | occurrence of \code{\$} followed by a name is considered a variable, and
|
---|
3174 | variable is substituted by the value found in the \var{local_vars}
|
---|
3175 | dictionary, or in \code{os.environ} if it's not in \var{local_vars}.
|
---|
3176 | \var{os.environ} is first checked/augmented to guarantee that it contains
|
---|
3177 | certain values: see \function{check_environ()}. Raise \exception{ValueError}
|
---|
3178 | for any variables not found in either \var{local_vars} or \code{os.environ}.
|
---|
3179 |
|
---|
3180 | Note that this is not a fully-fledged string interpolation function. A
|
---|
3181 | valid \code{\$variable} can consist only of upper and lower case letters,
|
---|
3182 | numbers and an underscore. No \{ \} or \( \) style quoting is available.
|
---|
3183 | \end{funcdesc}
|
---|
3184 |
|
---|
3185 | \begin{funcdesc}{grok_environment_error}{exc\optional{, prefix=\samp{'error: '}}}
|
---|
3186 | Generate a useful error message from an \exception{EnvironmentError}
|
---|
3187 | (\exception{IOError} or \exception{OSError}) exception object.
|
---|
3188 | Handles Python 1.5.1 and later styles, and does what it can to deal with
|
---|
3189 | exception objects that don't have a filename (which happens when the error
|
---|
3190 | is due to a two-file operation, such as \function{rename()} or
|
---|
3191 | \function{link()}). Returns the error message as a string prefixed
|
---|
3192 | with \var{prefix}.
|
---|
3193 | \end{funcdesc}
|
---|
3194 |
|
---|
3195 | \begin{funcdesc}{split_quoted}{s}
|
---|
3196 | Split a string up according to \UNIX{} shell-like rules for quotes and
|
---|
3197 | backslashes. In short: words are delimited by spaces, as long as those
|
---|
3198 | spaces are not escaped by a backslash, or inside a quoted string.
|
---|
3199 | Single and double quotes are equivalent, and the quote characters can
|
---|
3200 | be backslash-escaped. The backslash is stripped from any two-character
|
---|
3201 | escape sequence, leaving only the escaped character. The quote
|
---|
3202 | characters are stripped from any quoted string. Returns a list of
|
---|
3203 | words.
|
---|
3204 | % Should probably be moved into the standard library.
|
---|
3205 | \end{funcdesc}
|
---|
3206 |
|
---|
3207 | \begin{funcdesc}{execute}{func, args\optional{, msg=\code{None}, verbose=\code{0}, dry_run=\code{0}}}
|
---|
3208 | Perform some action that affects the outside world (for instance,
|
---|
3209 | writing to the filesystem). Such actions are special because they
|
---|
3210 | are disabled by the \var{dry_run} flag. This method takes
|
---|
3211 | care of all that bureaucracy for you; all you have to do is supply the
|
---|
3212 | function to call and an argument tuple for it (to embody the
|
---|
3213 | ``external action'' being performed), and an optional message to
|
---|
3214 | print.
|
---|
3215 | \end{funcdesc}
|
---|
3216 |
|
---|
3217 | \begin{funcdesc}{strtobool}{val}
|
---|
3218 | Convert a string representation of truth to true (1) or false (0).
|
---|
3219 |
|
---|
3220 | True values are \code{y}, \code{yes}, \code{t}, \code{true}, \code{on}
|
---|
3221 | and \code{1}; false values are \code{n}, \code{no}, \code{f}, \code{false},
|
---|
3222 | \code{off} and \code{0}. Raises \exception{ValueError} if \var{val}
|
---|
3223 | is anything else.
|
---|
3224 | \end{funcdesc}
|
---|
3225 |
|
---|
3226 | \begin{funcdesc}{byte_compile}{py_files\optional{,
|
---|
3227 | optimize=\code{0}, force=\code{0},
|
---|
3228 | prefix=\code{None}, base_dir=\code{None},
|
---|
3229 | verbose=\code{1}, dry_run=\code{0},
|
---|
3230 | direct=\code{None}}}
|
---|
3231 | Byte-compile a collection of Python source files to either \file{.pyc}
|
---|
3232 | or \file{.pyo} files in the same directory. \var{py_files} is a list of files
|
---|
3233 | to compile; any files that don't end in \file{.py} are silently skipped.
|
---|
3234 | \var{optimize} must be one of the following:
|
---|
3235 | \begin{itemize}
|
---|
3236 | \item \code{0} - don't optimize (generate \file{.pyc})
|
---|
3237 | \item \code{1} - normal optimization (like \samp{python -O})
|
---|
3238 | \item \code{2} - extra optimization (like \samp{python -OO})
|
---|
3239 | \end{itemize}
|
---|
3240 |
|
---|
3241 | If \var{force} is true, all files are recompiled regardless of
|
---|
3242 | timestamps.
|
---|
3243 |
|
---|
3244 | The source filename encoded in each bytecode file defaults to the
|
---|
3245 | filenames listed in \var{py_files}; you can modify these with \var{prefix} and
|
---|
3246 | \var{basedir}. \var{prefix} is a string that will be stripped off of each
|
---|
3247 | source filename, and \var{base_dir} is a directory name that will be
|
---|
3248 | prepended (after \var{prefix} is stripped). You can supply either or both
|
---|
3249 | (or neither) of \var{prefix} and \var{base_dir}, as you wish.
|
---|
3250 |
|
---|
3251 | If \var{dry_run} is true, doesn't actually do anything that would
|
---|
3252 | affect the filesystem.
|
---|
3253 |
|
---|
3254 | Byte-compilation is either done directly in this interpreter process
|
---|
3255 | with the standard \module{py_compile} module, or indirectly by writing a
|
---|
3256 | temporary script and executing it. Normally, you should let
|
---|
3257 | \function{byte_compile()} figure out to use direct compilation or not (see
|
---|
3258 | the source for details). The \var{direct} flag is used by the script
|
---|
3259 | generated in indirect mode; unless you know what you're doing, leave
|
---|
3260 | it set to \code{None}.
|
---|
3261 | \end{funcdesc}
|
---|
3262 |
|
---|
3263 | \begin{funcdesc}{rfc822_escape}{header}
|
---|
3264 | Return a version of \var{header} escaped for inclusion in an
|
---|
3265 | \rfc{822} header, by ensuring there are 8 spaces space after each newline.
|
---|
3266 | Note that it does no other modification of the string.
|
---|
3267 | % this _can_ be replaced
|
---|
3268 | \end{funcdesc}
|
---|
3269 |
|
---|
3270 | %\subsection{Distutils objects}
|
---|
3271 |
|
---|
3272 | \section{\module{distutils.dist} --- The Distribution class}
|
---|
3273 | \declaremodule{standard}{distutils.dist}
|
---|
3274 | \modulesynopsis{Provides the Distribution class, which represents the
|
---|
3275 | module distribution being built/installed/distributed}
|
---|
3276 |
|
---|
3277 | This module provides the \class{Distribution} class, which represents
|
---|
3278 | the module distribution being built/installed/distributed.
|
---|
3279 |
|
---|
3280 |
|
---|
3281 | \section{\module{distutils.extension} --- The Extension class}
|
---|
3282 | \declaremodule{standard}{distutils.extension}
|
---|
3283 | \modulesynopsis{Provides the Extension class, used to describe
|
---|
3284 | C/\Cpp{} extension modules in setup scripts}
|
---|
3285 |
|
---|
3286 | This module provides the \class{Extension} class, used to describe
|
---|
3287 | C/\Cpp{} extension modules in setup scripts.
|
---|
3288 |
|
---|
3289 | %\subsection{Ungrouped modules}
|
---|
3290 | %The following haven't been moved into a more appropriate section yet.
|
---|
3291 |
|
---|
3292 | \section{\module{distutils.debug} --- Distutils debug mode}
|
---|
3293 | \declaremodule{standard}{distutils.debug}
|
---|
3294 | \modulesynopsis{Provides the debug flag for distutils}
|
---|
3295 |
|
---|
3296 | This module provides the DEBUG flag.
|
---|
3297 |
|
---|
3298 | \section{\module{distutils.errors} --- Distutils exceptions}
|
---|
3299 | \declaremodule{standard}{distutils.errors}
|
---|
3300 | \modulesynopsis{Provides standard distutils exceptions}
|
---|
3301 |
|
---|
3302 | Provides exceptions used by the Distutils modules. Note that Distutils
|
---|
3303 | modules may raise standard exceptions; in particular, SystemExit is
|
---|
3304 | usually raised for errors that are obviously the end-user's fault
|
---|
3305 | (eg. bad command-line arguments).
|
---|
3306 |
|
---|
3307 | This module is safe to use in \samp{from ... import *} mode; it only exports
|
---|
3308 | symbols whose names start with \code{Distutils} and end with \code{Error}.
|
---|
3309 |
|
---|
3310 | \section{\module{distutils.fancy_getopt}
|
---|
3311 | --- Wrapper around the standard getopt module}
|
---|
3312 | \declaremodule[distutils.fancygetopt]{standard}{distutils.fancy_getopt}
|
---|
3313 | \modulesynopsis{Additional \module{getopt} functionality}
|
---|
3314 |
|
---|
3315 | This module provides a wrapper around the standard \module{getopt}
|
---|
3316 | module that provides the following additional features:
|
---|
3317 |
|
---|
3318 | \begin{itemize}
|
---|
3319 | \item short and long options are tied together
|
---|
3320 | \item options have help strings, so \function{fancy_getopt} could potentially
|
---|
3321 | create a complete usage summary
|
---|
3322 | \item options set attributes of a passed-in object
|
---|
3323 | \item boolean options can have ``negative aliases'' --- eg. if
|
---|
3324 | \longprogramopt{quiet} is the ``negative alias'' of
|
---|
3325 | \longprogramopt{verbose}, then \longprogramopt{quiet} on the command
|
---|
3326 | line sets \var{verbose} to false.
|
---|
3327 |
|
---|
3328 | \end{itemize}
|
---|
3329 |
|
---|
3330 | \XXX{Should be replaced with \module{optik} (which is also now
|
---|
3331 | known as \module{optparse} in Python 2.3 and later).}
|
---|
3332 |
|
---|
3333 | \begin{funcdesc}{fancy_getopt}{options, negative_opt, object, args}
|
---|
3334 | Wrapper function. \var{options} is a list of
|
---|
3335 | \samp{(long_option, short_option, help_string)} 3-tuples as described in the
|
---|
3336 | constructor for \class{FancyGetopt}. \var{negative_opt} should be a dictionary
|
---|
3337 | mapping option names to option names, both the key and value should be in the
|
---|
3338 | \var{options} list. \var{object} is an object which will be used to store
|
---|
3339 | values (see the \method{getopt()} method of the \class{FancyGetopt} class).
|
---|
3340 | \var{args} is the argument list. Will use \code{sys.argv[1:]} if you
|
---|
3341 | pass \code{None} as \var{args}.
|
---|
3342 | \end{funcdesc}
|
---|
3343 |
|
---|
3344 | \begin{funcdesc}{wrap_text}{text, width}
|
---|
3345 | Wraps \var{text} to less than \var{width} wide.
|
---|
3346 |
|
---|
3347 | \warning{Should be replaced with \module{textwrap} (which is available
|
---|
3348 | in Python 2.3 and later).}
|
---|
3349 | \end{funcdesc}
|
---|
3350 |
|
---|
3351 | \begin{classdesc}{FancyGetopt}{\optional{option_table=\code{None}}}
|
---|
3352 | The option_table is a list of 3-tuples: \samp{(long_option,
|
---|
3353 | short_option, help_string)}
|
---|
3354 |
|
---|
3355 | If an option takes an argument, its \var{long_option} should have \code{'='}
|
---|
3356 | appended; \var{short_option} should just be a single character, no \code{':'}
|
---|
3357 | in any case. \var{short_option} should be \code{None} if a \var{long_option}
|
---|
3358 | doesn't have a corresponding \var{short_option}. All option tuples must have
|
---|
3359 | long options.
|
---|
3360 | \end{classdesc}
|
---|
3361 |
|
---|
3362 | The \class{FancyGetopt} class provides the following methods:
|
---|
3363 |
|
---|
3364 | \begin{methoddesc}{getopt}{\optional{args=\code{None}, object=\code{None}}}
|
---|
3365 | Parse command-line options in args. Store as attributes on \var{object}.
|
---|
3366 |
|
---|
3367 | If \var{args} is \code{None} or not supplied, uses \code{sys.argv[1:]}. If
|
---|
3368 | \var{object} is \code{None} or not supplied, creates a new \class{OptionDummy}
|
---|
3369 | instance, stores option values there, and returns a tuple \samp{(args,
|
---|
3370 | object)}. If \var{object} is supplied, it is modified in place and
|
---|
3371 | \function{getopt()} just returns \var{args}; in both cases, the returned
|
---|
3372 | \var{args} is a modified copy of the passed-in \var{args} list, which
|
---|
3373 | is left untouched.
|
---|
3374 | % and args returned are?
|
---|
3375 | \end{methoddesc}
|
---|
3376 |
|
---|
3377 | \begin{methoddesc}{get_option_order}{}
|
---|
3378 | Returns the list of \samp{(option, value)} tuples processed by the
|
---|
3379 | previous run of \method{getopt()} Raises \exception{RuntimeError} if
|
---|
3380 | \method{getopt()} hasn't been called yet.
|
---|
3381 | \end{methoddesc}
|
---|
3382 |
|
---|
3383 | \begin{methoddesc}{generate_help}{\optional{header=\code{None}}}
|
---|
3384 | Generate help text (a list of strings, one per suggested line of
|
---|
3385 | output) from the option table for this \class{FancyGetopt} object.
|
---|
3386 |
|
---|
3387 | If supplied, prints the supplied \var{header} at the top of the help.
|
---|
3388 | \end{methoddesc}
|
---|
3389 |
|
---|
3390 | \section{\module{distutils.filelist} --- The FileList class}
|
---|
3391 | \declaremodule{standard}{distutils.filelist}
|
---|
3392 | \modulesynopsis{The \class{FileList} class, used for poking about the
|
---|
3393 | file system and building lists of files.}
|
---|
3394 |
|
---|
3395 | This module provides the \class{FileList} class, used for poking about
|
---|
3396 | the filesystem and building lists of files.
|
---|
3397 |
|
---|
3398 |
|
---|
3399 | \section{\module{distutils.log} --- Simple PEP 282-style logging}
|
---|
3400 | \declaremodule{standard}{distutils.log}
|
---|
3401 | \modulesynopsis{A simple logging mechanism, \pep{282}-style}
|
---|
3402 |
|
---|
3403 | \warning{Should be replaced with standard \module{logging} module.}
|
---|
3404 |
|
---|
3405 | %\subsubsection{\module{} --- }
|
---|
3406 | %\declaremodule{standard}{distutils.magic}
|
---|
3407 | %\modulesynopsis{ }
|
---|
3408 |
|
---|
3409 |
|
---|
3410 | \section{\module{distutils.spawn} --- Spawn a sub-process}
|
---|
3411 | \declaremodule{standard}{distutils.spawn}
|
---|
3412 | \modulesynopsis{Provides the spawn() function}
|
---|
3413 |
|
---|
3414 | This module provides the \function{spawn()} function, a front-end to
|
---|
3415 | various platform-specific functions for launching another program in a
|
---|
3416 | sub-process.
|
---|
3417 | Also provides \function{find_executable()} to search the path for a given
|
---|
3418 | executable name.
|
---|
3419 |
|
---|
3420 |
|
---|
3421 | \input{sysconfig}
|
---|
3422 |
|
---|
3423 |
|
---|
3424 | \section{\module{distutils.text_file} --- The TextFile class}
|
---|
3425 | \declaremodule[distutils.textfile]{standard}{distutils.text_file}
|
---|
3426 | \modulesynopsis{provides the TextFile class, a simple interface to text files}
|
---|
3427 |
|
---|
3428 | This module provides the \class{TextFile} class, which gives an interface
|
---|
3429 | to text files that (optionally) takes care of stripping comments, ignoring
|
---|
3430 | blank lines, and joining lines with backslashes.
|
---|
3431 |
|
---|
3432 | \begin{classdesc}{TextFile}{\optional{filename=\code{None}, file=\code{None}, **options}}
|
---|
3433 | This class provides a file-like object that takes care of all
|
---|
3434 | the things you commonly want to do when processing a text file
|
---|
3435 | that has some line-by-line syntax: strip comments (as long as \code{\#}
|
---|
3436 | is your comment character), skip blank lines, join adjacent lines by
|
---|
3437 | escaping the newline (ie. backslash at end of line), strip
|
---|
3438 | leading and/or trailing whitespace. All of these are optional
|
---|
3439 | and independently controllable.
|
---|
3440 |
|
---|
3441 | The class provides a \method{warn()} method so you can generate
|
---|
3442 | warning messages that report physical line number, even if the
|
---|
3443 | logical line in question spans multiple physical lines. Also
|
---|
3444 | provides \method{unreadline()} for implementing line-at-a-time lookahead.
|
---|
3445 |
|
---|
3446 | \class{TextFile} instances are create with either \var{filename}, \var{file},
|
---|
3447 | or both. \exception{RuntimeError} is raised if both are \code{None}.
|
---|
3448 | \var{filename} should be a string, and \var{file} a file object (or
|
---|
3449 | something that provides \method{readline()} and \method{close()}
|
---|
3450 | methods). It is recommended that you supply at least \var{filename},
|
---|
3451 | so that \class{TextFile} can include it in warning messages. If
|
---|
3452 | \var{file} is not supplied, \class{TextFile} creates its own using the
|
---|
3453 | \function{open()} built-in function.
|
---|
3454 |
|
---|
3455 | The options are all boolean, and affect the values returned by
|
---|
3456 | \method{readline()}
|
---|
3457 |
|
---|
3458 | \begin{tableiii}{c|l|l}{option name}{option name}{description}{default}
|
---|
3459 | \lineiii{strip_comments}{
|
---|
3460 | strip from \character{\#} to end-of-line, as well as any whitespace
|
---|
3461 | leading up to the \character{\#}---unless it is escaped by a backslash}
|
---|
3462 | {true}
|
---|
3463 | \lineiii{lstrip_ws}{
|
---|
3464 | strip leading whitespace from each line before returning it}
|
---|
3465 | {false}
|
---|
3466 | \lineiii{rstrip_ws}{
|
---|
3467 | strip trailing whitespace (including line terminator!) from
|
---|
3468 | each line before returning it.}
|
---|
3469 | {true}
|
---|
3470 | \lineiii{skip_blanks}{
|
---|
3471 | skip lines that are empty *after* stripping comments and
|
---|
3472 | whitespace. (If both lstrip_ws and rstrip_ws are false,
|
---|
3473 | then some lines may consist of solely whitespace: these will
|
---|
3474 | *not* be skipped, even if \var{skip_blanks} is true.)}
|
---|
3475 | {true}
|
---|
3476 | \lineiii{join_lines}{
|
---|
3477 | if a backslash is the last non-newline character on a line
|
---|
3478 | after stripping comments and whitespace, join the following line
|
---|
3479 | to it to form one logical line; if N consecutive lines end
|
---|
3480 | with a backslash, then N+1 physical lines will be joined to
|
---|
3481 | form one logical line.}
|
---|
3482 | {false}
|
---|
3483 | \lineiii{collapse_join}{
|
---|
3484 | strip leading whitespace from lines that are joined to their
|
---|
3485 | predecessor; only matters if \samp{(join_lines and not lstrip_ws)}}
|
---|
3486 | {false}
|
---|
3487 | \end{tableiii}
|
---|
3488 |
|
---|
3489 | Note that since \var{rstrip_ws} can strip the trailing newline, the
|
---|
3490 | semantics of \method{readline()} must differ from those of the builtin file
|
---|
3491 | object's \method{readline()} method! In particular, \method{readline()}
|
---|
3492 | returns \code{None} for end-of-file: an empty string might just be a
|
---|
3493 | blank line (or an all-whitespace line), if \var{rstrip_ws} is true
|
---|
3494 | but \var{skip_blanks} is not.
|
---|
3495 |
|
---|
3496 | \begin{methoddesc}{open}{filename}
|
---|
3497 | Open a new file \var{filename}. This overrides any \var{file} or
|
---|
3498 | \var{filename} constructor arguments.
|
---|
3499 | \end{methoddesc}
|
---|
3500 |
|
---|
3501 | \begin{methoddesc}{close}{}
|
---|
3502 | Close the current file and forget everything we know about it (including
|
---|
3503 | the filename and the current line number).
|
---|
3504 | \end{methoddesc}
|
---|
3505 |
|
---|
3506 | \begin{methoddesc}{warn}{msg\optional{,line=\code{None}}}
|
---|
3507 | Print (to stderr) a warning message tied to the current logical
|
---|
3508 | line in the current file. If the current logical line in the
|
---|
3509 | file spans multiple physical lines, the warning refers to the
|
---|
3510 | whole range, such as \samp{"lines 3-5"}. If \var{line} is supplied,
|
---|
3511 | it overrides the current line number; it may be a list or tuple
|
---|
3512 | to indicate a range of physical lines, or an integer for a
|
---|
3513 | single physical line.
|
---|
3514 | \end{methoddesc}
|
---|
3515 |
|
---|
3516 | \begin{methoddesc}{readline}{}
|
---|
3517 | Read and return a single logical line from the current file (or
|
---|
3518 | from an internal buffer if lines have previously been ``unread''
|
---|
3519 | with \method{unreadline()}). If the \var{join_lines} option
|
---|
3520 | is true, this may involve reading multiple physical lines
|
---|
3521 | concatenated into a single string. Updates the current line number,
|
---|
3522 | so calling \method{warn()} after \method{readline()} emits a warning
|
---|
3523 | about the physical line(s) just read. Returns \code{None} on end-of-file,
|
---|
3524 | since the empty string can occur if \var{rstrip_ws} is true but
|
---|
3525 | \var{strip_blanks} is not.
|
---|
3526 | \end{methoddesc}
|
---|
3527 | \begin{methoddesc}{readlines}{}
|
---|
3528 | Read and return the list of all logical lines remaining in the current file.
|
---|
3529 | This updates the current line number to the last line of the file.
|
---|
3530 | \end{methoddesc}
|
---|
3531 | \begin{methoddesc}{unreadline}{line}
|
---|
3532 | Push \var{line} (a string) onto an internal buffer that will be
|
---|
3533 | checked by future \method{readline()} calls. Handy for implementing
|
---|
3534 | a parser with line-at-a-time lookahead. Note that lines that are ``unread''
|
---|
3535 | with \method{unreadline} are not subsequently re-cleansed (whitespace
|
---|
3536 | stripped, or whatever) when read with \method{readline}. If multiple
|
---|
3537 | calls are made to \method{unreadline} before a call to \method{readline},
|
---|
3538 | the lines will be returned most in most recent first order.
|
---|
3539 | \end{methoddesc}
|
---|
3540 |
|
---|
3541 | \end{classdesc}
|
---|
3542 |
|
---|
3543 |
|
---|
3544 | \section{\module{distutils.version} --- Version number classes}
|
---|
3545 | \declaremodule{standard}{distutils.version}
|
---|
3546 | \modulesynopsis{implements classes that represent module version numbers. }
|
---|
3547 |
|
---|
3548 | % todo
|
---|
3549 |
|
---|
3550 | %\section{Distutils Commands}
|
---|
3551 | %
|
---|
3552 | %This part of Distutils implements the various Distutils commands, such
|
---|
3553 | %as \code{build}, \code{install} \&c. Each command is implemented as a
|
---|
3554 | %separate module, with the command name as the name of the module.
|
---|
3555 |
|
---|
3556 | \section{\module{distutils.cmd} --- Abstract base class for Distutils commands}
|
---|
3557 | \declaremodule{standard}{distutils.cmd}
|
---|
3558 | \modulesynopsis{This module provides the abstract base class Command. This
|
---|
3559 | class is subclassed by the modules in the \refmodule{distutils.command}
|
---|
3560 | subpackage. }
|
---|
3561 |
|
---|
3562 | This module supplies the abstract base class \class{Command}.
|
---|
3563 |
|
---|
3564 | \begin{classdesc}{Command}{dist}
|
---|
3565 | Abstract base class for defining command classes, the ``worker bees''
|
---|
3566 | of the Distutils. A useful analogy for command classes is to think of
|
---|
3567 | them as subroutines with local variables called \var{options}. The
|
---|
3568 | options are declared in \method{initialize_options()} and defined
|
---|
3569 | (given their final values) in \method{finalize_options()}, both of
|
---|
3570 | which must be defined by every command class. The distinction between
|
---|
3571 | the two is necessary because option values might come from the outside
|
---|
3572 | world (command line, config file, ...), and any options dependent on
|
---|
3573 | other options must be computed after these outside influences have
|
---|
3574 | been processed --- hence \method{finalize_options()}. The body of the
|
---|
3575 | subroutine, where it does all its work based on the values of its
|
---|
3576 | options, is the \method{run()} method, which must also be implemented
|
---|
3577 | by every command class.
|
---|
3578 |
|
---|
3579 | The class constructor takes a single argument \var{dist}, a
|
---|
3580 | \class{Distribution} instance.
|
---|
3581 | \end{classdesc}
|
---|
3582 |
|
---|
3583 |
|
---|
3584 | \section{\module{distutils.command} --- Individual Distutils commands}
|
---|
3585 | \declaremodule{standard}{distutils.command}
|
---|
3586 | \modulesynopsis{This subpackage contains one module for each standard Distutils command.}
|
---|
3587 |
|
---|
3588 | %\subsubsection{Individual Distutils commands}
|
---|
3589 |
|
---|
3590 | % todo
|
---|
3591 |
|
---|
3592 | \section{\module{distutils.command.bdist} --- Build a binary installer}
|
---|
3593 | \declaremodule{standard}{distutils.command.bdist}
|
---|
3594 | \modulesynopsis{Build a binary installer for a package}
|
---|
3595 |
|
---|
3596 | % todo
|
---|
3597 |
|
---|
3598 | \section{\module{distutils.command.bdist_packager} --- Abstract base class for packagers}
|
---|
3599 | \declaremodule[distutils.command.bdistpackager]{standard}{distutils.command.bdist_packager}
|
---|
3600 | \modulesynopsis{Abstract base class for packagers}
|
---|
3601 |
|
---|
3602 | % todo
|
---|
3603 |
|
---|
3604 | \section{\module{distutils.command.bdist_dumb} --- Build a ``dumb'' installer}
|
---|
3605 | \declaremodule[distutils.command.bdistdumb]{standard}{distutils.command.bdist_dumb}
|
---|
3606 | \modulesynopsis{Build a ``dumb'' installer - a simple archive of files}
|
---|
3607 |
|
---|
3608 | % todo
|
---|
3609 |
|
---|
3610 |
|
---|
3611 | \section{\module{distutils.command.bdist_rpm} --- Build a binary distribution as a Redhat RPM and SRPM}
|
---|
3612 | \declaremodule[distutils.command.bdistrpm]{standard}{distutils.command.bdist_rpm}
|
---|
3613 | \modulesynopsis{Build a binary distribution as a Redhat RPM and SRPM}
|
---|
3614 |
|
---|
3615 | % todo
|
---|
3616 |
|
---|
3617 | \section{\module{distutils.command.bdist_wininst} --- Build a Windows installer}
|
---|
3618 | \declaremodule[distutils.command.bdistwininst]{standard}{distutils.command.bdist_wininst}
|
---|
3619 | \modulesynopsis{Build a Windows installer}
|
---|
3620 |
|
---|
3621 | % todo
|
---|
3622 |
|
---|
3623 | \section{\module{distutils.command.sdist} --- Build a source distribution}
|
---|
3624 | \declaremodule{standard}{distutils.command.sdist}
|
---|
3625 | \modulesynopsis{Build a source distribution}
|
---|
3626 |
|
---|
3627 | % todo
|
---|
3628 |
|
---|
3629 | \section{\module{distutils.command.build} --- Build all files of a package}
|
---|
3630 | \declaremodule{standard}{distutils.command.build}
|
---|
3631 | \modulesynopsis{Build all files of a package}
|
---|
3632 |
|
---|
3633 | % todo
|
---|
3634 |
|
---|
3635 | \section{\module{distutils.command.build_clib} --- Build any C libraries in a package}
|
---|
3636 | \declaremodule[distutils.command.buildclib]{standard}{distutils.command.build_clib}
|
---|
3637 | \modulesynopsis{Build any C libraries in a package}
|
---|
3638 |
|
---|
3639 | % todo
|
---|
3640 |
|
---|
3641 | \section{\module{distutils.command.build_ext} --- Build any extensions in a package}
|
---|
3642 | \declaremodule[distutils.command.buildext]{standard}{distutils.command.build_ext}
|
---|
3643 | \modulesynopsis{Build any extensions in a package}
|
---|
3644 |
|
---|
3645 | % todo
|
---|
3646 |
|
---|
3647 | \section{\module{distutils.command.build_py} --- Build the .py/.pyc files of a package}
|
---|
3648 | \declaremodule[distutils.command.buildpy]{standard}{distutils.command.build_py}
|
---|
3649 | \modulesynopsis{Build the .py/.pyc files of a package}
|
---|
3650 |
|
---|
3651 | % todo
|
---|
3652 |
|
---|
3653 | \section{\module{distutils.command.build_scripts} --- Build the scripts of a package}
|
---|
3654 | \declaremodule[distutils.command.buildscripts]{standard}{distutils.command.build_scripts}
|
---|
3655 | \modulesynopsis{Build the scripts of a package}
|
---|
3656 |
|
---|
3657 | % todo
|
---|
3658 |
|
---|
3659 | \section{\module{distutils.command.clean} --- Clean a package build area}
|
---|
3660 | \declaremodule{standard}{distutils.command.clean}
|
---|
3661 | \modulesynopsis{Clean a package build area}
|
---|
3662 |
|
---|
3663 | % todo
|
---|
3664 |
|
---|
3665 | \section{\module{distutils.command.config} --- Perform package configuration}
|
---|
3666 | \declaremodule{standard}{distutils.command.config}
|
---|
3667 | \modulesynopsis{Perform package configuration}
|
---|
3668 |
|
---|
3669 | % todo
|
---|
3670 |
|
---|
3671 | \section{\module{distutils.command.install} --- Install a package}
|
---|
3672 | \declaremodule{standard}{distutils.command.install}
|
---|
3673 | \modulesynopsis{Install a package}
|
---|
3674 |
|
---|
3675 | % todo
|
---|
3676 |
|
---|
3677 | \section{\module{distutils.command.install_data}
|
---|
3678 | --- Install data files from a package}
|
---|
3679 | \declaremodule[distutils.command.installdata]{standard}{distutils.command.install_data}
|
---|
3680 | \modulesynopsis{Install data files from a package}
|
---|
3681 |
|
---|
3682 | % todo
|
---|
3683 |
|
---|
3684 | \section{\module{distutils.command.install_headers}
|
---|
3685 | --- Install C/\Cpp{} header files from a package}
|
---|
3686 | \declaremodule[distutils.command.installheaders]{standard}{distutils.command.install_headers}
|
---|
3687 | \modulesynopsis{Install C/\Cpp{} header files from a package}
|
---|
3688 |
|
---|
3689 | % todo
|
---|
3690 |
|
---|
3691 | \section{\module{distutils.command.install_lib}
|
---|
3692 | --- Install library files from a package}
|
---|
3693 | \declaremodule[distutils.command.installlib]{standard}{distutils.command.install_lib}
|
---|
3694 | \modulesynopsis{Install library files from a package}
|
---|
3695 |
|
---|
3696 | % todo
|
---|
3697 |
|
---|
3698 | \section{\module{distutils.command.install_scripts}
|
---|
3699 | --- Install script files from a package}
|
---|
3700 | \declaremodule[distutils.command.installscripts]{standard}{distutils.command.install_scripts}
|
---|
3701 | \modulesynopsis{Install script files from a package}
|
---|
3702 |
|
---|
3703 | % todo
|
---|
3704 |
|
---|
3705 | \section{\module{distutils.command.register}
|
---|
3706 | --- Register a module with the Python Package Index}
|
---|
3707 | \declaremodule{standard}{distutils.command.register}
|
---|
3708 | \modulesynopsis{Register a module with the Python Package Index}
|
---|
3709 |
|
---|
3710 | The \code{register} command registers the package with the Python Package
|
---|
3711 | Index. This is described in more detail in \pep{301}.
|
---|
3712 | % todo
|
---|
3713 |
|
---|
3714 | \section{Creating a new Distutils command}
|
---|
3715 |
|
---|
3716 | This section outlines the steps to create a new Distutils command.
|
---|
3717 |
|
---|
3718 | A new command lives in a module in the \module{distutils.command}
|
---|
3719 | package. There is a sample template in that directory called
|
---|
3720 | \file{command_template}. Copy this file to a new module with the
|
---|
3721 | same name as the new command you're implementing. This module should
|
---|
3722 | implement a class with the same name as the module (and the command).
|
---|
3723 | So, for instance, to create the command \code{peel_banana} (so that users
|
---|
3724 | can run \samp{setup.py peel_banana}), you'd copy \file{command_template}
|
---|
3725 | to \file{distutils/command/peel_banana.py}, then edit it so that it's
|
---|
3726 | implementing the class \class{peel_banana}, a subclass of
|
---|
3727 | \class{distutils.cmd.Command}.
|
---|
3728 |
|
---|
3729 | Subclasses of \class{Command} must define the following methods.
|
---|
3730 |
|
---|
3731 | \begin{methoddesc}{initialize_options()}
|
---|
3732 | Set default values for all the options that this command
|
---|
3733 | supports. Note that these defaults may be overridden by other
|
---|
3734 | commands, by the setup script, by config files, or by the
|
---|
3735 | command-line. Thus, this is not the place to code dependencies
|
---|
3736 | between options; generally, \method{initialize_options()} implementations
|
---|
3737 | are just a bunch of \samp{self.foo = None} assignments.
|
---|
3738 | \end{methoddesc}
|
---|
3739 |
|
---|
3740 | \begin{methoddesc}{finalize_options}{}
|
---|
3741 | Set final values for all the options that this command supports.
|
---|
3742 | This is always called as late as possible, ie. after any option
|
---|
3743 | assignments from the command-line or from other commands have been
|
---|
3744 | done. Thus, this is the place to to code option dependencies: if
|
---|
3745 | \var{foo} depends on \var{bar}, then it is safe to set \var{foo} from
|
---|
3746 | \var{bar} as long as \var{foo} still has the same value it was assigned in
|
---|
3747 | \method{initialize_options()}.
|
---|
3748 | \end{methoddesc}
|
---|
3749 | \begin{methoddesc}{run}{}
|
---|
3750 | A command's raison d'etre: carry out the action it exists to
|
---|
3751 | perform, controlled by the options initialized in
|
---|
3752 | \method{initialize_options()}, customized by other commands, the setup
|
---|
3753 | script, the command-line, and config files, and finalized in
|
---|
3754 | \method{finalize_options()}. All terminal output and filesystem
|
---|
3755 | interaction should be done by \method{run()}.
|
---|
3756 | \end{methoddesc}
|
---|
3757 |
|
---|
3758 | \var{sub_commands} formalizes the notion of a ``family'' of commands,
|
---|
3759 | eg. \code{install} as the parent with sub-commands \code{install_lib},
|
---|
3760 | \code{install_headers}, etc. The parent of a family of commands
|
---|
3761 | defines \var{sub_commands} as a class attribute; it's a list of
|
---|
3762 | 2-tuples \samp{(command_name, predicate)}, with \var{command_name} a string
|
---|
3763 | and \var{predicate} an unbound method, a string or None.
|
---|
3764 | \var{predicate} is a method of the parent command that
|
---|
3765 | determines whether the corresponding command is applicable in the
|
---|
3766 | current situation. (Eg. we \code{install_headers} is only applicable if
|
---|
3767 | we have any C header files to install.) If \var{predicate} is None,
|
---|
3768 | that command is always applicable.
|
---|
3769 |
|
---|
3770 | \var{sub_commands} is usually defined at the *end* of a class, because
|
---|
3771 | predicates can be unbound methods, so they must already have been
|
---|
3772 | defined. The canonical example is the \command{install} command.
|
---|
3773 |
|
---|
3774 | %
|
---|
3775 | % The ugly "%begin{latexonly}" pseudo-environments are really just to
|
---|
3776 | % keep LaTeX2HTML quiet during the \renewcommand{} macros; they're
|
---|
3777 | % not really valuable.
|
---|
3778 | %
|
---|
3779 |
|
---|
3780 | %begin{latexonly}
|
---|
3781 | \renewcommand{\indexname}{Module Index}
|
---|
3782 | %end{latexonly}
|
---|
3783 | \input{moddist.ind} % Module Index
|
---|
3784 |
|
---|
3785 | %begin{latexonly}
|
---|
3786 | \renewcommand{\indexname}{Index}
|
---|
3787 | %end{latexonly}
|
---|
3788 | \input{dist.ind} % Index
|
---|
3789 |
|
---|
3790 | \end{document}
|
---|