blob: 79d716febe961d31c4d0e7e7a804d2361f8955f5 [file] [log] [blame]
Greg Ward7c1e5f62000-03-10 01:56:58 +00001\documentclass{howto}
2\usepackage{ltxmarkup}
3\usepackage{times}
Greg Ward7593eb32000-04-09 03:59:15 +00004\usepackage{distutils}
Greg Ward7c1e5f62000-03-10 01:56:58 +00005
6\title{Installing Python Modules}
7
8% The audience for this document includes people who don't know anything
9% about Python and aren't about to learn the language just in order to
10% install and maintain it for their users, i.e. system administrators.
11% Thus, I have to be sure to explain the basics at some point:
12% sys.path and PYTHONPATH at least. Should probably give pointers to
13% other docs on "import site", PYTHONSTARTUP, PYTHONHOME, etc.
14%
15% Also, I need to take into account that most modules out there don't
16% (yet) use Distutils: briefly explain the old Makefile.pre.in
17% convention (maybe move material from the E&E manual to here?), and
18% explain where to copy .py and .so files manually if the distribution
19% doesn't provide a mechanism for doing so.
20%
21% Finally, it might be useful to include all the material from my "Care
22% and Feeding of a Python Installation" talk in here somewhere. Yow!
23
Greg Ward7c1e5f62000-03-10 01:56:58 +000024\author{Greg Ward}
25\authoraddress{E-mail: \email{gward@python.net}}
26
Greg Ward7c1e5f62000-03-10 01:56:58 +000027
28\begin{document}
29
30\maketitle
31
32%\begin{abstract}
33%\noindent
34%Abstract this!
35%\end{abstract}
36
37\tableofcontents
38
39\section{Introduction}
40\label{sec:intro}
41
Greg Ward6002ffc2000-04-09 20:54:50 +000042Although Python's extensive standard library covers many programming
43needs, there often comes a time when you need to add some new
44functionality to your Python installation in the form of third-party
45modules. This might be necessary to support your own programming, or to
46support an application that you want to use and that happens to be
47written in Python.
48
49In the past, there has been little support for adding third-party
50modules to an existing Python installation. With the introduction of
51the Python Distribution Utilities (Distutils for short) in Python 1.6,
52this is starting to change. Not everything will change overnight,
53though, so while this document concentrates on installing module
54distributions that use the Distutils, we will also spend some time
55dealing with the old ways.
56
57This document is aimed primarily at the people who need to install
58third-party Python modules: end-users and system administrators who just
59need to get some Python application running, and existing Python
60programmers who want to add some new goodies to their toolbox. You
61don't need to know Python to read this document; there will be some
62brief forays into using Python's interactive mode to explore your
63installation, but that's it. If you're looking for information on how
64to distribute your own Python modules so that others may use them, see
65the ``Distributing Python Modules'' manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +000066
67
Greg Ward6002ffc2000-04-09 20:54:50 +000068\subsection{Best case: trivial installation}
69\label{sec:trivial-inst}
70
71In the best case, someone will have prepared a special version of the
72module distribution you want to install that is targeted specifically at
73your platform and is installed just like any other software on your
74platform. For example, the module developer might make an executable
75installer available for Windows users, an RPM package for users of
76RPM-based Linux systems (Red Hat, SuSE, Mandrake, and many others), a
77Debian package for users of Debian-based Linux systems (Debian proper,
78Caldera, Corel, etc.), and so forth.
79
80In that case, you would download the installer appropriate to your
81platform and do the usual thing with it: run it if it's an executable
82installer, \code{rpm -I} it if it's an RPM, etc. You don't need to run
83Python or a setup script, you don't need to compile anything---you might
84not even need to read any instructions (although it's always a good idea
85to do so anyways).
86
87Of course, things will not always be that easy. You might be interested
88in a module distribution that nobody has created an easy-to-use
89installer for use on your platform. In that case, you'll have to start
90with the source distribution released by the module's
91author/maintainer. Installing from a source distribution is not too
92hard, as long as the modules are packaged in the standard way. The bulk
93of this document is about building and installing modules that were
94packaged in the standard way.
Greg Ward7c1e5f62000-03-10 01:56:58 +000095
96
Greg Ward6002ffc2000-04-09 20:54:50 +000097\subsection{The new standard: Distutils}
98\label{sec:new-standard}
99
100If you download a module source distribution, you can tell pretty
101quickly if was packaged and distributed in the standard way, i.e. using
102the Distutils. First, the distribution's name and version number will
103be featured prominently in the name of the downloaded archive, e.g.
104\file{foo-1.0.tar.gz} or \file{widget-0.9.7.zip}. Next, the archive
105will unpack into a similarly-named directory: \file{foo-1.0} or
106\file{widget-0.9.7}. Additionally, the distribution will contain a
107setup script \file{setup.py}, and a \file{README.txt} (or possibly
108\file{README}), which should explain that building and installing the
109module distribution is a simple matter of running
110\begin{verbatim}
111python setup.py install
112\end{verbatim}
113
114If all these things are true, then you already know how to build and
115install the modules you've just downloaded: run the command above.
116Unless you need to install things in a non-standard way or customize the
117build process, you don't really need this manual. Or rather, the above
118command is everything you need to get out of this manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000119
120
Greg Ward6002ffc2000-04-09 20:54:50 +0000121\subsection{The old way: no standards}
122\label{sec:old-way}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000123
Greg Ward6002ffc2000-04-09 20:54:50 +0000124Before the Distutils, there was no infrastructure to support installing
125third-party modules in a consistent, standardized way. Thus, it's not
126really possible to write a general manual for installing Python modules
127that don't use the Distutils; the only truly general statement that can
128be made is, ``Read the module's own documentation on installation.''
129
130However, such documentation is often woefully inadequate, assuming that
131you are familiar with how the Python library is laid out and will
132somehow just know where to copy various files in order for Python to
133find them. Also, since there is only one way to lay out the Python
134library on a given platform, this manual is a good place to learn that
135layout. That way, if you do have to manually install an old,
136pre-Distutils module distribution, you won't be completely on your own.
137
138Additionally, while there has not previously been a standard
139installation mechanism, Python has had some standard machinery for
140building extensions on Unix since Python \XXX{version?}. This machinery
141(the \file{Makefile.pre.in} file) is superseded by the Distutils, but it
142will no doubt live on in older module distributions for a while. This
143\file{Makefile.pre.in} mechanism is documented in the ``Extending \&
144Embedding Python'' manual, but that manual is aimed at module
145developers---hence, we include documentation for builders/installers
146here.
147
148All of the pre-Distutils material is tucked away in
149section~\ref{sec:pre-distutils}.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000150
151
Greg Ward29576562000-03-18 15:11:50 +0000152\section{Standard Build and Install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000153\label{sec:normal-install}
154
Greg Ward6002ffc2000-04-09 20:54:50 +0000155As described in section~\ref{sec:new-standard}, building and installing
156a module distribution using the Distutils is usually one simple command:
157\begin{verbatim}
158python setup.py install
159\end{verbatim}
160On Unix, you'd run this command from a shell prompt; on Windows, you
161have to open a command prompt window and do it there; on Mac OS ...
162\XXX{what the heck do you do on Mac OS?}.
163
164
165\subsection{Platform variations}
166
167You should always run the setup command from the distribution root
168directory, i.e. the top-level subdirectory that the module source
169distribution unpacks into. For example, if you've just downloaded a
170module source distribution \file{foo-1.0.tar.gz} onto a Unix system, the
171normal thing to do is:
172\begin{verbatim}
173gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
174cd foo-1.0
175python setup.py install
176\end{verbatim}
177
178On Windows, you'd probably unpack the archive before opening the command
179prompt. If you downloaded the archive file to \file{C:\bslash{}Temp}, then
180it probably unpacked (depending on your software) into
181\file{C:\bslash{}Temp\bslash{}foo-1.0}; from the command prompt window, you would
182then run
183\begin{verbatim}
184cd c:\temp\foo-1.0
185python setup.py install
186\end{verbatim}
187
188On Mac OS, ... \XXX{again, how do you run Python scripts on Mac OS?}
189
190
191\subsection{Splitting the job up}
192
193Running \code{setup.py install} builds and installs all modules in one
194fell swoop. If you prefer to work incrementally---especially useful if
195you want to customize the build process, or if things are going
196wrong---you can use the setup script to do one thing at a time.
197
198For example, you can build everything in one step, and then install
199everything in a second step, by invoking the setup script twice:
200\begin{verbatim}
201python setup.py build
202python setup.py install
203\end{verbatim}
204(If you do this, you will notice that running the \command{install}
205command first runs the \command{build} command, which will quickly
206notice that it has nothing to do, since everything in the \file{build}
207directory is up-to-date.
Greg Ward29576562000-03-18 15:11:50 +0000208
Greg Ward7c1e5f62000-03-10 01:56:58 +0000209% This will cover:
210% * setup.py install (the usual thing)
211% * setup.py build (if you like doing things one-at-a-time)
212% * setup.py build install (not necessary unless you need to supply
213% build options--ref. next section)
214% * where things are installed, on Unix and Windows (Mac...?)
215% * simple custom install: "install --prefix=$HOME"
216\comingsoon
217
218
Greg Ward7c1e5f62000-03-10 01:56:58 +0000219
Greg Ward29576562000-03-18 15:11:50 +0000220% takes eight args (four pairs):
221% pure module distribution base + directory
222% non-pure module distribution base + directory
223% script base + directory
224% data base + directory
225% ...and will no doubt take more args in future!
226\newcommand{\installscheme}[8]
227 {\begin{tableiii}{lll}{textrm}
228 {Type of file}
229 {Installation Directory}
230 {Override option}
231 \lineiii{pure module distribution}
232 {\filevar{#1}\filenq{#2}}
233 {\option{install-purelib}}
234 \lineiii{non-pure module distribution}
235 {\filevar{#3}\filenq{#4}}
236 {\option{install-platlib}}
237 \lineiii{scripts}
238 {\filevar{#5}\filenq{#6}}
239 {\option{install-scripts}}
240 \lineiii{data}
241 {\filevar{#7}\filenq{#8}}
242 {\option{install-data}}
243 \end{tableiii}}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000244
245
Greg Ward7c1e5f62000-03-10 01:56:58 +0000246
247
Greg Ward29576562000-03-18 15:11:50 +0000248\section{Alternate Installation}
249\label{sec:alt-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000250
Greg Ward29576562000-03-18 15:11:50 +0000251Often, it is necessary or desirable to install modules to a location
252other than the standard location for third-party Python modules. For
253example, on a Unix system you might not have permission to write to the
254standard third-party module directory. Or you might wish to try out a
255module before making it a standard part of your local Python
256installation; this is especially true when upgrading a distribution
257already present: you want to make sure your existing base of scripts
258still works with the new version before actually upgrading.
259
260The Distutils \command{install} command is designed to make installing
261module distributions to an alternate location simple and painless. The
262basic idea is that you supply a base directory for the installation, and
263the \command{install} command picks a set of directories (called an
264\emph{installation scheme}) under this base directory in which to
265install files. The details differ across platforms, so read whichever
266of the following section applies to you.
267
268
269\subsection{Alternate installation: Unix (the home scheme)}
270\label{sec:alt-unix-prefix}
271
272Under Unix, there are two ways to perform an alternate installation.
273The ``prefix scheme'' is similar to how alternate installation works
274under Windows and Mac OS, but is not necessarily the most useful way to
275maintain a personal Python library. Hence, we document the more
276convenient and commonly useful ``home scheme'' first.
277
278The idea behind the ``home scheme'' is that you are building and
279maintaining a personal stash of Python modules, probably under your home
280directory. Installing a new module distribution is as simple as
Greg Ward169f91b2000-03-10 01:57:51 +0000281\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000282python setup.py install --home # arg, doesn't work (getopt)
Greg Ward169f91b2000-03-10 01:57:51 +0000283\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000284or
285\begin{verbatim}
286python setup.py install --home=<dir>
287\end{verbatim}
288where you can supply any directory you like for the \option{home}
289option. If you don't supply a directory (as in the first example
290above), the \command{install} command uses the \code{HOME} environment
291variable (or your official home directory as supplied by the password
292file, if \code{HOME} is not defined).
293
294The \option{home} option defines the installation base directory. Files
295are installed to the following directories under the installation base
296as follows:
297\installscheme{home}{/lib/python}
298 {home}{/lib/python}
299 {home}{/bin}
300 {home}{/share}
301
302\subsection{Alternate installation: Unix (the prefix scheme)}
303\label{sec:alt-unix-home}
304
305The ``prefix scheme'' is useful when you wish to use one Python
306installation to perform the build/install (i.e., to run the setup
307script), but install modules into the third-party module directory of a
308different Python installation (or something that looks like a different
309Python installation). If this sounds a trifle unusual, it is---that's
310why the ``home scheme'' comes first. However, there are at least two
311known cases where the prefix scheme will be useful.
312
313First, consider that many Linux distribution put Python in \file{/usr},
314rather than the more traditional \file{/usr/local}. This is entirely
315appropriate, since in those cases Python is part of ``the system''
316rather than a local add-on. However, if you are installing Python
317modules from source, you probably want them to go in
318\file{/usr/local/lib/python1.\filevar{X}} rather than
319\file{/usr/lib/python1.\filevar{X}}. This can be done with
320\begin{verbatim}
321/usr/bin/python setup.py install --prefix=/usr/local
322\end{verbatim}
323
324Another possibility is a network filesystem where the name used to write
325to a remote directory is different from the name used to read it: for
326example, the Python interpreter accessed as \file{/usr/local/bin/python}
327might search for modules in \file{/usr/local/lib/python1.\filevar{X}},
328but those modules would have to be installed to, say,
329\file{/mnt/\filevar{@server}/export/lib/python1.\filevar{X}}. This
330could be done with
331\begin{verbatim}
332/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
333\end{verbatim}
334
335In either case, the \option{prefix} option defines the installation
336base, and the \option{exec-prefix} option defines the platform-specific
337installation base, which is used for platform-specific files.
338(Currently, this just means non-pure module distributions, but could be
339expanded to C libraries, binary executables, etc.) If
340\option{exec-prefix} is not supplied, it defaults to \option{prefix}.
341Files are installed as follows:
342
343\installscheme{prefix}{/lib/python1.\filevar{X}/site-packages}
344 {exec-prefix}{/lib/python1.\filevar{X}/site-packages}
345 {prefix}{/bin}
346 {prefix}{/share}
347
348There is no requirement that \option{prefix} or \option{exec-prefix}
349actually point to an alternate Python installation; if the directories
350listed above do not already exist, they are created at installation
351time.
352
353Incidentally, the real reason the prefix scheme is important is simply
354that a standard Unix installation uses the prefix scheme, but with
355\option{prefix} and \option{exec-prefix} supplied by Python itself (as
356\code{sys.prefix} and \code{sys.exec\_prefix}). Thus, you might think
357you'll never use the prefix scheme, but every time you run \code{python
358 setup.py install} without any other options, you're using it.
359
360Note that installing extensions to an alternate Python installation has
361no effect on how those extensions are built: in particular, the Python
362header files (\file{Python.h} and friends) installed with the Python
363interpreter used to run the setup script will be used in compiling
364extensions. It is your responsibility to ensure that the interpreter
365used to run extensions installed in this way is compatibile with the
366interpreter used to build them. The best way to ensure this is that the
367two interpreters are the same version of Python (possibly different
368builds, or possibly copies of the same build). (Of course, if your
369\option{prefix} and \option{exec-prefix} don't even point to an
370alternate Python installation, this is immaterial.)
371
372
373\subsection{Alternate installation: Windows}
374\label{sec:alt-windows}
375
376Since Windows has no conception of a user's home directory, and since
377the standard Python installation under Windows is simpler than that
378under Unix, there's no point in having separate \option{prefix} and
379\option{home} options. Just use the \option{prefix} option to specify
380a base directory, e.g.
381\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000382python setup.py install --prefix="\Temp\Python"
Greg Ward29576562000-03-18 15:11:50 +0000383\end{verbatim}
384to install modules to the \file{\bslash{}Temp} directory on the current
385drive.
386
387The installation base is defined by the \option{prefix} option; the
388\option{exec-prefix} option is not supported under Windows. Files are
389installed as follows:
390\installscheme{prefix}{}
391 {prefix}{}
392 {prefix}{\bslash{}Scripts}
393 {prefix}{\bslash{}Data}
394
395
396\subsection{Alternate installation: Mac OS}
397\label{sec:alt-macos}
398
399Like Windows, Mac OS has no notion of home directories (or even of
400users), and a fairly simple standard Python installation. Thus, only a
401\option{prefix} option is needed. It defines the installation base, and
402files are installed under it as follows:
403
Greg Ward6002ffc2000-04-09 20:54:50 +0000404\XXX{how do MacPython users run the interpreter with command-line args?}
Greg Ward29576562000-03-18 15:11:50 +0000405
406\installscheme{prefix}{:Lib}
407 {prefix}{:Mac:PlugIns}
Greg Ward8e14f052000-03-22 01:00:23 +0000408 {prefix}{:Scripts}
409 {prefix}{:Data}
Greg Ward29576562000-03-18 15:11:50 +0000410
Greg Ward6002ffc2000-04-09 20:54:50 +0000411\XXX{Corran Webster says: ``Modules are found in either \file{:Lib} or
Greg Ward29576562000-03-18 15:11:50 +0000412\file{:Mac:Lib}, while extensions usually go in
413\file{:Mac:PlugIns}''---does this mean that non-pure distributions should
414be divided between \file{:Mac:PlugIns} and \file{:Mac:Lib}? If so, that
415changes the granularity at which we care about modules: instead of
416``modules from pure distributions'' and ``modules from non-pure
417distributions'', it becomes ``modules from pure distributions'',
418``Python modules from non-pure distributions'', and ``extensions from
Greg Ward6002ffc2000-04-09 20:54:50 +0000419non-pure distributions''. Is this necessary?!?}
Greg Ward29576562000-03-18 15:11:50 +0000420
421
422\section{Custom Installation}
423\label{sec:custom-install}
424
425Sometimes, the alternate installation schemes described in
426section~\ref{sec:alt-install} just don't do what you want. You might
427want to tweak just one or two directories while keeping everything under
428the same base directory, or you might want to completely redefine the
429installation scheme. In either case, you're creating a \emph{custom
430 installation scheme}.
431
432You probably noticed the column of ``override options'' in the tables
433describing the alternate installation schemes above. Those options are
434how you define a custom installation scheme. These override options can
435be relative, absolute, or explicitly defined in terms of one of the
436installation base directories. (There are two installation base
437directories, and they are normally the same---they only differ when you
438use the Unix ``prefix scheme'' and supply different \option{prefix} and
439\option{exec-prefix} options.)
440
441For example, say you're installing a module distribution to your home
442directory under Unix---but you want scripts to go in
443\file{\tilde/scripts} rather than \file{\tilde/bin}. As you might
444expect, you can override this directory with the
445\option{install-scripts} option; in this case, it makes most sense to
446supply a relative path, which will be interpreted relative to the
447installation base directory (your home directory, in this case):
448\begin{verbatim}
449python setup.py install --home --install-scripts=scripts
450\end{verbatim}
451
452Another Unix example: suppose your Python installation was built and
453installed with a prefix of \file{/usr/local/python}, so under a standard
454installation scripts will wind up in \file{/usr/local/python/bin}. If
455you want them in \file{/usr/local/bin} instead, you would supply this
456absolute directory for the \option{install-scripts} option:
457\begin{verbatim}
458python setup.py install --install-scripts=/usr/local/bin
459\end{verbatim}
460(This performs an installation using the ``prefix scheme,'' where the
461prefix is whatever your Python interpreter was installed with---
462\file{/usr/local/python} in this case.)
463
464If you maintain Python on Windows, you might want third-party modules to
465live in a subdirectory of \filevar{prefix}, rather than right in
466\filevar{prefix} itself. This is almost as easy as customizing the
467script installation directory---you just have to remember that there are
468two types of modules to worry about, pure modules and non-pure modules
469(i.e., modules from a non-pure distribution). For example:
470\begin{verbatim}
471python setup.py install --install-purelib=Site --install-platlib=Site
472\end{verbatim}
473The specified installation directories are relative to \filevar{prefix}.
474Of course, you also have to ensure that these directories are in
475Python's module search path, e.g. by putting a \file{.pth} file in
Greg Ward6002ffc2000-04-09 20:54:50 +0000476\filevar{prefix} (\XXX{should have a section describing .pth files and
477 cross-ref it here}).
Greg Ward29576562000-03-18 15:11:50 +0000478
479If you want to define an entire installation scheme, you just have to
480supply all of the installation directory options. The recommended way
481to do this is to supply relative paths; for example, if want to maintain
482all Python module-related files under \file{python} in your home
483directory, and you want a separate directory for each platform that you
484use your home directory from, you might define the following
485installation scheme:
486\begin{verbatim}
487python setup.py install --home \
488 --install-purelib=python/lib \
489 --install-platlib=python/lib.$PLAT \
490 --install-scripts=python/scripts
491 --install-data=python/data
492\end{verbatim}
493or, equivalently,
494\begin{verbatim}
495python setup.py install --home=~/python \
496 --install-purelib=lib \
497 --install-platlib=lib.$PLAT \
498 --install-scripts=scripts
499 --install-data=data
500\end{verbatim}
501\code{\$PLAT} is not (necessarily) an environment variable---it will be
502expanded by the Distutils as it parses your command line options (just
503as it does when parsing your configuration file(s)).
504
505Obviously, specifying the entire installation scheme every time you
506install a new module distribution would be very tedious. Thus, you can
507put these options into your Distutils config file (see
508section~\ref{sec:config-files}):
Greg Ward169f91b2000-03-10 01:57:51 +0000509\begin{verbatim}
510[install]
Greg Ward29576562000-03-18 15:11:50 +0000511install-base=$HOME
512install-purelib=python/lib
513install-platlib=python/lib.$PLAT
514install-scripts=python/scripts
515install-data=python/data
Greg Ward169f91b2000-03-10 01:57:51 +0000516\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000517or, equivalently,
Greg Ward169f91b2000-03-10 01:57:51 +0000518\begin{verbatim}
519[install]
Greg Ward29576562000-03-18 15:11:50 +0000520install-base=$HOME/python
521install-purelib=lib
522install-platlib=lib.$PLAT
523install-scripts=scripts
524install-data=data
Greg Ward169f91b2000-03-10 01:57:51 +0000525\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000526Note that these two are \emph{not} equivalent if you supply a different
527installation base directory when you run the setup script. For example,
Greg Ward7c1e5f62000-03-10 01:56:58 +0000528\begin{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000529python setup.py --install-base=/tmp
Greg Ward7c1e5f62000-03-10 01:56:58 +0000530\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000531would install pure modules to \filevar{/tmp/python/lib} in the first
532case, and to \filevar{/tmp/lib} in the second case. (For the second
533case, you probably want to supply an installation base of
534\file{/tmp/python}.)
Greg Ward169f91b2000-03-10 01:57:51 +0000535
Greg Ward29576562000-03-18 15:11:50 +0000536You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
537sample configuration file input. These are Distutils configuration
538variables, which bear a strong resemblance to environment variables. In
539fact, you can use environment variables in config files, but the
540Distutils additionally define a few extra variables that may not be in
541your environment, such as \code{\$PATH}. See
542section~\ref{sec:config-files} for details.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000543
Greg Ward6002ffc2000-04-09 20:54:50 +0000544\XXX{need some Windows and Mac OS examples---when would custom
545 installation schemes be needed on those platforms?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000546
Greg Ward7c1e5f62000-03-10 01:56:58 +0000547
Greg Ward6002ffc2000-04-09 20:54:50 +0000548\section{Distutils Configuration Files}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000549\label{sec:config-files}
550
551\comingsoon
552
Greg Ward6002ffc2000-04-09 20:54:50 +0000553
554
555\section{Pre-Distutils Conventions}
556\label{sec:pre-distutils}
557
558
559\subsection{The \protect\file{Makefile.pre.in} file}
560\label{sec:makefile-pre-in}
561
562
563\subsection{Installing modules manually}
564\label{sec:manual-install}
565
566
567
Greg Ward7c1e5f62000-03-10 01:56:58 +0000568\end{document}