inst.tex 46.1 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 19
\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!

\author{Greg Ward}
20
\authoraddress{Email: \email{gward@python.net}}
21

Greg Ward's avatar
Greg Ward committed
22
\makeindex
23 24 25 26 27

\begin{document}

\maketitle

Greg Ward's avatar
Greg Ward committed
28 29 30 31 32 33 34 35
\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}

36 37 38 39 40
%\begin{abstract}
%\noindent
%Abstract this!
%\end{abstract}

41 42 43 44 45

% The ugly "%begin{latexonly}" pseudo-environment supresses the table
% of contents for HTML generation.
%
%begin{latexonly}
46
\tableofcontents
47 48
%end{latexonly}

49 50

\section{Introduction}
51
\label{intro}
52

53 54 55 56 57 58 59 60 61
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
62
the Python Distribution Utilities (Distutils for short) in Python 2.0,
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
63
this changed.
64 65 66 67 68 69 70 71 72

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
73
the \citetitle[../dist/dist.html]{Distributing Python Modules} manual.
74 75 76


\subsection{Best case: trivial installation}
77
\label{trivial-install}
78 79 80 81 82 83 84

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
85
Debian package for users of Debian-based Linux systems, and so forth.
86 87

In that case, you would download the installer appropriate to your
Greg Ward's avatar
Greg Ward committed
88 89 90 91 92
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).
93 94

Of course, things will not always be that easy.  You might be interested
Greg Ward's avatar
Greg Ward committed
95 96 97 98 99 100
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.
101 102 103


\subsection{The new standard: Distutils}
104
\label{new-standard}
105 106

If you download a module source distribution, you can tell pretty
107 108 109
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.
110 111 112
\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
113 114
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
115
module distribution is a simple matter of running
116

117 118 119
\begin{verbatim}
python setup.py install
\end{verbatim}
120

121
If all these things are true, then you already know how to build and
122
install the modules you've just downloaded:  Run the command above.
123 124 125
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.
126 127


128
\section{Standard Build and Install}
129
\label{standard-install}
130

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

134 135 136
\begin{verbatim}
python setup.py install
\end{verbatim}
137

138
On \UNIX, you'd run this command from a shell prompt; on Windows, you
139
have to open a command prompt window (``DOS box'') and do it there; on
140
Mac OS, things are a tad more complicated (see below).
141 142 143


\subsection{Platform variations}
144
\label{platform-variations}
145 146 147 148

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
149 150
module source distribution \file{foo-1.0.tar.gz} onto a
\UNIX{} system, the normal thing to do is:
151

152 153 154 155 156 157
\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}

158 159 160
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};
161 162 163 164
you can use either a archive manipulator with a grapical user interface
(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:
165

166
\begin{verbatim}
167
cd c:\Temp\foo-1.0
168 169 170
python setup.py install
\end{verbatim}

171
On Mac OS, you have to go through a bit more effort to supply
172 173 174 175 176 177 178 179
command-line arguments to the setup script:
\begin{itemize}
\item hit option-double-click on the script's icon (or option-drop it
  onto the Python interpreter's icon)
\item press the ``Set unix-style command line'' button
\item set the ``Keep stdio window open on termination'' if you're
  interested in seeing the output of the setup script (which is usually
  voluminous and often useful)
180
\item when the command-line dialog pops up, enter ``install'' (you
181
  can, of course, enter any Distutils command-line as described in this
182 183 184
  document or in \citetitle[../dist/dist.html]{Distributing Python
  Modules}: just leave off the initial \code{python setup.py} and
  you'll be fine)
185
\end{itemize}
Greg Ward's avatar
Greg Ward committed
186

187 188

\subsection{Splitting the job up}
189
\label{splitting-up}
190 191

Running \code{setup.py install} builds and installs all modules in one
192 193 194
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
195
particularly helpful when the build and install will be done by
196
different users---for example, you might want to build a module distribution
197 198
and hand it off to a system administrator for installation (or do it
yourself, with super-user privileges).
199 200 201

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

203 204 205 206
\begin{verbatim}
python setup.py build
python setup.py install
\end{verbatim}
207

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
208
If you do this, you will notice that running the \command{install}
209 210
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
211
the \file{build} directory is up-to-date.
212 213 214 215 216 217

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
218 219 220


\subsection{How building works}
221
\label{how-build-works}
Greg Ward's avatar
Greg Ward committed
222 223 224 225 226

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
227 228
change the build directory with the \longprogramopt{build-base} option.
For example:
229

Greg Ward's avatar
Greg Ward committed
230 231 232
\begin{verbatim}
python setup.py build --build-base=/tmp/pybuild/foo-1.0
\end{verbatim}
233

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

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

Greg Ward's avatar
Greg Ward committed
240 241 242 243 244 245
\begin{verbatim}
--- build/ --- lib/
or
--- build/ --- lib.<plat>/
               temp.<plat>/
\end{verbatim}
246

Greg Ward's avatar
Greg Ward committed
247
where \code{<plat>} expands to a brief description of the current
248 249 250
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
251
module distribution contains any extensions (modules written in C/\Cpp),
252 253 254 255
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
256 257 258 259 260
\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
261
the job of installing Python modules and applications.
Greg Ward's avatar
Greg Ward committed
262 263 264


\subsection{How installation works}
265
\label{how-install-works}
Greg Ward's avatar
Greg Ward committed
266 267 268 269 270 271 272 273 274 275 276

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
277
\UNIX{} and Mac OS, it also depends on whether the module distribution
Greg Ward's avatar
Greg Ward committed
278
being installed is pure Python or contains extensions (``non-pure''):
279 280
\begin{tableiv}{l|l|l|c}{textrm}%
  {Platform}{Standard installation location}{Default value}{Notes}
281
  \lineiv{\UNIX{} (pure)}
282 283
          {\filenq{\filevar{prefix}/lib/python2.0/site-packages}}
          {\filenq{/usr/local/lib/python2.0/site-packages}}
284
          {(1)}
285
  \lineiv{\UNIX{} (non-pure)}
286 287
          {\filenq{\filevar{exec-prefix}/lib/python2.0/site-packages}}
          {\filenq{/usr/local/lib/python2.0/site-packages}}
288
          {(1)}
289
  \lineiv{Windows}
290
          {\filenq{\filevar{prefix}}}
291
          {\filenq{C:\textbackslash{}Python}}
292
          {(2)}
293
  \lineiv{Mac OS (pure)}
294 295
          {\filenq{\filevar{prefix}:Lib:site-packages}}
          {\filenq{Python:Lib:site-packages}}
296
          {}
297
  \lineiv{Mac OS (non-pure)}
298 299
          {\filenq{\filevar{prefix}:Lib:site-packages}}
          {\filenq{Python:Lib:site-packages}}
300 301 302 303 304
          {}
\end{tableiv}

\noindent Notes:
\begin{description}
305 306 307
\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
308
  any \UNIX-like system), the default \filevar{prefix} and
309 310
  \filevar{exec-prefix} are \file{/usr/local}.
\item[(2)] The default installation directory on Windows was
311 312
  \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
  Python 1.6a1, 1.5.2, and earlier.
313 314
\end{description}

Greg Ward's avatar
Greg Ward committed
315 316
\filevar{prefix} and \filevar{exec-prefix} stand for the directories
that Python is installed to, and where it finds its libraries at
317
run-time.  They are always the same under Windows and Mac OS, and very
318
often the same under \UNIX.  You can find out what your Python
Greg Ward's avatar
Greg Ward committed
319 320
installation uses for \filevar{prefix} and \filevar{exec-prefix} by
running Python in interactive mode and typing a few simple commands.
321 322
Under \UNIX, just type \code{python} at the shell prompt.  Under
Windows, choose \menuselection{Start \sub Programs \sub Python
323
2.1 \sub Python (command line)}.  Under Mac OS, \XXX{???}.
324
Once the interpreter is started, you type Python code at the
325 326 327
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}:
328

Greg Ward's avatar
Greg Ward committed
329 330 331 332 333 334 335 336 337 338
\begin{verbatim}
Python 1.5.2 (#1, Apr 18 1999, 16:03:16)  [GCC pgcc-2.91.60 19981201 (egcs-1.1.1  on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> import sys
>>> sys.prefix
'/usr'
>>> sys.exec_prefix
'/usr'
\end{verbatim}

339 340 341 342 343
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
344 345 346 347 348 349 350 351


% 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.

352 353 354 355 356 357 358
\newcommand{\installscheme}[8]
  {\begin{tableiii}{lll}{textrm}
          {Type of file}
          {Installation Directory}
          {Override option}
     \lineiii{pure module distribution}
             {\filevar{#1}\filenq{#2}}
359
             {\longprogramopt{install-purelib}}
360 361
     \lineiii{non-pure module distribution}
             {\filevar{#3}\filenq{#4}}
362
             {\longprogramopt{install-platlib}}
363 364
     \lineiii{scripts}
             {\filevar{#5}\filenq{#6}}
365
             {\longprogramopt{install-scripts}}
366 367
     \lineiii{data}
             {\filevar{#7}\filenq{#8}}
368
             {\longprogramopt{install-data}}
369 370
   \end{tableiii}}

371

372
\section{Alternate Installation}
373
\label{alt-install}
374 375 376

Often, it is necessary or desirable to install modules to a location
other than the standard location for third-party Python modules.  For
377
example, on a \UNIX{} system you might not have permission to write to the
378 379
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
380
installation.  This is especially true when upgrading a distribution
381 382 383 384 385 386 387 388 389
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
390
of the following sections applies to you.
391 392


393
\subsection{Alternate installation: \UNIX{} (the home scheme)}
394
\label{alt-install-prefix}
395

396
Under \UNIX, there are two ways to perform an alternate installation.
397
The ``prefix scheme'' is similar to how alternate installation works
398
under Windows and Mac OS, but is not necessarily the most useful way to
399 400 401
maintain a personal Python library.  Hence, we document the more
convenient and commonly useful ``home scheme'' first.

Greg Ward's avatar
Greg Ward committed
402 403 404
The idea behind the ``home scheme'' is that you build and maintain a
personal stash of Python modules, probably under your home directory.
Installing a new module distribution is as simple as
405

406
\begin{verbatim}
407
python setup.py install --home=<dir>
408
\end{verbatim}
409

410
where you can supply any directory you like for the \longprogramopt{home}
411
option.  Lazy typists can just type a tilde (\code{\textasciitilde}); the
Greg Ward's avatar
Greg Ward committed
412
\command{install} command will expand this to your home directory:
413

Greg Ward's avatar
Greg Ward committed
414 415 416
\begin{verbatim}
python setup.py install --home=~
\end{verbatim}
417

418 419 420
The \longprogramopt{home} option defines the installation base
directory.  Files are installed to the following directories under the
installation base as follows:
421 422 423 424 425
\installscheme{home}{/lib/python}
              {home}{/lib/python}
              {home}{/bin}
              {home}{/share}

426
\subsection{Alternate installation: \UNIX{} (the prefix scheme)}
427
\label{alt-install-home}
428 429 430 431 432 433 434 435 436

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.

437
First, consider that many Linux distributions put Python in \file{/usr},
438 439 440 441
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
442 443
\file{/usr/local/lib/python2.\filevar{X}} rather than
\file{/usr/lib/python2.\filevar{X}}.  This can be done with
444

445
\begin{verbatim}
446
/usr/bin/python setup.py install --prefix=/usr/local
447
\end{verbatim}
448

449 450 451
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
452
might search for modules in \file{/usr/local/lib/python2.\filevar{X}},
453
but those modules would have to be installed to, say,
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
454
\file{/mnt/\filevar{@server}/export/lib/python2.\filevar{X}}.  This
455
could be done with
456

457
\begin{verbatim}
458
/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
459
\end{verbatim}
460

461 462 463 464 465 466 467
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:
468

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
469 470
\installscheme{prefix}{/lib/python2.\filevar{X}/site-packages}
              {exec-prefix}{/lib/python2.\filevar{X}/site-packages}
471 472 473
              {prefix}{/bin}
              {prefix}{/share}

474 475 476 477
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.
478 479

Incidentally, the real reason the prefix scheme is important is simply
480
that a standard \UNIX{} installation uses the prefix scheme, but with
481
\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
482
Python itself as \code{sys.prefix} and \code{sys.exec\_prefix}.  Thus,
483 484 485
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.
486 487 488 489 490 491

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
492
used to run extensions installed in this way is compatible with the
Greg Ward's avatar
Greg Ward committed
493 494 495
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
496 497
your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
point to an alternate Python installation, this is immaterial.)
498 499 500


\subsection{Alternate installation: Windows}
501
\label{alt-install-windows}
502 503 504

Since Windows has no conception of a user's home directory, and since
the standard Python installation under Windows is simpler than that
505
under \UNIX, there's no point in having separate \longprogramopt{prefix}
506 507
and \longprogramopt{home} options.  Just use the \longprogramopt{prefix}
option to specify a base directory, e.g.
508

509
\begin{verbatim}
510
python setup.py install --prefix="\Temp\Python"
511
\end{verbatim}
512

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
513 514 515
to install modules to the
\file{\textbackslash{}Temp\textbackslash{}Python} directory on the
current drive.
516

517 518 519
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:
520 521
\installscheme{prefix}{}
              {prefix}{}
522 523
              {prefix}{\textbackslash{}Scripts}
              {prefix}{\textbackslash{}Data}
524 525


Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
526
\subsection{Alternate installation: Mac OS 9}
527
\label{alt-install-macos}
528

Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
529 530
% XXX Mac OS X?

531
Like Windows, Mac OS has no notion of home directories (or even of
532
users), and a fairly simple standard Python installation.  Thus, only a
533 534
\longprogramopt{prefix} option is needed.  It defines the installation
base, and files are installed under it as follows:
535

536 537
\installscheme{prefix}{:Lib:site-packages}
              {prefix}{:Lib:site-packages}
538 539
              {prefix}{:Scripts}
              {prefix}{:Data}
540

541 542
See section~\ref{platform-variations} for information on supplying
command-line arguments to the setup script with MacPython.
543 544 545


\section{Custom Installation}
546
\label{custom-install}
547 548

Sometimes, the alternate installation schemes described in
549
section~\ref{alt-install} just don't do what you want.  You might
550 551 552
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
553
installation scheme}.
554 555 556 557 558 559 560

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
561
use the \UNIX{} ``prefix scheme'' and supply different
562
\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
563 564

For example, say you're installing a module distribution to your home
565
directory under \UNIX---but you want scripts to go in
566 567 568 569 570
\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):
571

572
\begin{verbatim}
573
python setup.py install --home=~ --install-scripts=scripts
574
\end{verbatim}
575

576
Another \UNIX{} example: suppose your Python installation was built and
577 578 579
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
580
absolute directory for the \longprogramopt{install-scripts} option:
581

582
\begin{verbatim}
583
python setup.py install --install-scripts=/usr/local/bin
584
\end{verbatim}
585

586 587 588 589 590 591 592 593 594 595
(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:
596

597
\begin{verbatim}
598
python setup.py install --install-purelib=Site --install-platlib=Site
599
\end{verbatim}
600

601 602 603 604 605
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.
606 607 608

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
609 610 611 612
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
613
installation scheme:
614

615
\begin{verbatim}
Greg Ward's avatar
Greg Ward committed
616
python setup.py install --home=~ \
617 618 619 620
                        --install-purelib=python/lib \
                        --install-platlib=python/lib.$PLAT \
                        --install-scripts=python/scripts
                        --install-data=python/data
621
\end{verbatim}
622 623
% $ % -- bow to font-lock

624
or, equivalently,
625

626
\begin{verbatim}
627 628
python setup.py install --home=~/python \
                        --install-purelib=lib \
629
                        --install-platlib='lib.$PLAT' \
630 631
                        --install-scripts=scripts
                        --install-data=data
632
\end{verbatim}
633 634
% $ % -- bow to font-lock

635
\code{\$PLAT} is not (necessarily) an environment variable---it will be
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
636 637
expanded by the Distutils as it parses your command line options, just
as it does when parsing your configuration file(s).
638 639 640 641

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
642
section~\ref{config-files}):
643

644
\begin{verbatim}
645 646 647 648 649 650
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-data=python/data
651
\end{verbatim}
652

653
or, equivalently,
654

655
\begin{verbatim}
656 657 658 659 660 661
[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data
662
\end{verbatim}
663

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

667
\begin{verbatim}
668
python setup.py --install-base=/tmp
669
\end{verbatim}
670

671 672 673 674
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}.)
675

676 677
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
678 679 680 681 682 683 684 685
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
environment variables, such as Mac OS (\XXX{true?}), the configuration
variables supplied by the Distutils are the only ones you can use.)
See section~\ref{config-files} for details.
686

687 688
% XXX need some Windows and Mac OS examples---when would custom
% installation schemes be needed on those platforms?
689 690


691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730
% 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']
>>>
\end{verbatim}

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
731 732 733 734 735 736 737 738
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
739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775
\citetitle[http://www.python.org/dev/doc/devel/lib/module-site.html]{the
documentation for the \module{site} module} for more information.

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.


776
\section{Distutils Configuration Files}
777
\label{config-files}
778

779 780 781 782 783 784 785 786 787 788 789
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}
790
\label{config-filenames}
791 792

The names and locations of the configuration files vary slightly across
793
platforms.  On \UNIX, the three configuration files (in the order they
794 795 796
are processed) are:
\begin{tableiii}{l|l|c}{textrm}
  {Type of file}{Location and filename}{Notes}
797
  \lineiii{system}{\filenq{\filevar{prefix}/lib/python\filevar{ver}/distutils/distutils.cfg}}{(1)}
798 799 800 801 802 803 804
  \lineiii{personal}{\filenq{\$HOME/.pydistutils.cfg}}{(2)}
  \lineiii{local}{\filenq{setup.cfg}}{(3)}
\end{tableiii}

On Windows, the configuration files are:
\begin{tableiii}{l|l|c}{textrm}
  {Type of file}{Location and filename}{Notes}
805
  \lineiii{system}{\filenq{\filevar{prefix}\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}distutils.cfg}}{(4)}
806
  \lineiii{personal}{\filenq{\%HOME\%\textbackslash{}pydistutils.cfg}}{(5)}
807 808 809
  \lineiii{local}{\filenq{setup.cfg}}{(3)}
\end{tableiii}

810
And on Mac OS, they are:
811 812
\begin{tableiii}{l|l|c}{textrm}
  {Type of file}{Location and filename}{Notes}
813
  \lineiii{system}{\filenq{\filevar{prefix}:Lib:distutils:distutils.cfg}}{(6)}
814 815 816 817 818 819 820 821
  \lineiii{personal}{N/A}{}
  \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
822
  and later on \UNIX, this is as shown. For Python 1.5.2, the Distutils
823 824 825 826
  will normally be installed to
  \file{\filevar{prefix}/lib/site-packages/python1.5/distutils},
  so the system configuration file should be put there under Python
  1.5.2.
827
\item[(2)] On \UNIX, if the \envvar{HOME} environment variable is not
828
  defined, the user's home directory will be determined with the
829 830
  \function{getpwuid()} function from the standard
  \ulink{\module{pwd}}{../lib/module-pwd.html} module.
831 832 833 834 835
\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
836
  \file{C:\textbackslash{}Python\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}distutils.cfg}.
837 838 839 840
  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
841
  \file{C:\textbackslash{}Program~Files\textbackslash{}Python\textbackslash{}distutils\textbackslash{}distutils.cfg}
842 843 844 845 846 847 848
  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.)
\item[(6)] (See also notes (1) and (4).)  The default installation
  prefix is just \file{Python:}, so under Python 1.6 and later this is
849
  normally\file{Python:Lib:distutils:distutils.cfg}.  
850 851 852 853
\end{description}


\subsection{Syntax of config files}
854
\label{config-syntax}
855 856

The Distutils configuration files all have the same syntax.  The config
Andrew M. Kuchling's avatar
Andrew M. Kuchling committed
857
files are grouped into sections.  There is one section for each Distutils
858 859
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
860
as \code{option=value}.
861 862 863

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

865 866 867 868 869 870 871 872 873 874 875 876 877 878 879
\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:
880

881 882 883 884 885
\begin{verbatim}
[build]
build-base=blib
force=1
\end{verbatim}
886

887
which corresponds to the command-line arguments
888

889 890 891
\begin{verbatim}
python setup.py build --build-base=blib --force
\end{verbatim}
892

893 894 895 896 897 898 899 900 901
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.:
902

903 904 905
\begin{verbatim}
python setup.py build --help
\end{verbatim}
906

907 908
and you can find out the complete list of global options by using
\longprogramopt{help} without a command:
909

910 911 912
\begin{verbatim}
python setup.py --help
\end{verbatim}
913

914 915 916
See also the ``Reference'' section of the ``Distributing Python
Modules'' manual.

917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946
\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}

Compiling a Python extension written in C or \Cpp will sometimes
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:

947 948 949
\begin{alltt}
\var{module} ... [\var{sourcefile} ...] [\var{cpparg} ...] [\var{library} ...]
\end{alltt}
950 951 952 953 954 955

Let's examine each of the fields in turn.

\begin{itemize}

\item \var{module} is the name of the extension module to be built,
956 957 958
      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.
959 960

\item \var{sourcefile} is anything that's likely to be a source code
961 962 963 964 965
      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.
966 967

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

971 972
\item \var{library} is anything ending in \file{.a} or beginning with
      \programopt{-l} or \programopt{-L}.
973 974 975 976 977 978 979 980 981 982 983
\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,
984
simply add \programopt{-lm} to the line:
985 986 987 988 989 990

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

Arbitrary switches intended for the compiler or the linker can be
991 992
supplied with the \programopt{-Xcompiler} \var{arg} and
\programopt{-Xlinker} \var{arg} options:
993 994 995 996 997

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

998 999 1000 1001 1002 1003 1004 1005
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++}.
1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067

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}

\subsubsection{Borland C++}

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
\file{python20.lib} into the Borland format.  You can do this as
follows:

\begin{verbatim}
coff2omf python20.lib python20_bcpp.lib
\end{verbatim}

The \file{coff2omf} program comes with the Borland compiler.  The file
\file{python20.lib} is in the \file{Libs} directory of your Python
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
1068
  \seetitle[http://www.cyberus.ca/\~{}g_will/pyExtenDL.shtml]
1069 1070 1071 1072 1073 1074
    {Creating Python Extensions Using Borland's Free Compiler}
    {Document describing how to use Borland's free command-line C++
     compiler to build Python.}
\end{seealso}


1075
\subsubsection{GNU C / Cygwin / MinGW}
1076 1077

This section describes the necessary steps to use Distutils with the
1078
GNU C/\Cpp{} compilers in their Cygwin and MinGW
1079 1080 1081
distributions.\footnote{Check
\url{http://sources.redhat.com/cygwin/} and
\url{http://www.mingw.org/} for more information}
1082 1083
For a Python interpreter that was built with Cygwin, everything should
work without any of these following steps.
1084

1085
These compilers require some special libraries.
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122
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}
pexports python20.dll >python20.def
\end{verbatim}

Then you can create from these information an import library for gcc.
 
\begin{verbatim}
dlltool --dllname python20.dll --def python20.def --output-lib libpython20.a
\end{verbatim}

The resulting library has to be placed in the same directory as 
\file{python20.lib}. (Should be the \file{libs} directory under your
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
1123
\file{cygwin1.dll}.} or for MinGW type:
1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134
 
\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]
1135 1136
    {Building Python modules on MS Windows platform with MinGW}
    {Information about building the required libraries for the MinGW
1137 1138 1139
     environment.}

  \seeurl{http://pyopengl.sourceforge.net/ftp/win32-stuff/}
1140
    {Converted import libraries in Cygwin/MinGW and Borland format,
1141 1142 1143 1144 1145 1146
     and a script to create the registry entries needed for Distutils
     to locate the built Python.}
\end{seealso}



1147
\end{document}