blob: 4add7e149497ed162d1a580eca801129124d58b9 [file] [log] [blame]
Greg Ward7c1e5f62000-03-10 01:56:58 +00001\documentclass{howto}
Greg Ward7593eb32000-04-09 03:59:15 +00002\usepackage{distutils}
Greg Ward7c1e5f62000-03-10 01:56:58 +00003
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +00004% TODO:
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +00005% Fill in XXX comments
6
Greg Ward7c1e5f62000-03-10 01:56:58 +00007\title{Installing Python Modules}
8
9% The audience for this document includes people who don't know anything
10% about Python and aren't about to learn the language just in order to
11% install and maintain it for their users, i.e. system administrators.
12% Thus, I have to be sure to explain the basics at some point:
13% sys.path and PYTHONPATH at least. Should probably give pointers to
14% other docs on "import site", PYTHONSTARTUP, PYTHONHOME, etc.
15%
Greg Ward7c1e5f62000-03-10 01:56:58 +000016% Finally, it might be useful to include all the material from my "Care
17% and Feeding of a Python Installation" talk in here somewhere. Yow!
18
Greg Ward7c1e5f62000-03-10 01:56:58 +000019\author{Greg Ward}
Fred Drakeb914ef02004-01-02 06:57:50 +000020\authoraddress{
21 \strong{Python Software Foundation}\\
22 Email: \email{distutils-sig@python.org}
23}
Greg Ward7c1e5f62000-03-10 01:56:58 +000024
Greg Warde3cca262000-08-31 16:36:31 +000025\makeindex
Greg Ward7c1e5f62000-03-10 01:56:58 +000026
27\begin{document}
28
29\maketitle
30
Greg Warde3cca262000-08-31 16:36:31 +000031\begin{abstract}
32 \noindent
33 This document describes the Python Distribution Utilities
34 (``Distutils'') from the end-user's point-of-view, describing how to
35 extend the capabilities of a standard Python installation by building
36 and installing third-party Python modules and extensions.
37\end{abstract}
38
Greg Ward7c1e5f62000-03-10 01:56:58 +000039%\begin{abstract}
40%\noindent
41%Abstract this!
42%\end{abstract}
43
Fred Drakea9a83e92001-03-01 18:37:52 +000044
45% The ugly "%begin{latexonly}" pseudo-environment supresses the table
46% of contents for HTML generation.
47%
48%begin{latexonly}
Greg Ward7c1e5f62000-03-10 01:56:58 +000049\tableofcontents
Fred Drakea9a83e92001-03-01 18:37:52 +000050%end{latexonly}
51
Greg Ward7c1e5f62000-03-10 01:56:58 +000052
53\section{Introduction}
Greg Warde78298a2000-04-28 17:12:24 +000054\label{intro}
Greg Ward7c1e5f62000-03-10 01:56:58 +000055
Greg Ward6002ffc2000-04-09 20:54:50 +000056Although Python's extensive standard library covers many programming
57needs, there often comes a time when you need to add some new
58functionality to your Python installation in the form of third-party
59modules. This might be necessary to support your own programming, or to
60support an application that you want to use and that happens to be
61written in Python.
62
63In the past, there has been little support for adding third-party
64modules to an existing Python installation. With the introduction of
Fred Drake01df4532000-06-30 03:36:41 +000065the Python Distribution Utilities (Distutils for short) in Python 2.0,
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +000066this changed.
Greg Ward6002ffc2000-04-09 20:54:50 +000067
68This document is aimed primarily at the people who need to install
69third-party Python modules: end-users and system administrators who just
70need to get some Python application running, and existing Python
71programmers who want to add some new goodies to their toolbox. You
72don't need to know Python to read this document; there will be some
73brief forays into using Python's interactive mode to explore your
74installation, but that's it. If you're looking for information on how
75to distribute your own Python modules so that others may use them, see
Fred Drake01df4532000-06-30 03:36:41 +000076the \citetitle[../dist/dist.html]{Distributing Python Modules} manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +000077
78
Greg Ward6002ffc2000-04-09 20:54:50 +000079\subsection{Best case: trivial installation}
Greg Ward1ed49ee2000-09-13 00:00:58 +000080\label{trivial-install}
Greg Ward6002ffc2000-04-09 20:54:50 +000081
82In the best case, someone will have prepared a special version of the
83module distribution you want to install that is targeted specifically at
84your platform and is installed just like any other software on your
85platform. For example, the module developer might make an executable
86installer available for Windows users, an RPM package for users of
87RPM-based Linux systems (Red Hat, SuSE, Mandrake, and many others), a
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +000088Debian package for users of Debian-based Linux systems, and so forth.
Greg Ward6002ffc2000-04-09 20:54:50 +000089
90In that case, you would download the installer appropriate to your
Greg Wardc392caa2000-04-11 02:00:26 +000091platform and do the obvious thing with it: run it if it's an executable
92installer, \code{rpm --install} it if it's an RPM, etc. You don't need
93to run Python or a setup script, you don't need to compile
94anything---you might not even need to read any instructions (although
95it's always a good idea to do so anyways).
Greg Ward6002ffc2000-04-09 20:54:50 +000096
97Of course, things will not always be that easy. You might be interested
Greg Wardc392caa2000-04-11 02:00:26 +000098in a module distribution that doesn't have an easy-to-use installer for
99your platform. In that case, you'll have to start with the source
100distribution released by the module's author/maintainer. Installing
101from a source distribution is not too hard, as long as the modules are
102packaged in the standard way. The bulk of this document is about
103building and installing modules from standard source distributions.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000104
105
Greg Ward6002ffc2000-04-09 20:54:50 +0000106\subsection{The new standard: Distutils}
Greg Warde78298a2000-04-28 17:12:24 +0000107\label{new-standard}
Greg Ward6002ffc2000-04-09 20:54:50 +0000108
109If you download a module source distribution, you can tell pretty
Greg Ward19c67f82000-06-24 01:33:16 +0000110quickly if it was packaged and distributed in the standard way, i.e.
111using the Distutils. First, the distribution's name and version number
112will be featured prominently in the name of the downloaded archive, e.g.
Greg Ward6002ffc2000-04-09 20:54:50 +0000113\file{foo-1.0.tar.gz} or \file{widget-0.9.7.zip}. Next, the archive
114will unpack into a similarly-named directory: \file{foo-1.0} or
115\file{widget-0.9.7}. Additionally, the distribution will contain a
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000116setup script \file{setup.py}, and a file named \file{README.txt} or possibly
117just \file{README}, which should explain that building and installing the
Greg Ward6002ffc2000-04-09 20:54:50 +0000118module distribution is a simple matter of running
Fred Drakea9a83e92001-03-01 18:37:52 +0000119
Greg Ward6002ffc2000-04-09 20:54:50 +0000120\begin{verbatim}
121python setup.py install
122\end{verbatim}
123
124If all these things are true, then you already know how to build and
Fred Drake8612a432002-10-31 20:46:20 +0000125install the modules you've just downloaded: Run the command above.
Greg Ward6002ffc2000-04-09 20:54:50 +0000126Unless you need to install things in a non-standard way or customize the
127build process, you don't really need this manual. Or rather, the above
128command is everything you need to get out of this manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000129
130
Greg Ward29576562000-03-18 15:11:50 +0000131\section{Standard Build and Install}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000132\label{standard-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000133
Greg Warde78298a2000-04-28 17:12:24 +0000134As described in section~\ref{new-standard}, building and installing
Greg Ward6002ffc2000-04-09 20:54:50 +0000135a module distribution using the Distutils is usually one simple command:
Fred Drakea9a83e92001-03-01 18:37:52 +0000136
Greg Ward6002ffc2000-04-09 20:54:50 +0000137\begin{verbatim}
138python setup.py install
139\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000140
Fred Drakeeff9a872000-10-26 16:41:03 +0000141On \UNIX, you'd run this command from a shell prompt; on Windows, you
Greg Warde24f05e2000-09-12 23:55:19 +0000142have to open a command prompt window (``DOS box'') and do it there; on
Fred Drake74f1a562001-09-25 15:12:41 +0000143Mac OS, things are a tad more complicated (see below).
Greg Ward6002ffc2000-04-09 20:54:50 +0000144
145
146\subsection{Platform variations}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000147\label{platform-variations}
Greg Ward6002ffc2000-04-09 20:54:50 +0000148
149You should always run the setup command from the distribution root
150directory, i.e. the top-level subdirectory that the module source
151distribution unpacks into. For example, if you've just downloaded a
Fred Drakeeff9a872000-10-26 16:41:03 +0000152module source distribution \file{foo-1.0.tar.gz} onto a
153\UNIX{} system, the normal thing to do is:
Fred Drakea9a83e92001-03-01 18:37:52 +0000154
Greg Ward6002ffc2000-04-09 20:54:50 +0000155\begin{verbatim}
156gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
157cd foo-1.0
158python setup.py install
159\end{verbatim}
160
Greg Warde24f05e2000-09-12 23:55:19 +0000161On Windows, you'd probably download \file{foo-1.0.zip}. If you
162downloaded the archive file to \file{C:\textbackslash{}Temp}, then it
163would unpack into \file{C:\textbackslash{}Temp\textbackslash{}foo-1.0};
Martin v. Löwis95cf84a2003-10-19 07:32:24 +0000164you can use either a archive manipulator with a graphical user interface
Fred Drake17f690f2001-07-14 02:14:42 +0000165(such as WinZip) or a command-line tool (such as \program{unzip} or
166\program{pkunzip}) to unpack the archive. Then, open a command prompt
167window (``DOS box''), and run:
Fred Drakea9a83e92001-03-01 18:37:52 +0000168
Greg Ward6002ffc2000-04-09 20:54:50 +0000169\begin{verbatim}
Greg Warde24f05e2000-09-12 23:55:19 +0000170cd c:\Temp\foo-1.0
Greg Ward6002ffc2000-04-09 20:54:50 +0000171python setup.py install
172\end{verbatim}
173
Andrew M. Kuchlingd680a862002-11-27 13:34:20 +0000174On Mac OS 9, you double-click the \file{setup.py} script. It will bring
175up a dialog where you can select the \command{install} command. Then
176selecting the \command{run} button will install your distribution.
177The dialog is built dynamically, so all commands and options for this
178specific distribution are listed.
Greg Ward6002ffc2000-04-09 20:54:50 +0000179
180\subsection{Splitting the job up}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000181\label{splitting-up}
Greg Ward6002ffc2000-04-09 20:54:50 +0000182
183Running \code{setup.py install} builds and installs all modules in one
Greg Ward14deaae2000-09-11 00:33:15 +0000184run. If you prefer to work incrementally---especially useful if you
185want to customize the build process, or if things are going wrong---you
186can use the setup script to do one thing at a time. This is
Greg Ward3e7b1332000-05-30 03:00:43 +0000187particularly helpful when the build and install will be done by
Fred Drake8612a432002-10-31 20:46:20 +0000188different users---for example, you might want to build a module distribution
Greg Ward3e7b1332000-05-30 03:00:43 +0000189and hand it off to a system administrator for installation (or do it
190yourself, with super-user privileges).
Greg Ward6002ffc2000-04-09 20:54:50 +0000191
192For example, you can build everything in one step, and then install
193everything in a second step, by invoking the setup script twice:
Fred Drakea9a83e92001-03-01 18:37:52 +0000194
Greg Ward6002ffc2000-04-09 20:54:50 +0000195\begin{verbatim}
196python setup.py build
197python setup.py install
198\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000199
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000200If you do this, you will notice that running the \command{install}
Greg Ward14deaae2000-09-11 00:33:15 +0000201command first runs the \command{build} command, which---in this
202case---quickly notices that it has nothing to do, since everything in
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000203the \file{build} directory is up-to-date.
Greg Ward29576562000-03-18 15:11:50 +0000204
Greg Ward14deaae2000-09-11 00:33:15 +0000205You may not need this ability to break things down often if all you do
206is install modules downloaded off the 'net, but it's very handy for more
207advanced tasks. If you get into distributing your own Python modules
208and extensions, you'll run lots of individual Distutils commands on
209their own.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000210
211
Greg Wardc392caa2000-04-11 02:00:26 +0000212\subsection{How building works}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000213\label{how-build-works}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000214
Greg Wardc392caa2000-04-11 02:00:26 +0000215As implied above, the \command{build} command is responsible for putting
216the files to install into a \emph{build directory}. By default, this is
217\file{build} under the distribution root; if you're excessively
218concerned with speed, or want to keep the source tree pristine, you can
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000219change the build directory with the \longprogramopt{build-base} option.
220For example:
Fred Drakea9a83e92001-03-01 18:37:52 +0000221
Greg Wardc392caa2000-04-11 02:00:26 +0000222\begin{verbatim}
223python setup.py build --build-base=/tmp/pybuild/foo-1.0
224\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000225
Greg Wardc392caa2000-04-11 02:00:26 +0000226(Or you could do this permanently with a directive in your system or
227personal Distutils configuration file; see
Greg Warde78298a2000-04-28 17:12:24 +0000228section~\ref{config-files}.) Normally, this isn't necessary.
Greg Wardc392caa2000-04-11 02:00:26 +0000229
230The default layout for the build tree is as follows:
Fred Drakea9a83e92001-03-01 18:37:52 +0000231
Greg Wardc392caa2000-04-11 02:00:26 +0000232\begin{verbatim}
233--- build/ --- lib/
234or
235--- build/ --- lib.<plat>/
236 temp.<plat>/
237\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000238
Greg Wardc392caa2000-04-11 02:00:26 +0000239where \code{<plat>} expands to a brief description of the current
Greg Ward7ef2ba72000-10-22 01:40:08 +0000240OS/hardware platform and Python version. The first form, with just a
241\file{lib} directory, is used for ``pure module distributions''---that
242is, module distributions that include only pure Python modules. If a
Fred Drake42119e42001-03-03 19:47:24 +0000243module distribution contains any extensions (modules written in C/\Cpp),
Greg Ward7ef2ba72000-10-22 01:40:08 +0000244then the second form, with two \code{<plat>} directories, is used. In
245that case, the \file{temp.\filevar{plat}} directory holds temporary
246files generated by the compile/link process that don't actually get
247installed. In either case, the \file{lib} (or
Greg Wardc392caa2000-04-11 02:00:26 +0000248\file{lib.\filevar{plat}}) directory contains all Python modules (pure
249Python and extensions) that will be installed.
250
251In the future, more directories will be added to handle Python scripts,
252documentation, binary executables, and whatever else is needed to handle
Greg Wardd5faa7e2000-04-12 01:42:19 +0000253the job of installing Python modules and applications.
Greg Wardc392caa2000-04-11 02:00:26 +0000254
255
256\subsection{How installation works}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000257\label{how-install-works}
Greg Wardc392caa2000-04-11 02:00:26 +0000258
259After the \command{build} command runs (whether you run it explicitly,
260or the \command{install} command does it for you), the work of the
261\command{install} command is relatively simple: all it has to do is copy
262everything under \file{build/lib} (or \file{build/lib.\filevar{plat}})
263to your chosen installation directory.
264
265If you don't choose an installation directory---i.e., if you just run
266\code{setup.py install}---then the \command{install} command installs to
267the standard location for third-party Python modules. This location
268varies by platform and by how you built/installed Python itself. On
Fred Drake74f1a562001-09-25 15:12:41 +0000269\UNIX{} and Mac OS, it also depends on whether the module distribution
Greg Wardc392caa2000-04-11 02:00:26 +0000270being installed is pure Python or contains extensions (``non-pure''):
Greg Wardd5faa7e2000-04-12 01:42:19 +0000271\begin{tableiv}{l|l|l|c}{textrm}%
272 {Platform}{Standard installation location}{Default value}{Notes}
Fred Drakeeff9a872000-10-26 16:41:03 +0000273 \lineiv{\UNIX{} (pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000274 {\filenq{\filevar{prefix}/lib/python2.0/site-packages}}
275 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000276 {(1)}
Fred Drakeeff9a872000-10-26 16:41:03 +0000277 \lineiv{\UNIX{} (non-pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000278 {\filenq{\filevar{exec-prefix}/lib/python2.0/site-packages}}
279 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000280 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000281 \lineiv{Windows}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000282 {\filenq{\filevar{prefix}}}
Greg Ward4756e5f2000-04-19 22:40:12 +0000283 {\filenq{C:\textbackslash{}Python}}
Greg Ward502d2b42000-04-12 14:20:15 +0000284 {(2)}
Fred Drake74f1a562001-09-25 15:12:41 +0000285 \lineiv{Mac OS (pure)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000286 {\filenq{\filevar{prefix}:Lib:site-packages}}
287 {\filenq{Python:Lib:site-packages}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000288 {}
Fred Drake74f1a562001-09-25 15:12:41 +0000289 \lineiv{Mac OS (non-pure)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000290 {\filenq{\filevar{prefix}:Lib:site-packages}}
291 {\filenq{Python:Lib:site-packages}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000292 {}
293\end{tableiv}
294
295\noindent Notes:
296\begin{description}
Greg Ward502d2b42000-04-12 14:20:15 +0000297\item[(1)] Most Linux distributions include Python as a standard part of
298 the system, so \filevar{prefix} and \filevar{exec-prefix} are usually
299 both \file{/usr} on Linux. If you build Python yourself on Linux (or
Fred Drakeeff9a872000-10-26 16:41:03 +0000300 any \UNIX-like system), the default \filevar{prefix} and
Greg Ward502d2b42000-04-12 14:20:15 +0000301 \filevar{exec-prefix} are \file{/usr/local}.
302\item[(2)] The default installation directory on Windows was
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000303 \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
304 Python 1.6a1, 1.5.2, and earlier.
Greg Wardd5faa7e2000-04-12 01:42:19 +0000305\end{description}
306
Greg Wardc392caa2000-04-11 02:00:26 +0000307\filevar{prefix} and \filevar{exec-prefix} stand for the directories
308that Python is installed to, and where it finds its libraries at
Fred Drake74f1a562001-09-25 15:12:41 +0000309run-time. They are always the same under Windows and Mac OS, and very
Fred Drakeeff9a872000-10-26 16:41:03 +0000310often the same under \UNIX. You can find out what your Python
Greg Wardc392caa2000-04-11 02:00:26 +0000311installation uses for \filevar{prefix} and \filevar{exec-prefix} by
312running Python in interactive mode and typing a few simple commands.
Fred Drakeb2d10062001-07-06 22:46:52 +0000313Under \UNIX, just type \code{python} at the shell prompt. Under
314Windows, choose \menuselection{Start \sub Programs \sub Python
Andrew M. Kuchlingd680a862002-11-27 13:34:20 +00003152.1 \sub Python (command line)}. Under Mac OS 9, start \file{PythonInterpreter}.
Fred Drake01df4532000-06-30 03:36:41 +0000316Once the interpreter is started, you type Python code at the
Fred Drakeb2d10062001-07-06 22:46:52 +0000317prompt. For example, on my Linux system, I type the three Python
318statements shown below, and get the output as shown, to find out my
319\filevar{prefix} and \filevar{exec-prefix}:
Fred Drake01df4532000-06-30 03:36:41 +0000320
Greg Wardc392caa2000-04-11 02:00:26 +0000321\begin{verbatim}
322Python 1.5.2 (#1, Apr 18 1999, 16:03:16) [GCC pgcc-2.91.60 19981201 (egcs-1.1.1 on linux2
323Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
324>>> import sys
325>>> sys.prefix
326'/usr'
327>>> sys.exec_prefix
328'/usr'
329\end{verbatim}
330
Greg Ward7ef2ba72000-10-22 01:40:08 +0000331If you don't want to install modules to the standard location, or if you
332don't have permission to write there, then you need to read about
333alternate installations in section~\ref{alt-install}. If you want to
334customize your installation directories more heavily, see
335section~\ref{custom-install} on custom installations.
Greg Wardc392caa2000-04-11 02:00:26 +0000336
337
338% This rather nasty macro is used to generate the tables that describe
339% each installation scheme. It's nasty because it takes two arguments
340% for each "slot" in an installation scheme, there will soon be more
341% than five of these slots, and TeX has a limit of 10 arguments to a
342% macro. Uh-oh.
343
Greg Ward29576562000-03-18 15:11:50 +0000344\newcommand{\installscheme}[8]
Fred Drake629dd992003-07-02 14:33:11 +0000345 {\begin{tableiii}{l|l|l}{textrm}
Greg Ward29576562000-03-18 15:11:50 +0000346 {Type of file}
347 {Installation Directory}
348 {Override option}
349 \lineiii{pure module distribution}
350 {\filevar{#1}\filenq{#2}}
Greg Warda021aca2000-04-19 22:34:11 +0000351 {\longprogramopt{install-purelib}}
Greg Ward29576562000-03-18 15:11:50 +0000352 \lineiii{non-pure module distribution}
353 {\filevar{#3}\filenq{#4}}
Greg Warda021aca2000-04-19 22:34:11 +0000354 {\longprogramopt{install-platlib}}
Greg Ward29576562000-03-18 15:11:50 +0000355 \lineiii{scripts}
356 {\filevar{#5}\filenq{#6}}
Greg Warda021aca2000-04-19 22:34:11 +0000357 {\longprogramopt{install-scripts}}
Greg Ward29576562000-03-18 15:11:50 +0000358 \lineiii{data}
359 {\filevar{#7}\filenq{#8}}
Greg Warda021aca2000-04-19 22:34:11 +0000360 {\longprogramopt{install-data}}
Greg Ward29576562000-03-18 15:11:50 +0000361 \end{tableiii}}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000362
Greg Ward0bc59532000-09-30 21:06:40 +0000363
Greg Ward29576562000-03-18 15:11:50 +0000364\section{Alternate Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000365\label{alt-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000366
Greg Ward29576562000-03-18 15:11:50 +0000367Often, it is necessary or desirable to install modules to a location
368other than the standard location for third-party Python modules. For
Fred Drakeeff9a872000-10-26 16:41:03 +0000369example, on a \UNIX{} system you might not have permission to write to the
Greg Ward29576562000-03-18 15:11:50 +0000370standard third-party module directory. Or you might wish to try out a
371module before making it a standard part of your local Python
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000372installation. This is especially true when upgrading a distribution
Greg Ward29576562000-03-18 15:11:50 +0000373already present: you want to make sure your existing base of scripts
374still works with the new version before actually upgrading.
375
376The Distutils \command{install} command is designed to make installing
377module distributions to an alternate location simple and painless. The
378basic idea is that you supply a base directory for the installation, and
379the \command{install} command picks a set of directories (called an
380\emph{installation scheme}) under this base directory in which to
381install files. The details differ across platforms, so read whichever
Andrew M. Kuchling30537da2001-02-17 00:42:56 +0000382of the following sections applies to you.
Greg Ward29576562000-03-18 15:11:50 +0000383
384
Fred Drakeeff9a872000-10-26 16:41:03 +0000385\subsection{Alternate installation: \UNIX{} (the home scheme)}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000386\label{alt-install-prefix}
Greg Ward29576562000-03-18 15:11:50 +0000387
Fred Drakeeff9a872000-10-26 16:41:03 +0000388Under \UNIX, there are two ways to perform an alternate installation.
Greg Ward29576562000-03-18 15:11:50 +0000389The ``prefix scheme'' is similar to how alternate installation works
Fred Drake74f1a562001-09-25 15:12:41 +0000390under Windows and Mac OS, but is not necessarily the most useful way to
Greg Ward29576562000-03-18 15:11:50 +0000391maintain a personal Python library. Hence, we document the more
392convenient and commonly useful ``home scheme'' first.
393
Greg Wardc392caa2000-04-11 02:00:26 +0000394The idea behind the ``home scheme'' is that you build and maintain a
395personal stash of Python modules, probably under your home directory.
396Installing a new module distribution is as simple as
Fred Drakea9a83e92001-03-01 18:37:52 +0000397
Greg Ward29576562000-03-18 15:11:50 +0000398\begin{verbatim}
399python setup.py install --home=<dir>
400\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000401
Greg Warda021aca2000-04-19 22:34:11 +0000402where you can supply any directory you like for the \longprogramopt{home}
Greg Ward4756e5f2000-04-19 22:40:12 +0000403option. Lazy typists can just type a tilde (\code{\textasciitilde}); the
Greg Wardc392caa2000-04-11 02:00:26 +0000404\command{install} command will expand this to your home directory:
Fred Drakea9a83e92001-03-01 18:37:52 +0000405
Greg Wardc392caa2000-04-11 02:00:26 +0000406\begin{verbatim}
407python setup.py install --home=~
408\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000409
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000410The \longprogramopt{home} option defines the installation base
411directory. Files are installed to the following directories under the
412installation base as follows:
Greg Ward29576562000-03-18 15:11:50 +0000413\installscheme{home}{/lib/python}
414 {home}{/lib/python}
415 {home}{/bin}
416 {home}{/share}
417
Fred Drakeeff9a872000-10-26 16:41:03 +0000418\subsection{Alternate installation: \UNIX{} (the prefix scheme)}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000419\label{alt-install-home}
Greg Ward29576562000-03-18 15:11:50 +0000420
421The ``prefix scheme'' is useful when you wish to use one Python
422installation to perform the build/install (i.e., to run the setup
423script), but install modules into the third-party module directory of a
424different Python installation (or something that looks like a different
425Python installation). If this sounds a trifle unusual, it is---that's
426why the ``home scheme'' comes first. However, there are at least two
427known cases where the prefix scheme will be useful.
428
Greg Ward19c67f82000-06-24 01:33:16 +0000429First, consider that many Linux distributions put Python in \file{/usr},
Greg Ward29576562000-03-18 15:11:50 +0000430rather than the more traditional \file{/usr/local}. This is entirely
431appropriate, since in those cases Python is part of ``the system''
432rather than a local add-on. However, if you are installing Python
433modules from source, you probably want them to go in
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000434\file{/usr/local/lib/python2.\filevar{X}} rather than
435\file{/usr/lib/python2.\filevar{X}}. This can be done with
Fred Drakea9a83e92001-03-01 18:37:52 +0000436
Greg Ward29576562000-03-18 15:11:50 +0000437\begin{verbatim}
438/usr/bin/python setup.py install --prefix=/usr/local
439\end{verbatim}
440
441Another possibility is a network filesystem where the name used to write
442to a remote directory is different from the name used to read it: for
443example, the Python interpreter accessed as \file{/usr/local/bin/python}
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000444might search for modules in \file{/usr/local/lib/python2.\filevar{X}},
Greg Ward29576562000-03-18 15:11:50 +0000445but those modules would have to be installed to, say,
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000446\file{/mnt/\filevar{@server}/export/lib/python2.\filevar{X}}. This
Greg Ward29576562000-03-18 15:11:50 +0000447could be done with
Fred Drakea9a83e92001-03-01 18:37:52 +0000448
Greg Ward29576562000-03-18 15:11:50 +0000449\begin{verbatim}
450/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
451\end{verbatim}
452
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000453In either case, the \longprogramopt{prefix} option defines the
454installation base, and the \longprogramopt{exec-prefix} option defines
455the platform-specific installation base, which is used for
456platform-specific files. (Currently, this just means non-pure module
457distributions, but could be expanded to C libraries, binary executables,
458etc.) If \longprogramopt{exec-prefix} is not supplied, it defaults to
459\longprogramopt{prefix}. Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000460
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000461\installscheme{prefix}{/lib/python2.\filevar{X}/site-packages}
462 {exec-prefix}{/lib/python2.\filevar{X}/site-packages}
Greg Ward29576562000-03-18 15:11:50 +0000463 {prefix}{/bin}
464 {prefix}{/share}
465
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000466There is no requirement that \longprogramopt{prefix} or
467\longprogramopt{exec-prefix} actually point to an alternate Python
468installation; if the directories listed above do not already exist, they
469are created at installation time.
Greg Ward29576562000-03-18 15:11:50 +0000470
471Incidentally, the real reason the prefix scheme is important is simply
Fred Drakeeff9a872000-10-26 16:41:03 +0000472that a standard \UNIX{} installation uses the prefix scheme, but with
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000473\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000474Python itself as \code{sys.prefix} and \code{sys.exec\_prefix}. Thus,
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000475you might think you'll never use the prefix scheme, but every time you
476run \code{python setup.py install} without any other options, you're
477using it.
Greg Ward29576562000-03-18 15:11:50 +0000478
479Note that installing extensions to an alternate Python installation has
480no effect on how those extensions are built: in particular, the Python
481header files (\file{Python.h} and friends) installed with the Python
482interpreter used to run the setup script will be used in compiling
483extensions. It is your responsibility to ensure that the interpreter
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000484used to run extensions installed in this way is compatible with the
Greg Wardc392caa2000-04-11 02:00:26 +0000485interpreter used to build them. The best way to do this is to ensure
486that the two interpreters are the same version of Python (possibly
487different builds, or possibly copies of the same build). (Of course, if
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000488your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
489point to an alternate Python installation, this is immaterial.)
Greg Ward29576562000-03-18 15:11:50 +0000490
491
492\subsection{Alternate installation: Windows}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000493\label{alt-install-windows}
Greg Ward29576562000-03-18 15:11:50 +0000494
495Since Windows has no conception of a user's home directory, and since
496the standard Python installation under Windows is simpler than that
Fred Drakeeff9a872000-10-26 16:41:03 +0000497under \UNIX, there's no point in having separate \longprogramopt{prefix}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000498and \longprogramopt{home} options. Just use the \longprogramopt{prefix}
499option to specify a base directory, e.g.
Fred Drakea9a83e92001-03-01 18:37:52 +0000500
Greg Ward29576562000-03-18 15:11:50 +0000501\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000502python setup.py install --prefix="\Temp\Python"
Greg Ward29576562000-03-18 15:11:50 +0000503\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000504
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000505to install modules to the
506\file{\textbackslash{}Temp\textbackslash{}Python} directory on the
507current drive.
Greg Ward29576562000-03-18 15:11:50 +0000508
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000509The installation base is defined by the \longprogramopt{prefix} option;
510the \longprogramopt{exec-prefix} option is not supported under Windows.
511Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000512\installscheme{prefix}{}
513 {prefix}{}
Greg Ward4756e5f2000-04-19 22:40:12 +0000514 {prefix}{\textbackslash{}Scripts}
515 {prefix}{\textbackslash{}Data}
Greg Ward29576562000-03-18 15:11:50 +0000516
517
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000518\subsection{Alternate installation: Mac OS 9}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000519\label{alt-install-macos}
Greg Ward29576562000-03-18 15:11:50 +0000520
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000521% XXX Mac OS X?
522
Fred Drake74f1a562001-09-25 15:12:41 +0000523Like Windows, Mac OS has no notion of home directories (or even of
Greg Ward29576562000-03-18 15:11:50 +0000524users), and a fairly simple standard Python installation. Thus, only a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000525\longprogramopt{prefix} option is needed. It defines the installation
526base, and files are installed under it as follows:
Greg Ward29576562000-03-18 15:11:50 +0000527
Greg Ward8c562592000-09-13 00:12:37 +0000528\installscheme{prefix}{:Lib:site-packages}
529 {prefix}{:Lib:site-packages}
Greg Ward8e14f052000-03-22 01:00:23 +0000530 {prefix}{:Scripts}
531 {prefix}{:Data}
Greg Ward29576562000-03-18 15:11:50 +0000532
Greg Ward8c562592000-09-13 00:12:37 +0000533See section~\ref{platform-variations} for information on supplying
534command-line arguments to the setup script with MacPython.
Greg Ward29576562000-03-18 15:11:50 +0000535
536
537\section{Custom Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000538\label{custom-install}
Greg Ward29576562000-03-18 15:11:50 +0000539
540Sometimes, the alternate installation schemes described in
Greg Warde78298a2000-04-28 17:12:24 +0000541section~\ref{alt-install} just don't do what you want. You might
Greg Ward29576562000-03-18 15:11:50 +0000542want to tweak just one or two directories while keeping everything under
543the same base directory, or you might want to completely redefine the
544installation scheme. In either case, you're creating a \emph{custom
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000545installation scheme}.
Greg Ward29576562000-03-18 15:11:50 +0000546
547You probably noticed the column of ``override options'' in the tables
548describing the alternate installation schemes above. Those options are
549how you define a custom installation scheme. These override options can
550be relative, absolute, or explicitly defined in terms of one of the
551installation base directories. (There are two installation base
552directories, and they are normally the same---they only differ when you
Fred Drakeeff9a872000-10-26 16:41:03 +0000553use the \UNIX{} ``prefix scheme'' and supply different
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000554\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
Greg Ward29576562000-03-18 15:11:50 +0000555
556For example, say you're installing a module distribution to your home
Fred Drakeeff9a872000-10-26 16:41:03 +0000557directory under \UNIX---but you want scripts to go in
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000558\file{\textasciitilde/scripts} rather than \file{\textasciitilde/bin}.
559As you might expect, you can override this directory with the
560\longprogramopt{install-scripts} option; in this case, it makes most
561sense to supply a relative path, which will be interpreted relative to
562the installation base directory (your home directory, in this case):
Fred Drakea9a83e92001-03-01 18:37:52 +0000563
Greg Ward29576562000-03-18 15:11:50 +0000564\begin{verbatim}
Greg Ward19c67f82000-06-24 01:33:16 +0000565python setup.py install --home=~ --install-scripts=scripts
Greg Ward29576562000-03-18 15:11:50 +0000566\end{verbatim}
567
Fred Drakeeff9a872000-10-26 16:41:03 +0000568Another \UNIX{} example: suppose your Python installation was built and
Greg Ward29576562000-03-18 15:11:50 +0000569installed with a prefix of \file{/usr/local/python}, so under a standard
570installation scripts will wind up in \file{/usr/local/python/bin}. If
571you want them in \file{/usr/local/bin} instead, you would supply this
Greg Warda021aca2000-04-19 22:34:11 +0000572absolute directory for the \longprogramopt{install-scripts} option:
Fred Drakea9a83e92001-03-01 18:37:52 +0000573
Greg Ward29576562000-03-18 15:11:50 +0000574\begin{verbatim}
575python setup.py install --install-scripts=/usr/local/bin
576\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000577
Greg Ward29576562000-03-18 15:11:50 +0000578(This performs an installation using the ``prefix scheme,'' where the
579prefix is whatever your Python interpreter was installed with---
580\file{/usr/local/python} in this case.)
581
582If you maintain Python on Windows, you might want third-party modules to
583live in a subdirectory of \filevar{prefix}, rather than right in
584\filevar{prefix} itself. This is almost as easy as customizing the
585script installation directory---you just have to remember that there are
586two types of modules to worry about, pure modules and non-pure modules
587(i.e., modules from a non-pure distribution). For example:
Fred Drakea9a83e92001-03-01 18:37:52 +0000588
Greg Ward29576562000-03-18 15:11:50 +0000589\begin{verbatim}
590python setup.py install --install-purelib=Site --install-platlib=Site
591\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000592
Andrew M. Kuchling3a7f4052002-11-15 02:52:44 +0000593The specified installation directories are relative to
594\filevar{prefix}. Of course, you also have to ensure that these
595directories are in Python's module search path, such as by putting a
596\file{.pth} file in \filevar{prefix}. See section~\ref{search-path}
597to find out how to modify Python's search path.
Greg Ward29576562000-03-18 15:11:50 +0000598
599If you want to define an entire installation scheme, you just have to
600supply all of the installation directory options. The recommended way
Greg Wardc392caa2000-04-11 02:00:26 +0000601to do this is to supply relative paths; for example, if you want to
602maintain all Python module-related files under \file{python} in your
603home directory, and you want a separate directory for each platform that
604you use your home directory from, you might define the following
Greg Ward29576562000-03-18 15:11:50 +0000605installation scheme:
Fred Drakea9a83e92001-03-01 18:37:52 +0000606
Greg Ward29576562000-03-18 15:11:50 +0000607\begin{verbatim}
Greg Wardc392caa2000-04-11 02:00:26 +0000608python setup.py install --home=~ \
Greg Ward29576562000-03-18 15:11:50 +0000609 --install-purelib=python/lib \
610 --install-platlib=python/lib.$PLAT \
611 --install-scripts=python/scripts
612 --install-data=python/data
613\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000614% $ % -- bow to font-lock
615
Greg Ward29576562000-03-18 15:11:50 +0000616or, equivalently,
Fred Drakea9a83e92001-03-01 18:37:52 +0000617
Greg Ward29576562000-03-18 15:11:50 +0000618\begin{verbatim}
619python setup.py install --home=~/python \
620 --install-purelib=lib \
Greg Ward19c67f82000-06-24 01:33:16 +0000621 --install-platlib='lib.$PLAT' \
Greg Ward29576562000-03-18 15:11:50 +0000622 --install-scripts=scripts
623 --install-data=data
624\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000625% $ % -- bow to font-lock
626
Greg Ward29576562000-03-18 15:11:50 +0000627\code{\$PLAT} is not (necessarily) an environment variable---it will be
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000628expanded by the Distutils as it parses your command line options, just
629as it does when parsing your configuration file(s).
Greg Ward29576562000-03-18 15:11:50 +0000630
631Obviously, specifying the entire installation scheme every time you
632install a new module distribution would be very tedious. Thus, you can
633put these options into your Distutils config file (see
Greg Warde78298a2000-04-28 17:12:24 +0000634section~\ref{config-files}):
Fred Drakea9a83e92001-03-01 18:37:52 +0000635
Greg Ward169f91b2000-03-10 01:57:51 +0000636\begin{verbatim}
637[install]
Greg Ward29576562000-03-18 15:11:50 +0000638install-base=$HOME
639install-purelib=python/lib
640install-platlib=python/lib.$PLAT
641install-scripts=python/scripts
642install-data=python/data
Greg Ward169f91b2000-03-10 01:57:51 +0000643\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000644
Greg Ward29576562000-03-18 15:11:50 +0000645or, equivalently,
Fred Drakea9a83e92001-03-01 18:37:52 +0000646
Greg Ward169f91b2000-03-10 01:57:51 +0000647\begin{verbatim}
648[install]
Greg Ward29576562000-03-18 15:11:50 +0000649install-base=$HOME/python
650install-purelib=lib
651install-platlib=lib.$PLAT
652install-scripts=scripts
653install-data=data
Greg Ward169f91b2000-03-10 01:57:51 +0000654\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000655
Greg Ward29576562000-03-18 15:11:50 +0000656Note that these two are \emph{not} equivalent if you supply a different
657installation base directory when you run the setup script. For example,
Fred Drakea9a83e92001-03-01 18:37:52 +0000658
Greg Ward7c1e5f62000-03-10 01:56:58 +0000659\begin{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000660python setup.py --install-base=/tmp
Greg Ward7c1e5f62000-03-10 01:56:58 +0000661\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000662
Greg Ward29576562000-03-18 15:11:50 +0000663would install pure modules to \filevar{/tmp/python/lib} in the first
664case, and to \filevar{/tmp/lib} in the second case. (For the second
665case, you probably want to supply an installation base of
666\file{/tmp/python}.)
Greg Ward169f91b2000-03-10 01:57:51 +0000667
Greg Ward29576562000-03-18 15:11:50 +0000668You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
669sample configuration file input. These are Distutils configuration
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000670variables, which bear a strong resemblance to environment variables.
671In fact, you can use environment variables in config files on
672platforms that have such a notion but the Distutils additionally
673define a few extra variables that may not be in your environment, such
674as \code{\$PLAT}. (And of course, on systems that don't have
Andrew M. Kuchlingd680a862002-11-27 13:34:20 +0000675environment variables, such as Mac OS 9, the configuration
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000676variables supplied by the Distutils are the only ones you can use.)
677See section~\ref{config-files} for details.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000678
Andrew M. Kuchling0cc8c372002-05-24 17:06:17 +0000679% XXX need some Windows and Mac OS examples---when would custom
680% installation schemes be needed on those platforms?
Greg Ward7c1e5f62000-03-10 01:56:58 +0000681
Greg Ward7c1e5f62000-03-10 01:56:58 +0000682
Andrew M. Kuchling3a7f4052002-11-15 02:52:44 +0000683% XXX I'm not sure where this section should go.
684\subsection{Modifying Python's Search Path}
685\label{search-path}
686
687When the Python interpreter executes an \keyword{import} statement, it
688searches for both Python code and extension modules along a search
689path. A default value for the path is configured into the Python
690binary when the interpreter is built. You can determine the path by
691importing the \module{sys} module and printing the value of
692\code{sys.path}.
693
694\begin{verbatim}
695$ python
696Python 2.2 (#11, Oct 3 2002, 13:31:27)
697[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
698Type ``help'', ``copyright'', ``credits'' or ``license'' for more information.
699>>> import sys
700>>> sys.path
701['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
702 '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
703 '/usr/local/lib/python2.3/site-packages']
704>>>
Fred Drake2884d6d2003-07-02 12:27:43 +0000705\end{verbatim} % $ <-- bow to font-lock
Andrew M. Kuchling3a7f4052002-11-15 02:52:44 +0000706
707The null string in \code{sys.path} represents the current working
708directory.
709
710The expected convention for locally installed packages is to put them
711in the \file{.../site-packages/} directory, but you may want to
712install Python modules into some arbitrary directory. For example,
713your site may have a convention of keeping all software related to the
714web server under \file{/www}. Add-on Python modules might then belong
715in \file{/www/python}, and in order to import them, this directory
716must be added to \code{sys.path}. There are several different ways to
717add the directory.
718
719The most convenient way is to add a path configuration file to a
720directory that's already on Python's path, usually to the
721\file{.../site-packages/} directory. Path configuration files have an
722extension of \file{.pth}, and each line must contain a single path
Andrew M. Kuchling1a54d712002-11-25 13:56:12 +0000723that will be appended to \code{sys.path}. (Because the new paths are
724appended to \code{sys.path}, modules in the added directories will not
725override standard modules. This means you can't use this mechanism
726for installing fixed versions of standard modules.)
727
728Paths can be absolute or relative, in which case they're relative to
729the directory containing the \file{.pth} file. Any directories added
730to the search path will be scanned in turn for \file{.pth} files. See
Andrew M. Kuchling3a7f4052002-11-15 02:52:44 +0000731\citetitle[http://www.python.org/dev/doc/devel/lib/module-site.html]{the
732documentation for the \module{site} module} for more information.
733
734A slightly less convenient way is to edit the \file{site.py} file in
735Python's standard library, and modify \code{sys.path}. \file{site.py}
736is automatically imported when the Python interpreter is executed,
737unless the \programopt{-S} switch is supplied to suppress this
738behaviour. So you could simply edit \file{site.py} and add two lines to it:
739
740\begin{verbatim}
741import sys
742sys.path.append('/www/python/')
743\end{verbatim}
744
745However, if you reinstall the same major version of Python (perhaps
746when upgrading from 2.2 to 2.2.2, for example) \file{site.py} will be
747overwritten by the stock version. You'd have to remember that it was
748modified and save a copy before doing the installation.
749
750There are two environment variables that can modify \code{sys.path}.
751\envvar{PYTHONHOME} sets an alternate value for the prefix of the
752Python installation. For example, if \envvar{PYTHONHOME} is set to
753\samp{/www/python}, the search path will be set to \code{['',
754'/www/python/lib/python2.2/', '/www/python/lib/python2.3/plat-linux2',
755...]}.
756
757The \envvar{PYTHONPATH} variable can be set to a list of paths that
758will be added to the beginning of \code{sys.path}. For example, if
759\envvar{PYTHONPATH} is set to \samp{/www/python:/opt/py}, the search
760path will begin with \code{['/www/python', '/opt/py']}. (Note that
761directories must exist in order to be added to \code{sys.path}; the
762\module{site} module removes paths that don't exist.)
763
764Finally, \code{sys.path} is just a regular Python list, so any Python
765application can modify it by adding or removing entries.
766
767
Greg Ward6002ffc2000-04-09 20:54:50 +0000768\section{Distutils Configuration Files}
Greg Warde78298a2000-04-28 17:12:24 +0000769\label{config-files}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000770
Greg Ward7ef2ba72000-10-22 01:40:08 +0000771As mentioned above, you can use Distutils configuration files to record
772personal or site preferences for any Distutils options. That is, any
773option to any command can be stored in one of two or three (depending on
774your platform) configuration files, which will be consulted before the
775command-line is parsed. This means that configuration files will
776override default values, and the command-line will in turn override
777configuration files. Furthermore, if multiple configuration files
778apply, values from ``earlier'' files are overridden by ``later'' files.
779
780
781\subsection{Location and names of config files}
Fred Drake0bbaa512001-01-24 16:39:35 +0000782\label{config-filenames}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000783
784The names and locations of the configuration files vary slightly across
Fred Drakeeff9a872000-10-26 16:41:03 +0000785platforms. On \UNIX, the three configuration files (in the order they
Greg Ward7ef2ba72000-10-22 01:40:08 +0000786are processed) are:
787\begin{tableiii}{l|l|c}{textrm}
788 {Type of file}{Location and filename}{Notes}
Andrew M. Kuchling22d35a72001-12-06 16:34:53 +0000789 \lineiii{system}{\filenq{\filevar{prefix}/lib/python\filevar{ver}/distutils/distutils.cfg}}{(1)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000790 \lineiii{personal}{\filenq{\$HOME/.pydistutils.cfg}}{(2)}
791 \lineiii{local}{\filenq{setup.cfg}}{(3)}
792\end{tableiii}
793
794On Windows, the configuration files are:
795\begin{tableiii}{l|l|c}{textrm}
796 {Type of file}{Location and filename}{Notes}
Andrew M. Kuchling22d35a72001-12-06 16:34:53 +0000797 \lineiii{system}{\filenq{\filevar{prefix}\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}distutils.cfg}}{(4)}
Fred Drake8612a432002-10-31 20:46:20 +0000798 \lineiii{personal}{\filenq{\%HOME\%\textbackslash{}pydistutils.cfg}}{(5)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000799 \lineiii{local}{\filenq{setup.cfg}}{(3)}
800\end{tableiii}
801
Fred Drake74f1a562001-09-25 15:12:41 +0000802And on Mac OS, they are:
Greg Ward7ef2ba72000-10-22 01:40:08 +0000803\begin{tableiii}{l|l|c}{textrm}
804 {Type of file}{Location and filename}{Notes}
Andrew M. Kuchling22d35a72001-12-06 16:34:53 +0000805 \lineiii{system}{\filenq{\filevar{prefix}:Lib:distutils:distutils.cfg}}{(6)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000806 \lineiii{personal}{N/A}{}
807 \lineiii{local}{\filenq{setup.cfg}}{(3)}
808\end{tableiii}
809
810\noindent Notes:
811\begin{description}
812\item[(1)] Strictly speaking, the system-wide configuration file lives
813 in the directory where the Distutils are installed; under Python 1.6
Fred Drakeeff9a872000-10-26 16:41:03 +0000814 and later on \UNIX, this is as shown. For Python 1.5.2, the Distutils
Greg Ward7ef2ba72000-10-22 01:40:08 +0000815 will normally be installed to
Greg Ward48923812003-08-23 02:09:18 +0000816 \file{\filevar{prefix}/lib/python1.5/site-packages/distutils},
Greg Ward7ef2ba72000-10-22 01:40:08 +0000817 so the system configuration file should be put there under Python
818 1.5.2.
Fred Drakeeff9a872000-10-26 16:41:03 +0000819\item[(2)] On \UNIX, if the \envvar{HOME} environment variable is not
Greg Ward7ef2ba72000-10-22 01:40:08 +0000820 defined, the user's home directory will be determined with the
Fred Drake8612a432002-10-31 20:46:20 +0000821 \function{getpwuid()} function from the standard
822 \ulink{\module{pwd}}{../lib/module-pwd.html} module.
Greg Ward7ef2ba72000-10-22 01:40:08 +0000823\item[(3)] I.e., in the current directory (usually the location of the
824 setup script).
825\item[(4)] (See also note (1).) Under Python 1.6 and later, Python's
826 default ``installation prefix'' is \file{C:\textbackslash{}Python}, so
827 the system configuration file is normally
Andrew M. Kuchling22d35a72001-12-06 16:34:53 +0000828 \file{C:\textbackslash{}Python\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}distutils.cfg}.
Greg Ward7ef2ba72000-10-22 01:40:08 +0000829 Under Python 1.5.2, the default prefix was
830 \file{C:\textbackslash{}Program~Files\textbackslash{}Python}, and the
831 Distutils were not part of the standard library---so the system
832 configuration file would be
Andrew M. Kuchling22d35a72001-12-06 16:34:53 +0000833 \file{C:\textbackslash{}Program~Files\textbackslash{}Python\textbackslash{}distutils\textbackslash{}distutils.cfg}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000834 in a standard Python 1.5.2 installation under Windows.
835\item[(5)] On Windows, if the \envvar{HOME} environment variable is not
836 defined, no personal configuration file will be found or used. (In
837 other words, the Distutils make no attempt to guess your home
838 directory on Windows.)
839\item[(6)] (See also notes (1) and (4).) The default installation
840 prefix is just \file{Python:}, so under Python 1.6 and later this is
Andrew M. Kuchling0cc8c372002-05-24 17:06:17 +0000841 normally\file{Python:Lib:distutils:distutils.cfg}.
Greg Ward7ef2ba72000-10-22 01:40:08 +0000842\end{description}
843
844
845\subsection{Syntax of config files}
Fred Drake0bbaa512001-01-24 16:39:35 +0000846\label{config-syntax}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000847
848The Distutils configuration files all have the same syntax. The config
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000849files are grouped into sections. There is one section for each Distutils
Greg Ward7ef2ba72000-10-22 01:40:08 +0000850command, plus a \code{global} section for global options that affect
851every command. Each section consists of one option per line, specified
Andrew M. Kuchling3b98dc12002-05-07 21:02:35 +0000852as \code{option=value}.
Greg Ward7ef2ba72000-10-22 01:40:08 +0000853
854For example, the following is a complete config file that just forces
855all commands to run quietly by default:
Fred Drakea9a83e92001-03-01 18:37:52 +0000856
Greg Ward7ef2ba72000-10-22 01:40:08 +0000857\begin{verbatim}
858[global]
859verbose=0
860\end{verbatim}
861
862If this is installed as the system config file, it will affect all
863processing of any Python module distribution by any user on the current
864system. If it is installed as your personal config file (on systems
865that support them), it will affect only module distributions processed
866by you. And if it is used as the \file{setup.cfg} for a particular
867module distribution, it affects only that distribution.
868
869You could override the default ``build base'' directory and make the
870\command{build*} commands always forcibly rebuild all files with the
871following:
Fred Drakea9a83e92001-03-01 18:37:52 +0000872
Greg Ward7ef2ba72000-10-22 01:40:08 +0000873\begin{verbatim}
874[build]
875build-base=blib
876force=1
877\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000878
Greg Ward7ef2ba72000-10-22 01:40:08 +0000879which corresponds to the command-line arguments
Fred Drakea9a83e92001-03-01 18:37:52 +0000880
Greg Ward7ef2ba72000-10-22 01:40:08 +0000881\begin{verbatim}
882python setup.py build --build-base=blib --force
883\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000884
Greg Ward7ef2ba72000-10-22 01:40:08 +0000885except that including the \command{build} command on the command-line
886means that command will be run. Including a particular command in
887config files has no such implication; it only means that if the command
888is run, the options in the config file will apply. (Or if other
889commands that derive values from it are run, they will use the values in
890the config file.)
891
892You can find out the complete list of options for any command using the
893\longprogramopt{help} option, e.g.:
Fred Drakea9a83e92001-03-01 18:37:52 +0000894
Greg Ward7ef2ba72000-10-22 01:40:08 +0000895\begin{verbatim}
896python setup.py build --help
897\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000898
Greg Ward7ef2ba72000-10-22 01:40:08 +0000899and you can find out the complete list of global options by using
900\longprogramopt{help} without a command:
Fred Drakea9a83e92001-03-01 18:37:52 +0000901
Greg Ward7ef2ba72000-10-22 01:40:08 +0000902\begin{verbatim}
903python setup.py --help
904\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000905
Greg Ward7ef2ba72000-10-22 01:40:08 +0000906See also the ``Reference'' section of the ``Distributing Python
907Modules'' manual.
908
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000909\section{Building Extensions: Tips and Tricks}
910\label{building-ext}
911
912Whenever possible, the Distutils try to use the configuration
913information made available by the Python interpreter used to run the
914\file{setup.py} script. For example, the same compiler and linker
915flags used to compile Python will also be used for compiling
916extensions. Usually this will work well, but in complicated
917situations this might be inappropriate. This section discusses how to
918override the usual Distutils behaviour.
919
920\subsection{Tweaking compiler/linker flags}
921\label{tweak-flags}
922
923Compiling a Python extension written in C or \Cpp will sometimes
924require specifying custom flags for the compiler and linker in order
925to use a particular library or produce a special kind of object code.
926This is especially true if the extension hasn't been tested on your
927platform, or if you're trying to cross-compile Python.
928
929In the most general case, the extension author might have foreseen
930that compiling the extensions would be complicated, and provided a
931\file{Setup} file for you to edit. This will likely only be done if
932the module distribution contains many separate extension modules, or
933if they often require elaborate sets of compiler flags in order to work.
934
935A \file{Setup} file, if present, is parsed in order to get a list of
936extensions to build. Each line in a \file{Setup} describes a single
937module. Lines have the following structure:
938
Fred Drake8612a432002-10-31 20:46:20 +0000939\begin{alltt}
940\var{module} ... [\var{sourcefile} ...] [\var{cpparg} ...] [\var{library} ...]
941\end{alltt}
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000942
943Let's examine each of the fields in turn.
944
945\begin{itemize}
946
947\item \var{module} is the name of the extension module to be built,
Fred Drake8612a432002-10-31 20:46:20 +0000948 and should be a valid Python identifier. You can't just change
949 this in order to rename a module (edits to the source code would
950 also be needed), so this should be left alone.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000951
952\item \var{sourcefile} is anything that's likely to be a source code
Fred Drake8612a432002-10-31 20:46:20 +0000953 file, at least judging by the filename. Filenames ending in
954 \file{.c} are assumed to be written in C, filenames ending in
955 \file{.C}, \file{.cc}, and \file{.c++} are assumed to be
956 \Cpp, and filenames ending in \file{.m} or \file{.mm} are
957 assumed to be in Objective C.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000958
959\item \var{cpparg} is an argument for the C preprocessor,
Fred Drake8612a432002-10-31 20:46:20 +0000960 and is anything starting with \programopt{-I}, \programopt{-D},
961 \programopt{-U} or \programopt{-C}.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000962
Fred Drake8612a432002-10-31 20:46:20 +0000963\item \var{library} is anything ending in \file{.a} or beginning with
964 \programopt{-l} or \programopt{-L}.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000965\end{itemize}
966
967If a particular platform requires a special library on your platform,
968you can add it by editing the \file{Setup} file and running
969\code{python setup.py build}. For example, if the module defined by the line
970
971\begin{verbatim}
972foo foomodule.c
973\end{verbatim}
974
975must be linked with the math library \file{libm.a} on your platform,
Fred Drake8612a432002-10-31 20:46:20 +0000976simply add \programopt{-lm} to the line:
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000977
978\begin{verbatim}
979foo foomodule.c -lm
980\end{verbatim}
981
982Arbitrary switches intended for the compiler or the linker can be
Fred Drake8612a432002-10-31 20:46:20 +0000983supplied with the \programopt{-Xcompiler} \var{arg} and
984\programopt{-Xlinker} \var{arg} options:
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000985
986\begin{verbatim}
987foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm
988\end{verbatim}
989
Fred Drake8612a432002-10-31 20:46:20 +0000990The next option after \programopt{-Xcompiler} and
991\programopt{-Xlinker} will be appended to the proper command line, so
992in the above example the compiler will be passed the \programopt{-o32}
993option, and the linker will be passed \programopt{-shared}. If a
994compiler option requires an argument, you'll have to supply multiple
995\programopt{-Xcompiler} options; for example, to pass \code{-x c++} the
996\file{Setup} file would have to contain
997\code{-Xcompiler -x -Xcompiler c++}.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +0000998
999Compiler flags can also be supplied through setting the
1000\envvar{CFLAGS} environment variable. If set, the contents of
1001\envvar{CFLAGS} will be added to the compiler flags specified in the
1002\file{Setup} file.
1003
1004
1005\subsection{Using non-Microsoft compilers on Windows \label{non-ms-compilers}}
1006\sectionauthor{Rene Liebscher}{R.Liebscher@gmx.de}
1007
Fred Drake2884d6d2003-07-02 12:27:43 +00001008\subsubsection{Borland \Cpp}
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001009
1010This subsection describes the necessary steps to use Distutils with the
1011Borland \Cpp{} compiler version 5.5.
1012%Should we mention that users have to create cfg-files for the compiler?
1013%see also http://community.borland.com/article/0,1410,21205,00.html
1014
1015First you have to know that Borland's object file format (OMF) is
1016different from the format used by the Python version you can download
1017from the Python or ActiveState Web site. (Python is built with
1018Microsoft Visual \Cpp, which uses COFF as the object file format.)
1019For this reason you have to convert Python's library
1020\file{python20.lib} into the Borland format. You can do this as
1021follows:
1022
1023\begin{verbatim}
1024coff2omf python20.lib python20_bcpp.lib
1025\end{verbatim}
1026
1027The \file{coff2omf} program comes with the Borland compiler. The file
1028\file{python20.lib} is in the \file{Libs} directory of your Python
1029installation. If your extension uses other libraries (zlib,...) you
1030have to convert them too.
1031
1032The converted files have to reside in the same directories as the
1033normal libraries.
1034
1035How does Distutils manage to use these libraries with their changed
1036names? If the extension needs a library (eg. \file{foo}) Distutils
1037checks first if it finds a library with suffix \file{_bcpp}
1038(eg. \file{foo_bcpp.lib}) and then uses this library. In the case it
1039doesn't find such a special library it uses the default name
1040(\file{foo.lib}.)\footnote{This also means you could replace all
1041existing COFF-libraries with OMF-libraries of the same name.}
1042
1043To let Distutils compile your extension with Borland \Cpp{} you now have
1044to type:
1045
1046\begin{verbatim}
1047python setup.py build --compiler=bcpp
1048\end{verbatim}
1049
1050If you want to use the Borland \Cpp{} compiler as the default, you
1051could specify this in your personal or system-wide configuration file
1052for Distutils (see section~\ref{config-files}.)
1053
1054\begin{seealso}
1055 \seetitle[http://www.borland.com/bcppbuilder/freecompiler/]
1056 {\Cpp{}Builder Compiler}
1057 {Information about the free \Cpp{} compiler from Borland,
1058 including links to the download pages.}
1059
Fred Drakeddc369a2002-10-18 16:33:30 +00001060 \seetitle[http://www.cyberus.ca/\~{}g_will/pyExtenDL.shtml]
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001061 {Creating Python Extensions Using Borland's Free Compiler}
Fred Drake2884d6d2003-07-02 12:27:43 +00001062 {Document describing how to use Borland's free command-line \Cpp
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001063 compiler to build Python.}
1064\end{seealso}
1065
1066
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001067\subsubsection{GNU C / Cygwin / MinGW}
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001068
1069This section describes the necessary steps to use Distutils with the
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001070GNU C/\Cpp{} compilers in their Cygwin and MinGW
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001071distributions.\footnote{Check
1072\url{http://sources.redhat.com/cygwin/} and
1073\url{http://www.mingw.org/} for more information}
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001074For a Python interpreter that was built with Cygwin, everything should
1075work without any of these following steps.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001076
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001077These compilers require some special libraries.
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001078This task is more complex than for Borland's \Cpp, because there is no
1079program to convert the library.
1080% I don't understand what the next line means. --amk
1081% (inclusive the references on data structures.)
1082
1083First you have to create a list of symbols which the Python DLL exports.
1084(You can find a good program for this task at
1085\url{http://starship.python.net/crew/kernr/mingw32/Notes.html}, see at
1086PExports 0.42h there.)
1087
1088\begin{verbatim}
1089pexports python20.dll >python20.def
1090\end{verbatim}
1091
1092Then you can create from these information an import library for gcc.
1093
1094\begin{verbatim}
1095dlltool --dllname python20.dll --def python20.def --output-lib libpython20.a
1096\end{verbatim}
1097
1098The resulting library has to be placed in the same directory as
1099\file{python20.lib}. (Should be the \file{libs} directory under your
1100Python installation directory.)
1101
1102If your extension uses other libraries (zlib,...) you might
1103have to convert them too.
1104The converted files have to reside in the same directories as the normal
1105libraries do.
1106
1107To let Distutils compile your extension with Cygwin you now have to type
1108
1109\begin{verbatim}
1110python setup.py build --compiler=cygwin
1111\end{verbatim}
1112
1113and for Cygwin in no-cygwin mode\footnote{Then you have no
1114\POSIX{} emulation available, but you also don't need
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001115\file{cygwin1.dll}.} or for MinGW type:
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001116
1117\begin{verbatim}
1118python setup.py build --compiler=mingw32
1119\end{verbatim}
1120
1121If you want to use any of these options/compilers as default, you should
1122consider to write it in your personal or system-wide configuration file
1123for Distutils (see section~\ref{config-files}.)
1124
1125\begin{seealso}
1126 \seetitle[http://www.zope.org/Members/als/tips/win32_mingw_modules]
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001127 {Building Python modules on MS Windows platform with MinGW}
1128 {Information about building the required libraries for the MinGW
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001129 environment.}
1130
1131 \seeurl{http://pyopengl.sourceforge.net/ftp/win32-stuff/}
Andrew M. Kuchling572aae32002-11-06 14:34:50 +00001132 {Converted import libraries in Cygwin/MinGW and Borland format,
Andrew M. Kuchling1624bc02002-05-07 21:03:45 +00001133 and a script to create the registry entries needed for Distutils
1134 to locate the built Python.}
1135\end{seealso}
1136
1137
1138
Greg Ward7c1e5f62000-03-10 01:56:58 +00001139\end{document}