inst.tex 44.3 KB
Newer Older
1
\documentclass{howto}
2
\usepackage{distutils}
3

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
4 5 6
% TODO:
%   Fill in XXX comments

7 8 9 10 11 12 13 14 15 16 17 18
\title{Installing Python Modules}

% The audience for this document includes people who don't know anything 
% about Python and aren't about to learn the language just in order to
% install and maintain it for their users, i.e. system administrators.
% Thus, I have to be sure to explain the basics at some point:
% sys.path and PYTHONPATH at least.  Should probably give pointers to
% other docs on "import site", PYTHONSTARTUP, PYTHONHOME, etc.
% 
% Finally, it might be useful to include all the material from my "Care
% and Feeding of a Python Installation" talk in here somewhere.  Yow!

19 20
\input{boilerplate}

21
\author{Greg Ward}
22 23 24 25
\authoraddress{
	\strong{Python Software Foundation}\\
	Email: \email{distutils-sig@python.org}
}
26

Greg Ward's avatar
Greg Ward committed
27
\makeindex
28 29 30 31 32

\begin{document}

\maketitle

Greg Ward's avatar
Greg Ward committed
33 34 35 36 37 38 39 40
\begin{abstract}
  \noindent
  This document describes the Python Distribution Utilities
  (``Distutils'') from the end-user's point-of-view, describing how to
  extend the capabilities of a standard Python installation by building
  and installing third-party Python modules and extensions.
\end{abstract}

41 42 43 44 45
%\begin{abstract}
%\noindent
%Abstract this!
%\end{abstract}

46

47
% The ugly "%begin{latexonly}" pseudo-environment suppresses the table
48 49 50
% of contents for HTML generation.
%
%begin{latexonly}
51
\tableofcontents
52 53
%end{latexonly}

54 55

\section{Introduction}
56
\label{intro}
57

58 59 60 61 62 63 64 65 66
Although Python's extensive standard library covers many programming
needs, there often comes a time when you need to add some new
functionality to your Python installation in the form of third-party
modules.  This might be necessary to support your own programming, or to
support an application that you want to use and that happens to be
written in Python.

In the past, there has been little support for adding third-party
modules to an existing Python installation.  With the introduction of
67
the Python Distribution Utilities (Distutils for short) in Python 2.0,
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
68
this changed.
69 70 71 72 73 74 75 76 77

This document is aimed primarily at the people who need to install
third-party Python modules: end-users and system administrators who just
need to get some Python application running, and existing Python
programmers who want to add some new goodies to their toolbox.  You
don't need to know Python to read this document; there will be some
brief forays into using Python's interactive mode to explore your
installation, but that's it.  If you're looking for information on how
to distribute your own Python modules so that others may use them, see
78
the \citetitle[../dist/dist.html]{Distributing Python Modules} manual.
79 80 81


\subsection{Best case: trivial installation}
82
\label{trivial-install}
83 84 85 86 87 88 89

In the best case, someone will have prepared a special version of the
module distribution you want to install that is targeted specifically at
your platform and is installed just like any other software on your
platform.  For example, the module developer might make an executable
installer available for Windows users, an RPM package for users of
RPM-based Linux systems (Red Hat, SuSE, Mandrake, and many others), a
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
90
Debian package for users of Debian-based Linux systems, and so forth.
91 92

In that case, you would download the installer appropriate to your
Greg Ward's avatar
Greg Ward committed
93 94 95 96 97
platform and do the obvious thing with it: run it if it's an executable
installer, \code{rpm --install} it if it's an RPM, etc.  You don't need
to run Python or a setup script, you don't need to compile
anything---you might not even need to read any instructions (although
it's always a good idea to do so anyways).
98 99

Of course, things will not always be that easy.  You might be interested
Greg Ward's avatar
Greg Ward committed
100 101 102 103 104 105
in a module distribution that doesn't have an easy-to-use installer for
your platform.  In that case, you'll have to start with the source
distribution released by the module's author/maintainer.  Installing
from a source distribution is not too hard, as long as the modules are
packaged in the standard way.  The bulk of this document is about
building and installing modules from standard source distributions.
106 107 108


\subsection{The new standard: Distutils}
109
\label{new-standard}
110 111

If you download a module source distribution, you can tell pretty
112 113 114
quickly if it was packaged and distributed in the standard way, i.e.
using the Distutils.  First, the distribution's name and version number
will be featured prominently in the name of the downloaded archive, e.g.
115 116 117
\file{foo-1.0.tar.gz} or \file{widget-0.9.7.zip}.  Next, the archive
will unpack into a similarly-named directory: \file{foo-1.0} or
\file{widget-0.9.7}.  Additionally, the distribution will contain a
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
118 119
setup script \file{setup.py}, and a file named \file{README.txt} or possibly
just \file{README}, which should explain that building and installing the
120
module distribution is a simple matter of running
121

122 123 124
\begin{verbatim}
python setup.py install
\end{verbatim}
125

126
If all these things are true, then you already know how to build and
127
install the modules you've just downloaded:  Run the command above.
128 129 130
Unless you need to install things in a non-standard way or customize the
build process, you don't really need this manual.  Or rather, the above
command is everything you need to get out of this manual.
131 132


133
\section{Standard Build and Install}
134
\label{standard-install}
135

136
As described in section~\ref{new-standard}, building and installing
137
a module distribution using the Distutils is usually one simple command:
138

139 140 141
\begin{verbatim}
python setup.py install
\end{verbatim}
142

143
On \UNIX, you'd run this command from a shell prompt; on Windows, you
144
have to open a command prompt window (``DOS box'') and do it there; on
145
Mac OS X, you open a \command{Terminal} window to get a shell prompt.
146 147 148


\subsection{Platform variations}
149
\label{platform-variations}
150 151 152 153

You should always run the setup command from the distribution root
directory, i.e. the top-level subdirectory that the module source
distribution unpacks into.  For example, if you've just downloaded a
154 155
module source distribution \file{foo-1.0.tar.gz} onto a
\UNIX{} system, the normal thing to do is:
156

157 158 159 160 161 162
\begin{verbatim}
gunzip -c foo-1.0.tar.gz | tar xf -    # unpacks into directory foo-1.0
cd foo-1.0
python setup.py install
\end{verbatim}

163 164 165
On Windows, you'd probably download \file{foo-1.0.zip}.  If you
downloaded the archive file to \file{C:\textbackslash{}Temp}, then it
would unpack into \file{C:\textbackslash{}Temp\textbackslash{}foo-1.0};
166
you can use either a archive manipulator with a graphical user interface
167 168 169
(such as WinZip) or a command-line tool (such as \program{unzip} or
\program{pkunzip}) to unpack the archive.  Then, open a command prompt
window (``DOS box''), and run:
170

171
\begin{verbatim}
172
cd c:\Temp\foo-1.0
173 174 175 176
python setup.py install
\end{verbatim}

\subsection{Splitting the job up}
177
\label{splitting-up}
178 179

Running \code{setup.py install} builds and installs all modules in one
180 181 182
run.  If you prefer to work incrementally---especially useful if you
want to customize the build process, or if things are going wrong---you
can use the setup script to do one thing at a time.  This is
183
particularly helpful when the build and install will be done by
184
different users---for example, you might want to build a module distribution
185 186
and hand it off to a system administrator for installation (or do it
yourself, with super-user privileges).
187 188 189

For example, you can build everything in one step, and then install
everything in a second step, by invoking the setup script twice:
190

191 192 193 194
\begin{verbatim}
python setup.py build
python setup.py install
\end{verbatim}
195

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
196
If you do this, you will notice that running the \command{install}
197 198
command first runs the \command{build} command, which---in this
case---quickly notices that it has nothing to do, since everything in
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
199
the \file{build} directory is up-to-date.
200 201 202 203 204 205

You may not need this ability to break things down often if all you do
is install modules downloaded off the 'net, but it's very handy for more
advanced tasks.  If you get into distributing your own Python modules
and extensions, you'll run lots of individual Distutils commands on
their own.
Greg Ward's avatar
Greg Ward committed
206 207 208


\subsection{How building works}
209
\label{how-build-works}
Greg Ward's avatar
Greg Ward committed
210 211 212 213 214

As implied above, the \command{build} command is responsible for putting
the files to install into a \emph{build directory}.  By default, this is
\file{build} under the distribution root; if you're excessively
concerned with speed, or want to keep the source tree pristine, you can
215 216
change the build directory with the \longprogramopt{build-base} option.
For example:
217

Greg Ward's avatar
Greg Ward committed
218 219 220
\begin{verbatim}
python setup.py build --build-base=/tmp/pybuild/foo-1.0
\end{verbatim}
221

Greg Ward's avatar
Greg Ward committed
222 223
(Or you could do this permanently with a directive in your system or
personal Distutils configuration file; see
224
section~\ref{config-files}.)  Normally, this isn't necessary.
Greg Ward's avatar
Greg Ward committed
225 226

The default layout for the build tree is as follows:
227

Greg Ward's avatar
Greg Ward committed
228 229 230 231 232 233
\begin{verbatim}
--- build/ --- lib/
or
--- build/ --- lib.<plat>/
               temp.<plat>/
\end{verbatim}
234

Greg Ward's avatar
Greg Ward committed
235
where \code{<plat>} expands to a brief description of the current
236 237 238
OS/hardware platform and Python version.  The first form, with just a
\file{lib} directory, is used for ``pure module distributions''---that
is, module distributions that include only pure Python modules.  If a
Fred Drake's avatar
Fred Drake committed
239
module distribution contains any extensions (modules written in C/\Cpp),
240 241 242 243
then the second form, with two \code{<plat>} directories, is used.  In
that case, the \file{temp.\filevar{plat}} directory holds temporary
files generated by the compile/link process that don't actually get
installed.  In either case, the \file{lib} (or
Greg Ward's avatar
Greg Ward committed
244 245 246 247 248
\file{lib.\filevar{plat}}) directory contains all Python modules (pure
Python and extensions) that will be installed.

In the future, more directories will be added to handle Python scripts,
documentation, binary executables, and whatever else is needed to handle
249
the job of installing Python modules and applications.
Greg Ward's avatar
Greg Ward committed
250 251 252


\subsection{How installation works}
253
\label{how-install-works}
Greg Ward's avatar
Greg Ward committed
254 255 256 257 258 259 260 261 262 263 264

After the \command{build} command runs (whether you run it explicitly,
or the \command{install} command does it for you), the work of the
\command{install} command is relatively simple: all it has to do is copy
everything under \file{build/lib} (or \file{build/lib.\filevar{plat}})
to your chosen installation directory.

If you don't choose an installation directory---i.e., if you just run
\code{setup.py install}---then the \command{install} command installs to
the standard location for third-party Python modules.  This location
varies by platform and by how you built/installed Python itself.  On
265 266
\UNIX{} (and Mac OS X, which is also Unix-based),
it also depends on whether the module distribution
Greg Ward's avatar
Greg Ward committed
267
being installed is pure Python or contains extensions (``non-pure''):
268 269
\begin{tableiv}{l|l|l|c}{textrm}%
  {Platform}{Standard installation location}{Default value}{Notes}
270
  \lineiv{\UNIX{} (pure)}
271 272
          {\filenq{\filevar{prefix}/lib/python\shortversion/site-packages}}
          {\filenq{/usr/local/lib/python\shortversion/site-packages}}
273
          {(1)}
274
  \lineiv{\UNIX{} (non-pure)}
275 276
          {\filenq{\filevar{exec-prefix}/lib/python\shortversion/site-packages}}
          {\filenq{/usr/local/lib/python\shortversion/site-packages}}
277
          {(1)}
278
  \lineiv{Windows}
279
          {\filenq{\filevar{prefix}}}
280
          {\filenq{C:\textbackslash{}Python}}
281
          {(2)}
282 283 284 285
\end{tableiv}

\noindent Notes:
\begin{description}
286 287 288
\item[(1)] Most Linux distributions include Python as a standard part of
  the system, so \filevar{prefix} and \filevar{exec-prefix} are usually
  both \file{/usr} on Linux.  If you build Python yourself on Linux (or
289
  any \UNIX-like system), the default \filevar{prefix} and
290 291
  \filevar{exec-prefix} are \file{/usr/local}.
\item[(2)] The default installation directory on Windows was
292 293
  \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
  Python 1.6a1, 1.5.2, and earlier.
294 295
\end{description}

Greg Ward's avatar
Greg Ward committed
296 297
\filevar{prefix} and \filevar{exec-prefix} stand for the directories
that Python is installed to, and where it finds its libraries at
298 299
run-time.  They are always the same under Windows, and very
often the same under \UNIX and Mac OS X.  You can find out what your Python
Greg Ward's avatar
Greg Ward committed
300 301
installation uses for \filevar{prefix} and \filevar{exec-prefix} by
running Python in interactive mode and typing a few simple commands.
302 303
Under \UNIX, just type \code{python} at the shell prompt.  Under
Windows, choose \menuselection{Start \sub Programs \sub Python
304
\shortversion \sub Python (command line)}.  
305
Once the interpreter is started, you type Python code at the
306 307 308
prompt.  For example, on my Linux system, I type the three Python
statements shown below, and get the output as shown, to find out my
\filevar{prefix} and \filevar{exec-prefix}:
309

Greg Ward's avatar
Greg Ward committed
310
\begin{verbatim}
311 312
Python 2.4 (#26, Aug  7 2004, 17:19:02) 
Type "help", "copyright", "credits" or "license" for more information.
Greg Ward's avatar
Greg Ward committed
313 314 315 316 317 318 319
>>> import sys
>>> sys.prefix
'/usr'
>>> sys.exec_prefix
'/usr'
\end{verbatim}

320 321 322 323 324
If you don't want to install modules to the standard location, or if you
don't have permission to write there, then you need to read about
alternate installations in section~\ref{alt-install}.  If you want to
customize your installation directories more heavily, see
section~\ref{custom-install} on custom installations.
Greg Ward's avatar
Greg Ward committed
325 326 327 328 329 330 331 332


% This rather nasty macro is used to generate the tables that describe
% each installation scheme.  It's nasty because it takes two arguments
% for each "slot" in an installation scheme, there will soon be more
% than five of these slots, and TeX has a limit of 10 arguments to a
% macro.  Uh-oh.

333
\newcommand{\installscheme}[8]
334
  {\begin{tableiii}{l|l|l}{textrm}
335 336 337 338 339
          {Type of file}
          {Installation Directory}
          {Override option}
     \lineiii{pure module distribution}
             {\filevar{#1}\filenq{#2}}
340
             {\longprogramopt{install-purelib}}
341 342
     \lineiii{non-pure module distribution}
             {\filevar{#3}\filenq{#4}}
343
             {\longprogramopt{install-platlib}}
344 345
     \lineiii{scripts}
             {\filevar{#5}\filenq{#6}}
346
             {\longprogramopt{install-scripts}}
347 348
     \lineiii{data}
             {\filevar{#7}\filenq{#8}}
349
             {\longprogramopt{install-data}}
350 351
   \end{tableiii}}

352

353
\section{Alternate Installation}
354
\label{alt-install}
355 356 357

Often, it is necessary or desirable to install modules to a location
other than the standard location for third-party Python modules.  For
358
example, on a \UNIX{} system you might not have permission to write to the
359 360
standard third-party module directory.  Or you might wish to try out a
module before making it a standard part of your local Python
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
361
installation.  This is especially true when upgrading a distribution
362 363 364 365 366 367 368 369 370
already present: you want to make sure your existing base of scripts
still works with the new version before actually upgrading.

The Distutils \command{install} command is designed to make installing
module distributions to an alternate location simple and painless.  The
basic idea is that you supply a base directory for the installation, and
the \command{install} command picks a set of directories (called an
\emph{installation scheme}) under this base directory in which to
install files.  The details differ across platforms, so read whichever
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
371
of the following sections applies to you.
372 373


374
\subsection{Alternate installation: the home scheme}
375
\label{alt-install-prefix}
376

Greg Ward's avatar
Greg Ward committed
377
The idea behind the ``home scheme'' is that you build and maintain a
378 379 380 381 382 383
personal stash of Python modules.  This scheme's name is derived from
the idea of a ``home'' directory on \UNIX, since it's not unusual for
a \UNIX{} user to make their home directory have a layout similar to
\file{/usr/} or \file{/usr/local/}.  This scheme can be used by
anyone, regardless of the operating system their installing for.

Greg Ward's avatar
Greg Ward committed
384
Installing a new module distribution is as simple as
385

386
\begin{verbatim}
387
python setup.py install --home=<dir>
388
\end{verbatim}
389

390 391 392 393
where you can supply any directory you like for the
\longprogramopt{home} option.  On \UNIX, lazy typists can just type a
tilde (\code{\textasciitilde}); the \command{install} command will
expand this to your home directory:
394

Greg Ward's avatar
Greg Ward committed
395 396 397
\begin{verbatim}
python setup.py install --home=~
\end{verbatim}
398

399 400 401
The \longprogramopt{home} option defines the installation base
directory.  Files are installed to the following directories under the
installation base as follows:
402 403 404 405 406
\installscheme{home}{/lib/python}
              {home}{/lib/python}
              {home}{/bin}
              {home}{/share}

407 408 409 410 411

\versionchanged[The \longprogramopt{home} option used to be supported
                only on \UNIX]{2.4}


412
\subsection{Alternate installation: \UNIX{} (the prefix scheme)}
413
\label{alt-install-home}
414 415 416 417 418 419 420 421 422

The ``prefix scheme'' is useful when you wish to use one Python
installation to perform the build/install (i.e., to run the setup
script), but install modules into the third-party module directory of a
different Python installation (or something that looks like a different
Python installation).  If this sounds a trifle unusual, it is---that's
why the ``home scheme'' comes first.  However, there are at least two
known cases where the prefix scheme will be useful.

423
First, consider that many Linux distributions put Python in \file{/usr},
424 425 426 427
rather than the more traditional \file{/usr/local}.  This is entirely
appropriate, since in those cases Python is part of ``the system''
rather than a local add-on.  However, if you are installing Python
modules from source, you probably want them to go in
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
428 429
\file{/usr/local/lib/python2.\filevar{X}} rather than
\file{/usr/lib/python2.\filevar{X}}.  This can be done with
430

431
\begin{verbatim}
432
/usr/bin/python setup.py install --prefix=/usr/local
433
\end{verbatim}
434

435 436 437
Another possibility is a network filesystem where the name used to write
to a remote directory is different from the name used to read it: for
example, the Python interpreter accessed as \file{/usr/local/bin/python}
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
438
might search for modules in \file{/usr/local/lib/python2.\filevar{X}},
439
but those modules would have to be installed to, say,
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
440
\file{/mnt/\filevar{@server}/export/lib/python2.\filevar{X}}.  This
441
could be done with
442

443
\begin{verbatim}
444
/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
445
\end{verbatim}
446

447 448 449 450 451 452 453
In either case, the \longprogramopt{prefix} option defines the
installation base, and the \longprogramopt{exec-prefix} option defines
the platform-specific installation base, which is used for
platform-specific files.  (Currently, this just means non-pure module
distributions, but could be expanded to C libraries, binary executables,
etc.)  If \longprogramopt{exec-prefix} is not supplied, it defaults to
\longprogramopt{prefix}.  Files are installed as follows:
454

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
455 456
\installscheme{prefix}{/lib/python2.\filevar{X}/site-packages}
              {exec-prefix}{/lib/python2.\filevar{X}/site-packages}
457 458 459
              {prefix}{/bin}
              {prefix}{/share}

460 461 462 463
There is no requirement that \longprogramopt{prefix} or
\longprogramopt{exec-prefix} actually point to an alternate Python
installation; if the directories listed above do not already exist, they
are created at installation time.
464 465

Incidentally, the real reason the prefix scheme is important is simply
466
that a standard \UNIX{} installation uses the prefix scheme, but with
467
\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
468
Python itself as \code{sys.prefix} and \code{sys.exec\_prefix}.  Thus,
469 470 471
you might think you'll never use the prefix scheme, but every time you
run \code{python setup.py install} without any other options, you're
using it.
472 473 474 475 476 477

Note that installing extensions to an alternate Python installation has
no effect on how those extensions are built: in particular, the Python
header files (\file{Python.h} and friends) installed with the Python
interpreter used to run the setup script will be used in compiling
extensions.  It is your responsibility to ensure that the interpreter
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
478
used to run extensions installed in this way is compatible with the
Greg Ward's avatar
Greg Ward committed
479 480 481
interpreter used to build them.  The best way to do this is to ensure
that the two interpreters are the same version of Python (possibly
different builds, or possibly copies of the same build).  (Of course, if
482 483
your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
point to an alternate Python installation, this is immaterial.)
484 485


486
\subsection{Alternate installation: Windows (the prefix scheme)}
487
\label{alt-install-windows}
488

489 490 491 492
Windows has no concept of a user's home directory, and since the
standard Python installation under Windows is simpler than under
\UNIX, the \longprogramopt{prefix} option has traditionally been used
to install additional packages in separate locations on Windows.
493

494
\begin{verbatim}
495
python setup.py install --prefix="\Temp\Python"
496
\end{verbatim}
497

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
498 499 500
to install modules to the
\file{\textbackslash{}Temp\textbackslash{}Python} directory on the
current drive.
501

502 503 504
The installation base is defined by the \longprogramopt{prefix} option;
the \longprogramopt{exec-prefix} option is not supported under Windows.
Files are installed as follows:
505 506
\installscheme{prefix}{}
              {prefix}{}
507 508
              {prefix}{\textbackslash{}Scripts}
              {prefix}{\textbackslash{}Data}
509 510 511 512



\section{Custom Installation}
513
\label{custom-install}
514 515

Sometimes, the alternate installation schemes described in
516
section~\ref{alt-install} just don't do what you want.  You might
517 518 519
want to tweak just one or two directories while keeping everything under
the same base directory, or you might want to completely redefine the
installation scheme.  In either case, you're creating a \emph{custom
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
520
installation scheme}.
521 522 523 524 525 526 527

You probably noticed the column of ``override options'' in the tables
describing the alternate installation schemes above.  Those options are
how you define a custom installation scheme.  These override options can
be relative, absolute, or explicitly defined in terms of one of the
installation base directories.  (There are two installation base
directories, and they are normally the same---they only differ when you
528
use the \UNIX{} ``prefix scheme'' and supply different
529
\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
530 531

For example, say you're installing a module distribution to your home
532
directory under \UNIX---but you want scripts to go in
533 534 535 536 537
\file{\textasciitilde/scripts} rather than \file{\textasciitilde/bin}.
As you might expect, you can override this directory with the
\longprogramopt{install-scripts} option; in this case, it makes most
sense to supply a relative path, which will be interpreted relative to
the installation base directory (your home directory, in this case):
538

539
\begin{verbatim}
540
python setup.py install --home=~ --install-scripts=scripts
541
\end{verbatim}
542

543
Another \UNIX{} example: suppose your Python installation was built and
544 545 546
installed with a prefix of \file{/usr/local/python}, so under a standard 
installation scripts will wind up in \file{/usr/local/python/bin}.  If
you want them in \file{/usr/local/bin} instead, you would supply this
547
absolute directory for the \longprogramopt{install-scripts} option:
548

549
\begin{verbatim}
550
python setup.py install --install-scripts=/usr/local/bin
551
\end{verbatim}
552

553 554 555 556 557 558 559 560 561 562
(This performs an installation using the ``prefix scheme,'' where the
prefix is whatever your Python interpreter was installed with---
\file{/usr/local/python} in this case.)

If you maintain Python on Windows, you might want third-party modules to
live in a subdirectory of \filevar{prefix}, rather than right in
\filevar{prefix} itself.  This is almost as easy as customizing the
script installation directory---you just have to remember that there are
two types of modules to worry about, pure modules and non-pure modules
(i.e., modules from a non-pure distribution).  For example:
563

564
\begin{verbatim}
565
python setup.py install --install-purelib=Site --install-platlib=Site
566
\end{verbatim}
567

568 569 570 571 572
The specified installation directories are relative to
\filevar{prefix}.  Of course, you also have to ensure that these
directories are in Python's module search path, such as by putting a
\file{.pth} file in \filevar{prefix}.  See section~\ref{search-path}
to find out how to modify Python's search path.
573 574 575

If you want to define an entire installation scheme, you just have to
supply all of the installation directory options.  The recommended way
Greg Ward's avatar
Greg Ward committed
576 577 578 579
to do this is to supply relative paths; for example, if you want to
maintain all Python module-related files under \file{python} in your
home directory, and you want a separate directory for each platform that
you use your home directory from, you might define the following
580
installation scheme:
581

582
\begin{verbatim}
Greg Ward's avatar
Greg Ward committed
583
python setup.py install --home=~ \
584 585 586 587
                        --install-purelib=python/lib \
                        --install-platlib=python/lib.$PLAT \
                        --install-scripts=python/scripts
                        --install-data=python/data
588
\end{verbatim}
589 590
% $ % -- bow to font-lock

591
or, equivalently,
592

593
\begin{verbatim}
594 595
python setup.py install --home=~/python \
                        --install-purelib=lib \
596
                        --install-platlib='lib.$PLAT' \
597 598
                        --install-scripts=scripts
                        --install-data=data
599
\end{verbatim}
600 601
% $ % -- bow to font-lock

602
\code{\$PLAT} is not (necessarily) an environment variable---it will be
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
603 604
expanded by the Distutils as it parses your command line options, just
as it does when parsing your configuration file(s).
605 606 607 608

Obviously, specifying the entire installation scheme every time you
install a new module distribution would be very tedious.  Thus, you can
put these options into your Distutils config file (see
609
section~\ref{config-files}):
610

611
\begin{verbatim}
612 613 614 615 616 617
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-data=python/data
618
\end{verbatim}
619

620
or, equivalently,
621

622
\begin{verbatim}
623 624 625 626 627 628
[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data
629
\end{verbatim}
630

631 632
Note that these two are \emph{not} equivalent if you supply a different
installation base directory when you run the setup script.  For example,
633

634
\begin{verbatim}
635
python setup.py --install-base=/tmp
636
\end{verbatim}
637

638 639 640 641
would install pure modules to \filevar{/tmp/python/lib} in the first
case, and to \filevar{/tmp/lib} in the second case.  (For the second
case, you probably want to supply an installation base of
\file{/tmp/python}.)
642

643 644
You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
sample configuration file input.  These are Distutils configuration
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
645 646 647 648 649
variables, which bear a strong resemblance to environment variables.
In fact, you can use environment variables in config files on
platforms that have such a notion but the Distutils additionally
define a few extra variables that may not be in your environment, such
as \code{\$PLAT}.  (And of course, on systems that don't have
650
environment variables, such as Mac OS 9, the configuration
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
651 652
variables supplied by the Distutils are the only ones you can use.)
See section~\ref{config-files} for details.
653

654
% XXX need some Windows examples---when would custom
655
% installation schemes be needed on those platforms?
656 657


658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
% XXX I'm not sure where this section should go.
\subsection{Modifying Python's Search Path}
\label{search-path}

When the Python interpreter executes an \keyword{import} statement, it
searches for both Python code and extension modules along a search
path.  A default value for the path is configured into the Python
binary when the interpreter is built.  You can determine the path by
importing the \module{sys} module and printing the value of
\code{sys.path}.  

\begin{verbatim}
$ python
Python 2.2 (#11, Oct  3 2002, 13:31:27)
[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
Type ``help'', ``copyright'', ``credits'' or ``license'' for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2', 
 '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', 
 '/usr/local/lib/python2.3/site-packages']
>>>
680
\end{verbatim} % $ <-- bow to font-lock
681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697

The null string in \code{sys.path} represents the current working
directory.   

The expected convention for locally installed packages is to put them
in the \file{.../site-packages/} directory, but you may want to
install Python modules into some arbitrary directory.  For example,
your site may have a convention of keeping all software related to the
web server under \file{/www}.  Add-on Python modules might then belong
in \file{/www/python}, and in order to import them, this directory
must be added to \code{sys.path}.  There are several different ways to
add the directory.

The most convenient way is to add a path configuration file to a
directory that's already on Python's path, usually to the
\file{.../site-packages/} directory.  Path configuration files have an
extension of \file{.pth}, and each line must contain a single path
698 699 700 701 702 703 704 705
that will be appended to \code{sys.path}.  (Because the new paths are
appended to \code{sys.path}, modules in the added directories will not
override standard modules.  This means you can't use this mechanism
for installing fixed versions of standard modules.)

Paths can be absolute or relative, in which case they're relative to
the directory containing the \file{.pth} file.  Any directories added
to the search path will be scanned in turn for \file{.pth} files.  See
706 707
\citetitle[http://www.python.org/dev/doc/devel/lib/module-site.html]
{site module documentation} for more information.
708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742

A slightly less convenient way is to edit the \file{site.py} file in
Python's standard library, and modify \code{sys.path}.  \file{site.py}
is automatically imported when the Python interpreter is executed,
unless the \programopt{-S} switch is supplied to suppress this
behaviour.  So you could simply edit \file{site.py} and add two lines to it:

\begin{verbatim}
import sys
sys.path.append('/www/python/')
\end{verbatim}

However, if you reinstall the same major version of Python (perhaps
when upgrading from 2.2 to 2.2.2, for example) \file{site.py} will be
overwritten by the stock version.  You'd have to remember that it was
modified and save a copy before doing the installation.

There are two environment variables that can modify \code{sys.path}.
\envvar{PYTHONHOME} sets an alternate value for the prefix of the
Python installation.  For example, if \envvar{PYTHONHOME} is set to
\samp{/www/python}, the search path will be set to \code{['',
'/www/python/lib/python2.2/', '/www/python/lib/python2.3/plat-linux2',
...]}.  

The \envvar{PYTHONPATH} variable can be set to a list of paths that
will be added to the beginning of \code{sys.path}.  For example, if
\envvar{PYTHONPATH} is set to \samp{/www/python:/opt/py}, the search
path will begin with \code{['/www/python', '/opt/py']}.  (Note that
directories must exist in order to be added to \code{sys.path}; the
\module{site} module removes paths that don't exist.)

Finally, \code{sys.path} is just a regular Python list, so any Python
application can modify it by adding or removing entries.


743
\section{Distutils Configuration Files}
744
\label{config-files}
745

746 747 748 749 750 751 752 753 754 755 756
As mentioned above, you can use Distutils configuration files to record
personal or site preferences for any Distutils options.  That is, any
option to any command can be stored in one of two or three (depending on
your platform) configuration files, which will be consulted before the
command-line is parsed.  This means that configuration files will
override default values, and the command-line will in turn override
configuration files.  Furthermore, if multiple configuration files
apply, values from ``earlier'' files are overridden by ``later'' files.


\subsection{Location and names of config files}
757
\label{config-filenames}
758 759

The names and locations of the configuration files vary slightly across
760 761
platforms.  On \UNIX{} and Mac OS X, the three configuration files (in
the order they are processed) are:
762 763
\begin{tableiii}{l|l|c}{textrm}
  {Type of file}{Location and filename}{Notes}
764
  \lineiii{system}{\filenq{\filevar{prefix}/lib/python\filevar{ver}/distutils/distutils.cfg}}{(1)}
765 766 767 768
  \lineiii{personal}{\filenq{\$HOME/.pydistutils.cfg}}{(2)}
  \lineiii{local}{\filenq{setup.cfg}}{(3)}
\end{tableiii}

769
And on Windows, the configuration files are:
770 771
\begin{tableiii}{l|l|c}{textrm}
  {Type of file}{Location and filename}{Notes}
772
  \lineiii{system}{\filenq{\filevar{prefix}\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}distutils.cfg}}{(4)}
773
  \lineiii{personal}{\filenq{\%HOME\%\textbackslash{}pydistutils.cfg}}{(5)}
774 775 776 777 778 779 780
  \lineiii{local}{\filenq{setup.cfg}}{(3)}
\end{tableiii}

\noindent Notes:
\begin{description}
\item[(1)] Strictly speaking, the system-wide configuration file lives
  in the directory where the Distutils are installed; under Python 1.6
781
  and later on \UNIX, this is as shown. For Python 1.5.2, the Distutils
782
  will normally be installed to
783
  \file{\filevar{prefix}/lib/python1.5/site-packages/distutils},
784 785
  so the system configuration file should be put there under Python
  1.5.2.
786
\item[(2)] On \UNIX, if the \envvar{HOME} environment variable is not
787
  defined, the user's home directory will be determined with the
788 789
  \function{getpwuid()} function from the standard
  \ulink{\module{pwd}}{../lib/module-pwd.html} module.
790 791 792 793 794
\item[(3)] I.e., in the current directory (usually the location of the
  setup script).
\item[(4)] (See also note (1).)  Under Python 1.6 and later, Python's
  default ``installation prefix'' is \file{C:\textbackslash{}Python}, so
  the system configuration file is normally
795
  \file{C:\textbackslash{}Python\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}distutils.cfg}.
796 797 798 799
  Under Python 1.5.2, the default prefix was
  \file{C:\textbackslash{}Program~Files\textbackslash{}Python}, and the
  Distutils were not part of the standard library---so the system
  configuration file would be
800
  \file{C:\textbackslash{}Program~Files\textbackslash{}Python\textbackslash{}distutils\textbackslash{}distutils.cfg}
801 802 803 804 805 806 807 808 809
  in a standard Python 1.5.2 installation under Windows.
\item[(5)] On Windows, if the \envvar{HOME} environment variable is not
  defined, no personal configuration file will be found or used.  (In
  other words, the Distutils make no attempt to guess your home
  directory on Windows.)
\end{description}


\subsection{Syntax of config files}
810
\label{config-syntax}
811 812

The Distutils configuration files all have the same syntax.  The config
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
813
files are grouped into sections.  There is one section for each Distutils
814 815
command, plus a \code{global} section for global options that affect
every command.  Each section consists of one option per line, specified
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
816
as \code{option=value}.
817 818 819

For example, the following is a complete config file that just forces
all commands to run quietly by default:
820

821 822 823 824 825 826 827 828 829 830 831 832 833 834 835
\begin{verbatim}
[global]
verbose=0
\end{verbatim}

If this is installed as the system config file, it will affect all
processing of any Python module distribution by any user on the current
system.  If it is installed as your personal config file (on systems
that support them), it will affect only module distributions processed
by you.  And if it is used as the \file{setup.cfg} for a particular
module distribution, it affects only that distribution.

You could override the default ``build base'' directory and make the
\command{build*} commands always forcibly rebuild all files with the
following:
836

837 838 839 840 841
\begin{verbatim}
[build]
build-base=blib
force=1
\end{verbatim}
842

843
which corresponds to the command-line arguments
844

845 846 847
\begin{verbatim}
python setup.py build --build-base=blib --force
\end{verbatim}
848

849 850 851 852 853 854 855 856 857
except that including the \command{build} command on the command-line
means that command will be run.  Including a particular command in
config files has no such implication; it only means that if the command
is run, the options in the config file will apply.  (Or if other
commands that derive values from it are run, they will use the values in
the config file.)

You can find out the complete list of options for any command using the
\longprogramopt{help} option, e.g.:
858

859 860 861
\begin{verbatim}
python setup.py build --help
\end{verbatim}
862

863 864
and you can find out the complete list of global options by using
\longprogramopt{help} without a command:
865

866 867 868
\begin{verbatim}
python setup.py --help
\end{verbatim}
869

870 871 872
See also the ``Reference'' section of the ``Distributing Python
Modules'' manual.

873 874 875 876 877 878 879 880 881 882 883 884 885 886
\section{Building Extensions: Tips and Tricks}
\label{building-ext}

Whenever possible, the Distutils try to use the configuration
information made available by the Python interpreter used to run the
\file{setup.py} script.  For example, the same compiler and linker
flags used to compile Python will also be used for compiling
extensions.  Usually this will work well, but in complicated
situations this might be inappropriate.  This section discusses how to
override the usual Distutils behaviour.

\subsection{Tweaking compiler/linker flags}
\label{tweak-flags}

887
Compiling a Python extension written in C or \Cpp{} will sometimes
888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
require specifying custom flags for the compiler and linker in order
to use a particular library or produce a special kind of object code.
This is especially true if the extension hasn't been tested on your 
platform, or if you're trying to cross-compile Python.

In the most general case, the extension author might have foreseen
that compiling the extensions would be complicated, and provided a
\file{Setup} file for you to edit.  This will likely only be done if
the module distribution contains many separate extension modules, or
if they often require elaborate sets of compiler flags in order to work.

A \file{Setup} file, if present, is parsed in order to get a list of
extensions to build.  Each line in a \file{Setup} describes a single
module.  Lines have the following structure:

903 904 905
\begin{alltt}
\var{module} ... [\var{sourcefile} ...] [\var{cpparg} ...] [\var{library} ...]
\end{alltt}
906 907 908 909 910 911

Let's examine each of the fields in turn.

\begin{itemize}

\item \var{module} is the name of the extension module to be built,
912 913 914
      and should be a valid Python identifier.  You can't just change
      this in order to rename a module (edits to the source code would
      also be needed), so this should be left alone.
915 916

\item \var{sourcefile} is anything that's likely to be a source code
917 918 919 920 921
      file, at least judging by the filename.  Filenames ending in
      \file{.c} are assumed to be written in C, filenames ending in
      \file{.C}, \file{.cc}, and \file{.c++} are assumed to be
      \Cpp, and filenames ending in \file{.m} or \file{.mm} are
      assumed to be in Objective C.
922 923

\item \var{cpparg} is an argument for the C preprocessor, 
924 925
      and is anything starting with \programopt{-I}, \programopt{-D},
      \programopt{-U} or \programopt{-C}.
926

927 928
\item \var{library} is anything ending in \file{.a} or beginning with
      \programopt{-l} or \programopt{-L}.
929 930 931 932 933 934 935 936 937 938 939
\end{itemize}

If a particular platform requires a special library on your platform,
you can add it by editing the \file{Setup} file and running
\code{python setup.py build}.  For example, if the module defined by the line

\begin{verbatim}
foo foomodule.c
\end{verbatim}

must be linked with the math library \file{libm.a} on your platform,
940
simply add \programopt{-lm} to the line:
941 942 943 944 945 946

\begin{verbatim}
foo foomodule.c -lm
\end{verbatim}

Arbitrary switches intended for the compiler or the linker can be
947 948
supplied with the \programopt{-Xcompiler} \var{arg} and
\programopt{-Xlinker} \var{arg} options:
949 950 951 952 953

\begin{verbatim}
foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm
\end{verbatim}

954 955 956 957 958 959 960 961
The next option after \programopt{-Xcompiler} and
\programopt{-Xlinker} will be appended to the proper command line, so
in the above example the compiler will be passed the \programopt{-o32}
option, and the linker will be passed \programopt{-shared}.  If a
compiler option requires an argument, you'll have to supply multiple
\programopt{-Xcompiler} options; for example, to pass \code{-x c++} the
\file{Setup} file would have to contain
\code{-Xcompiler -x -Xcompiler c++}.
962 963 964 965 966 967 968 969 970 971

Compiler flags can also be supplied through setting the
\envvar{CFLAGS} environment variable.  If set, the contents of
\envvar{CFLAGS} will be added to the compiler flags specified in the 
\file{Setup} file.


\subsection{Using non-Microsoft compilers on Windows \label{non-ms-compilers}}
\sectionauthor{Rene Liebscher}{R.Liebscher@gmx.de}

972
\subsubsection{Borland \Cpp}
973 974 975 976 977 978 979 980 981 982 983

This subsection describes the necessary steps to use Distutils with the 
Borland \Cpp{} compiler version 5.5.
%Should we mention that users have to create cfg-files for the compiler?
%see also http://community.borland.com/article/0,1410,21205,00.html 

First you have to know that Borland's object file format (OMF) is
different from the format used by the Python version you can download
from the Python or ActiveState Web site.  (Python is built with
Microsoft Visual \Cpp, which uses COFF as the object file format.)
For this reason you have to convert Python's library
984
\file{python24.lib} into the Borland format.  You can do this as
985 986 987
follows:

\begin{verbatim}
988
coff2omf python24.lib python24_bcpp.lib
989 990 991
\end{verbatim}

The \file{coff2omf} program comes with the Borland compiler.  The file
992
\file{python24.lib} is in the \file{Libs} directory of your Python
993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023
installation.  If your extension uses other libraries (zlib,...) you
have to convert them too.

The converted files have to reside in the same directories as the
normal libraries.

How does Distutils manage to use these libraries with their changed
names?  If the extension needs a library (eg. \file{foo}) Distutils
checks first if it finds a library with suffix \file{_bcpp}
(eg. \file{foo_bcpp.lib}) and then uses this library.  In the case it
doesn't find such a special library it uses the default name
(\file{foo.lib}.)\footnote{This also means you could replace all
existing COFF-libraries with OMF-libraries of the same name.}

To let Distutils compile your extension with Borland \Cpp{} you now have
to type:

\begin{verbatim}
python setup.py build --compiler=bcpp
\end{verbatim}

If you want to use the Borland \Cpp{} compiler as the default, you
could specify this in your personal or system-wide configuration file
for Distutils (see section~\ref{config-files}.)
 
\begin{seealso}
  \seetitle[http://www.borland.com/bcppbuilder/freecompiler/]
    {\Cpp{}Builder Compiler}
    {Information about the free \Cpp{} compiler from Borland,
     including links to the download pages.}

Fred Drake's avatar
Fred Drake committed
1024
  \seetitle[http://www.cyberus.ca/\~{}g_will/pyExtenDL.shtml]
1025
    {Creating Python Extensions Using Borland's Free Compiler}
1026
    {Document describing how to use Borland's free command-line \Cpp
1027 1028 1029 1030
     compiler to build Python.}
\end{seealso}


1031
\subsubsection{GNU C / Cygwin / MinGW}
1032

1033 1034 1035
These instructions only apply if you're using a version of Python prior 
to 2.4.1 with a MinGW prior to 3.0.0 (with binutils-2.13.90-20030111-1).

1036
This section describes the necessary steps to use Distutils with the
1037
GNU C/\Cpp{} compilers in their Cygwin and MinGW
1038 1039 1040
distributions.\footnote{Check
\url{http://sources.redhat.com/cygwin/} and
\url{http://www.mingw.org/} for more information}
1041 1042
For a Python interpreter that was built with Cygwin, everything should
work without any of these following steps.
1043

1044
These compilers require some special libraries.
1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055
This task is more complex than for Borland's \Cpp, because there is no
program to convert the library.
% I don't understand what the next line means. --amk
% (inclusive the references on data structures.)
 
First you have to create a list of symbols which the Python DLL exports.
(You can find a good program for this task at 
\url{http://starship.python.net/crew/kernr/mingw32/Notes.html}, see at 
PExports 0.42h there.)

\begin{verbatim}
1056
pexports python24.dll >python24.def
1057 1058 1059 1060 1061
\end{verbatim}

Then you can create from these information an import library for gcc.
 
\begin{verbatim}
1062
dlltool --dllname python24.dll --def python24.def --output-lib libpython24.a
1063 1064 1065
\end{verbatim}

The resulting library has to be placed in the same directory as 
1066
\file{python24.lib}. (Should be the \file{libs} directory under your
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081
Python installation directory.)

If your extension uses other libraries (zlib,...) you might 
have to convert them too.
The converted files have to reside in the same directories as the normal
libraries do.

To let Distutils compile your extension with Cygwin you now have to type

\begin{verbatim}
python setup.py build --compiler=cygwin
\end{verbatim}

and for Cygwin in no-cygwin mode\footnote{Then you have no
\POSIX{} emulation available, but you also don't need
1082
\file{cygwin1.dll}.} or for MinGW type:
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093
 
\begin{verbatim}
python setup.py build --compiler=mingw32
\end{verbatim}

If you want to use any of these options/compilers as default, you should
consider to write it in your personal or system-wide configuration file
for Distutils (see section~\ref{config-files}.)

\begin{seealso}
  \seetitle[http://www.zope.org/Members/als/tips/win32_mingw_modules]
1094 1095
    {Building Python modules on MS Windows platform with MinGW}
    {Information about building the required libraries for the MinGW
1096 1097 1098
     environment.}

  \seeurl{http://pyopengl.sourceforge.net/ftp/win32-stuff/}
1099
    {Converted import libraries in Cygwin/MinGW and Borland format,
1100 1101 1102 1103 1104 1105
     and a script to create the registry entries needed for Distutils
     to locate the built Python.}
\end{seealso}



1106
\end{document}