blob: e6baac21e11dcfb49b05723910d3f9bac629639e [file] [log] [blame]
Greg Ward7c1e5f62000-03-10 01:56:58 +00001\documentclass{howto}
2\usepackage{ltxmarkup}
3\usepackage{times}
Greg Ward7593eb32000-04-09 03:59:15 +00004\usepackage{distutils}
Greg Ward7c1e5f62000-03-10 01:56:58 +00005
6\title{Installing Python Modules}
7
8% The audience for this document includes people who don't know anything
9% about Python and aren't about to learn the language just in order to
10% install and maintain it for their users, i.e. system administrators.
11% Thus, I have to be sure to explain the basics at some point:
12% sys.path and PYTHONPATH at least. Should probably give pointers to
13% other docs on "import site", PYTHONSTARTUP, PYTHONHOME, etc.
14%
15% Also, I need to take into account that most modules out there don't
16% (yet) use Distutils: briefly explain the old Makefile.pre.in
17% convention (maybe move material from the E&E manual to here?), and
18% explain where to copy .py and .so files manually if the distribution
19% doesn't provide a mechanism for doing so.
20%
21% Finally, it might be useful to include all the material from my "Care
22% and Feeding of a Python Installation" talk in here somewhere. Yow!
23
Greg Ward7c1e5f62000-03-10 01:56:58 +000024\author{Greg Ward}
25\authoraddress{E-mail: \email{gward@python.net}}
26
Greg Ward7c1e5f62000-03-10 01:56:58 +000027
28\begin{document}
29
30\maketitle
31
32%\begin{abstract}
33%\noindent
34%Abstract this!
35%\end{abstract}
36
37\tableofcontents
38
39\section{Introduction}
Greg Warde78298a2000-04-28 17:12:24 +000040\label{intro}
Greg Ward7c1e5f62000-03-10 01:56:58 +000041
Greg Ward6002ffc2000-04-09 20:54:50 +000042Although Python's extensive standard library covers many programming
43needs, there often comes a time when you need to add some new
44functionality to your Python installation in the form of third-party
45modules. This might be necessary to support your own programming, or to
46support an application that you want to use and that happens to be
47written in Python.
48
49In the past, there has been little support for adding third-party
50modules to an existing Python installation. With the introduction of
Fred Drake01df4532000-06-30 03:36:41 +000051the Python Distribution Utilities (Distutils for short) in Python 2.0,
Greg Ward6002ffc2000-04-09 20:54:50 +000052this is starting to change. Not everything will change overnight,
53though, so while this document concentrates on installing module
54distributions that use the Distutils, we will also spend some time
55dealing with the old ways.
56
57This document is aimed primarily at the people who need to install
58third-party Python modules: end-users and system administrators who just
59need to get some Python application running, and existing Python
60programmers who want to add some new goodies to their toolbox. You
61don't need to know Python to read this document; there will be some
62brief forays into using Python's interactive mode to explore your
63installation, but that's it. If you're looking for information on how
64to distribute your own Python modules so that others may use them, see
Fred Drake01df4532000-06-30 03:36:41 +000065the \citetitle[../dist/dist.html]{Distributing Python Modules} manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +000066
67
Greg Ward6002ffc2000-04-09 20:54:50 +000068\subsection{Best case: trivial installation}
Greg Warde78298a2000-04-28 17:12:24 +000069\label{trivial-inst}
Greg Ward6002ffc2000-04-09 20:54:50 +000070
71In the best case, someone will have prepared a special version of the
72module distribution you want to install that is targeted specifically at
73your platform and is installed just like any other software on your
74platform. For example, the module developer might make an executable
75installer available for Windows users, an RPM package for users of
76RPM-based Linux systems (Red Hat, SuSE, Mandrake, and many others), a
77Debian package for users of Debian-based Linux systems (Debian proper,
78Caldera, Corel, etc.), and so forth.
79
80In that case, you would download the installer appropriate to your
Greg Wardc392caa2000-04-11 02:00:26 +000081platform and do the obvious thing with it: run it if it's an executable
82installer, \code{rpm --install} it if it's an RPM, etc. You don't need
83to run Python or a setup script, you don't need to compile
84anything---you might not even need to read any instructions (although
85it's always a good idea to do so anyways).
Greg Ward6002ffc2000-04-09 20:54:50 +000086
87Of course, things will not always be that easy. You might be interested
Greg Wardc392caa2000-04-11 02:00:26 +000088in a module distribution that doesn't have an easy-to-use installer for
89your platform. In that case, you'll have to start with the source
90distribution released by the module's author/maintainer. Installing
91from a source distribution is not too hard, as long as the modules are
92packaged in the standard way. The bulk of this document is about
93building and installing modules from standard source distributions.
Greg Ward7c1e5f62000-03-10 01:56:58 +000094
95
Greg Ward6002ffc2000-04-09 20:54:50 +000096\subsection{The new standard: Distutils}
Greg Warde78298a2000-04-28 17:12:24 +000097\label{new-standard}
Greg Ward6002ffc2000-04-09 20:54:50 +000098
99If you download a module source distribution, you can tell pretty
Greg Ward19c67f82000-06-24 01:33:16 +0000100quickly if it was packaged and distributed in the standard way, i.e.
101using the Distutils. First, the distribution's name and version number
102will be featured prominently in the name of the downloaded archive, e.g.
Greg Ward6002ffc2000-04-09 20:54:50 +0000103\file{foo-1.0.tar.gz} or \file{widget-0.9.7.zip}. Next, the archive
104will unpack into a similarly-named directory: \file{foo-1.0} or
105\file{widget-0.9.7}. Additionally, the distribution will contain a
106setup script \file{setup.py}, and a \file{README.txt} (or possibly
107\file{README}), which should explain that building and installing the
108module distribution is a simple matter of running
109\begin{verbatim}
110python setup.py install
111\end{verbatim}
112
113If all these things are true, then you already know how to build and
114install the modules you've just downloaded: run the command above.
115Unless you need to install things in a non-standard way or customize the
116build process, you don't really need this manual. Or rather, the above
117command is everything you need to get out of this manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000118
119
Greg Ward6002ffc2000-04-09 20:54:50 +0000120\subsection{The old way: no standards}
Greg Warde78298a2000-04-28 17:12:24 +0000121\label{old-way}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000122
Greg Ward6002ffc2000-04-09 20:54:50 +0000123Before the Distutils, there was no infrastructure to support installing
124third-party modules in a consistent, standardized way. Thus, it's not
125really possible to write a general manual for installing Python modules
126that don't use the Distutils; the only truly general statement that can
Greg Wardc392caa2000-04-11 02:00:26 +0000127be made is, ``Read the module's own installation instructions.''
Greg Ward6002ffc2000-04-09 20:54:50 +0000128
Greg Ward19c67f82000-06-24 01:33:16 +0000129However, if such instructions exist at all, they are often woefully
Greg Wardc392caa2000-04-11 02:00:26 +0000130inadequate and targeted at experienced Python developers. Such users
131are already familiar with how the Python library is laid out on their
132platform, and know where to copy various files in order for Python to
133find them. This document makes no such assumptions, and explains how
134the Python library is laid out on three major platforms (Unix, Windows,
135and Mac~OS), so that you can understand what happens when the Distutils
136do their job \emph{and} know how to install modules manually when the
137module author fails to provide a setup script.
Greg Ward6002ffc2000-04-09 20:54:50 +0000138
139Additionally, while there has not previously been a standard
140installation mechanism, Python has had some standard machinery for
141building extensions on Unix since Python \XXX{version?}. This machinery
142(the \file{Makefile.pre.in} file) is superseded by the Distutils, but it
143will no doubt live on in older module distributions for a while. This
144\file{Makefile.pre.in} mechanism is documented in the ``Extending \&
145Embedding Python'' manual, but that manual is aimed at module
146developers---hence, we include documentation for builders/installers
147here.
148
149All of the pre-Distutils material is tucked away in
Greg Warde78298a2000-04-28 17:12:24 +0000150section~\ref{pre-distutils}.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000151
152
Greg Ward29576562000-03-18 15:11:50 +0000153\section{Standard Build and Install}
Greg Warde78298a2000-04-28 17:12:24 +0000154\label{normal-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000155
Greg Warde78298a2000-04-28 17:12:24 +0000156As described in section~\ref{new-standard}, building and installing
Greg Ward6002ffc2000-04-09 20:54:50 +0000157a module distribution using the Distutils is usually one simple command:
158\begin{verbatim}
159python setup.py install
160\end{verbatim}
161On Unix, you'd run this command from a shell prompt; on Windows, you
Greg Wardc392caa2000-04-11 02:00:26 +0000162have to open a command prompt window and do it there; on Mac~OS ...
163\XXX{what the heck do you do on Mac~OS?}.
Greg Ward6002ffc2000-04-09 20:54:50 +0000164
165
166\subsection{Platform variations}
167
168You should always run the setup command from the distribution root
169directory, i.e. the top-level subdirectory that the module source
170distribution unpacks into. For example, if you've just downloaded a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000171module source distribution \file{foo-1.0.tar.gz} onto a Unix system, the
Greg Ward6002ffc2000-04-09 20:54:50 +0000172normal thing to do is:
173\begin{verbatim}
174gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
175cd foo-1.0
176python setup.py install
177\end{verbatim}
178
Greg Wardc392caa2000-04-11 02:00:26 +0000179On Windows, you'd probably unpack the archive before opening the command
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000180prompt. If you downloaded the archive file to
181\file{C:\textbackslash{}Temp}, then it probably unpacked (depending on
182your software) into
183\file{C:\textbackslash{}Temp\textbackslash{}foo-1.0}; from the command
184prompt window, you would then run
Greg Ward6002ffc2000-04-09 20:54:50 +0000185\begin{verbatim}
186cd c:\temp\foo-1.0
187python setup.py install
188\end{verbatim}
189
Greg Wardc392caa2000-04-11 02:00:26 +0000190On Mac~OS, ... \XXX{again, how do you run Python scripts on Mac~OS?}
191
192\XXX{arg, my lovely ``bslash'' macro doesn't work in non-tt fonts! help
193 me \LaTeX, you're my only hope...}
Greg Ward6002ffc2000-04-09 20:54:50 +0000194
195
196\subsection{Splitting the job up}
197
198Running \code{setup.py install} builds and installs all modules in one
199fell swoop. If you prefer to work incrementally---especially useful if
200you want to customize the build process, or if things are going
Greg Ward3e7b1332000-05-30 03:00:43 +0000201wrong---you can use the setup script to do one thing at a time. This is
202particularly helpful when the build and install will be done by
203different users---e.g., you might want to build a module distribution
204and hand it off to a system administrator for installation (or do it
205yourself, with super-user privileges).
Greg Ward6002ffc2000-04-09 20:54:50 +0000206
207For example, you can build everything in one step, and then install
208everything in a second step, by invoking the setup script twice:
209\begin{verbatim}
210python setup.py build
211python setup.py install
212\end{verbatim}
213(If you do this, you will notice that running the \command{install}
Greg Wardc392caa2000-04-11 02:00:26 +0000214command first runs the \command{build} command, which quickly notices
215that it has nothing to do, since everything in the \file{build}
216directory is up-to-date.)
Greg Ward29576562000-03-18 15:11:50 +0000217
Greg Wardc392caa2000-04-11 02:00:26 +0000218\XXX{concrete reason for splitting things up?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000219
220
Greg Wardc392caa2000-04-11 02:00:26 +0000221\subsection{How building works}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000222
Greg Wardc392caa2000-04-11 02:00:26 +0000223As implied above, the \command{build} command is responsible for putting
224the files to install into a \emph{build directory}. By default, this is
225\file{build} under the distribution root; if you're excessively
226concerned with speed, or want to keep the source tree pristine, you can
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000227change the build directory with the \longprogramopt{build-base} option.
228For example:
Greg Wardc392caa2000-04-11 02:00:26 +0000229\begin{verbatim}
230python setup.py build --build-base=/tmp/pybuild/foo-1.0
231\end{verbatim}
232(Or you could do this permanently with a directive in your system or
233personal Distutils configuration file; see
Greg Warde78298a2000-04-28 17:12:24 +0000234section~\ref{config-files}.) Normally, this isn't necessary.
Greg Wardc392caa2000-04-11 02:00:26 +0000235
236The default layout for the build tree is as follows:
237\begin{verbatim}
238--- build/ --- lib/
239or
240--- build/ --- lib.<plat>/
241 temp.<plat>/
242\end{verbatim}
243where \code{<plat>} expands to a brief description of the current
244OS/hardware platform. The first form, with just a \file{lib} directory,
245is used for ``pure module distributions''---that is, module
246distributions that include only pure Python modules. If a module
247distribution contains any extensions (modules written in C/C++, or Java
248for JPython), then the second form, with two \code{<plat>} directories,
249is used. In that case, the \file{temp.\filevar{plat}} directory holds
250temporary files generated by the compile/link process that don't
251actually get installed. In either case, the \file{lib} (or
252\file{lib.\filevar{plat}}) directory contains all Python modules (pure
253Python and extensions) that will be installed.
254
255In the future, more directories will be added to handle Python scripts,
256documentation, binary executables, and whatever else is needed to handle
Greg Wardd5faa7e2000-04-12 01:42:19 +0000257the job of installing Python modules and applications.
Greg Wardc392caa2000-04-11 02:00:26 +0000258
259
260\subsection{How installation works}
261
262After the \command{build} command runs (whether you run it explicitly,
263or the \command{install} command does it for you), the work of the
264\command{install} command is relatively simple: all it has to do is copy
265everything under \file{build/lib} (or \file{build/lib.\filevar{plat}})
266to your chosen installation directory.
267
268If you don't choose an installation directory---i.e., if you just run
269\code{setup.py install}---then the \command{install} command installs to
270the standard location for third-party Python modules. This location
271varies by platform and by how you built/installed Python itself. On
272Unix and Mac OS, it also depends on whether the module distribution
273being installed is pure Python or contains extensions (``non-pure''):
Greg Wardd5faa7e2000-04-12 01:42:19 +0000274\begin{tableiv}{l|l|l|c}{textrm}%
275 {Platform}{Standard installation location}{Default value}{Notes}
276 \lineiv{Unix (pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000277 {\filenq{\filevar{prefix}/lib/python2.0/site-packages}}
278 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000279 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000280 \lineiv{Unix (non-pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000281 {\filenq{\filevar{exec-prefix}/lib/python2.0/site-packages}}
282 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000283 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000284 \lineiv{Windows}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000285 {\filenq{\filevar{prefix}}}
Greg Ward4756e5f2000-04-19 22:40:12 +0000286 {\filenq{C:\textbackslash{}Python}}
Greg Ward502d2b42000-04-12 14:20:15 +0000287 {(2)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000288 \lineiv{Mac~OS (pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000289 {\filenq{\filevar{prefix}:Lib}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000290 {\filenq{Python:Lib} \XXX{???}}
291 {}
292 \lineiv{Mac~OS (non-pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000293 {\filevar{prefix}:Mac:PlugIns}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000294 {\filenq{Python:Mac:PlugIns}\XXX{???}}
295 {}
296\end{tableiv}
297
298\noindent Notes:
299\begin{description}
Greg Ward502d2b42000-04-12 14:20:15 +0000300\item[(1)] Most Linux distributions include Python as a standard part of
301 the system, so \filevar{prefix} and \filevar{exec-prefix} are usually
302 both \file{/usr} on Linux. If you build Python yourself on Linux (or
303 any Unix-like system), the default \filevar{prefix} and
304 \filevar{exec-prefix} are \file{/usr/local}.
305\item[(2)] The default installation directory on Windows was
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000306 \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
307 Python 1.6a1, 1.5.2, and earlier.
Greg Wardd5faa7e2000-04-12 01:42:19 +0000308\end{description}
309
Greg Wardc392caa2000-04-11 02:00:26 +0000310\filevar{prefix} and \filevar{exec-prefix} stand for the directories
311that Python is installed to, and where it finds its libraries at
312run-time. They are always the same under Windows and Mac~OS, and very
313often the same under Unix. You can find out what your Python
314installation uses for \filevar{prefix} and \filevar{exec-prefix} by
315running Python in interactive mode and typing a few simple commands.
316Under Unix, just type \code{python} at the shell prompt; under Windows,
Fred Drake01df4532000-06-30 03:36:41 +0000317run ``Python 2.0 (interpreter)'' \XXX{right?}; under Mac~OS, \XXX{???}.
318Once the interpreter is started, you type Python code at the
319\samp{>>> } prompt. For example, on my Linux system, I type the three
320Python statements shown below, and get the output as shown, to find
321out my \filevar{prefix} and \filevar{exec-prefix}:
322
Greg Wardc392caa2000-04-11 02:00:26 +0000323\begin{verbatim}
324Python 1.5.2 (#1, Apr 18 1999, 16:03:16) [GCC pgcc-2.91.60 19981201 (egcs-1.1.1 on linux2
325Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
326>>> import sys
327>>> sys.prefix
328'/usr'
329>>> sys.exec_prefix
330'/usr'
331\end{verbatim}
332
333If you don't want to install to the standard location, or if you don't
334have permission to write there, then you need to read about alternate
335installations in the next section.
336
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]
345 {\begin{tableiii}{lll}{textrm}
346 {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 Ward29576562000-03-18 15:11:50 +0000363\section{Alternate Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000364\label{alt-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000365
Greg Ward29576562000-03-18 15:11:50 +0000366Often, it is necessary or desirable to install modules to a location
367other than the standard location for third-party Python modules. For
368example, on a Unix system you might not have permission to write to the
369standard third-party module directory. Or you might wish to try out a
370module before making it a standard part of your local Python
371installation; this is especially true when upgrading a distribution
372already present: you want to make sure your existing base of scripts
373still works with the new version before actually upgrading.
374
375The Distutils \command{install} command is designed to make installing
376module distributions to an alternate location simple and painless. The
377basic idea is that you supply a base directory for the installation, and
378the \command{install} command picks a set of directories (called an
379\emph{installation scheme}) under this base directory in which to
380install files. The details differ across platforms, so read whichever
381of the following section applies to you.
382
383
384\subsection{Alternate installation: Unix (the home scheme)}
Greg Warde78298a2000-04-28 17:12:24 +0000385\label{alt-unix-prefix}
Greg Ward29576562000-03-18 15:11:50 +0000386
387Under Unix, there are two ways to perform an alternate installation.
388The ``prefix scheme'' is similar to how alternate installation works
Greg Wardc392caa2000-04-11 02:00:26 +0000389under Windows and Mac~OS, but is not necessarily the most useful way to
Greg Ward29576562000-03-18 15:11:50 +0000390maintain a personal Python library. Hence, we document the more
391convenient and commonly useful ``home scheme'' first.
392
Greg Wardc392caa2000-04-11 02:00:26 +0000393The idea behind the ``home scheme'' is that you build and maintain a
394personal stash of Python modules, probably under your home directory.
395Installing a new module distribution is as simple as
Greg Ward29576562000-03-18 15:11:50 +0000396\begin{verbatim}
397python setup.py install --home=<dir>
398\end{verbatim}
Greg Warda021aca2000-04-19 22:34:11 +0000399where you can supply any directory you like for the \longprogramopt{home}
Greg Ward4756e5f2000-04-19 22:40:12 +0000400option. Lazy typists can just type a tilde (\code{\textasciitilde}); the
Greg Wardc392caa2000-04-11 02:00:26 +0000401\command{install} command will expand this to your home directory:
402\begin{verbatim}
403python setup.py install --home=~
404\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000405
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000406The \longprogramopt{home} option defines the installation base
407directory. Files are installed to the following directories under the
408installation base as follows:
Greg Ward29576562000-03-18 15:11:50 +0000409\installscheme{home}{/lib/python}
410 {home}{/lib/python}
411 {home}{/bin}
412 {home}{/share}
413
414\subsection{Alternate installation: Unix (the prefix scheme)}
Greg Warde78298a2000-04-28 17:12:24 +0000415\label{alt-unix-home}
Greg Ward29576562000-03-18 15:11:50 +0000416
417The ``prefix scheme'' is useful when you wish to use one Python
418installation to perform the build/install (i.e., to run the setup
419script), but install modules into the third-party module directory of a
420different Python installation (or something that looks like a different
421Python installation). If this sounds a trifle unusual, it is---that's
422why the ``home scheme'' comes first. However, there are at least two
423known cases where the prefix scheme will be useful.
424
Greg Ward19c67f82000-06-24 01:33:16 +0000425First, consider that many Linux distributions put Python in \file{/usr},
Greg Ward29576562000-03-18 15:11:50 +0000426rather than the more traditional \file{/usr/local}. This is entirely
427appropriate, since in those cases Python is part of ``the system''
428rather than a local add-on. However, if you are installing Python
429modules from source, you probably want them to go in
430\file{/usr/local/lib/python1.\filevar{X}} rather than
431\file{/usr/lib/python1.\filevar{X}}. This can be done with
432\begin{verbatim}
433/usr/bin/python setup.py install --prefix=/usr/local
434\end{verbatim}
435
436Another possibility is a network filesystem where the name used to write
437to a remote directory is different from the name used to read it: for
438example, the Python interpreter accessed as \file{/usr/local/bin/python}
439might search for modules in \file{/usr/local/lib/python1.\filevar{X}},
440but those modules would have to be installed to, say,
441\file{/mnt/\filevar{@server}/export/lib/python1.\filevar{X}}. This
442could be done with
443\begin{verbatim}
444/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
445\end{verbatim}
446
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000447In either case, the \longprogramopt{prefix} option defines the
448installation base, and the \longprogramopt{exec-prefix} option defines
449the platform-specific installation base, which is used for
450platform-specific files. (Currently, this just means non-pure module
451distributions, but could be expanded to C libraries, binary executables,
452etc.) If \longprogramopt{exec-prefix} is not supplied, it defaults to
453\longprogramopt{prefix}. Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000454
455\installscheme{prefix}{/lib/python1.\filevar{X}/site-packages}
456 {exec-prefix}{/lib/python1.\filevar{X}/site-packages}
457 {prefix}{/bin}
458 {prefix}{/share}
459
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000460There is no requirement that \longprogramopt{prefix} or
461\longprogramopt{exec-prefix} actually point to an alternate Python
462installation; if the directories listed above do not already exist, they
463are created at installation time.
Greg Ward29576562000-03-18 15:11:50 +0000464
465Incidentally, the real reason the prefix scheme is important is simply
466that a standard Unix installation uses the prefix scheme, but with
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000467\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
468Python itself (as \code{sys.prefix} and \code{sys.exec\_prefix}). Thus,
469you might think you'll never use the prefix scheme, but every time you
470run \code{python setup.py install} without any other options, you're
471using it.
Greg Ward29576562000-03-18 15:11:50 +0000472
473Note that installing extensions to an alternate Python installation has
474no effect on how those extensions are built: in particular, the Python
475header files (\file{Python.h} and friends) installed with the Python
476interpreter used to run the setup script will be used in compiling
477extensions. It is your responsibility to ensure that the interpreter
478used to run extensions installed in this way is compatibile with the
Greg Wardc392caa2000-04-11 02:00:26 +0000479interpreter used to build them. The best way to do this is to ensure
480that the two interpreters are the same version of Python (possibly
481different builds, or possibly copies of the same build). (Of course, if
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000482your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
483point to an alternate Python installation, this is immaterial.)
Greg Ward29576562000-03-18 15:11:50 +0000484
485
486\subsection{Alternate installation: Windows}
Greg Warde78298a2000-04-28 17:12:24 +0000487\label{alt-windows}
Greg Ward29576562000-03-18 15:11:50 +0000488
489Since Windows has no conception of a user's home directory, and since
490the standard Python installation under Windows is simpler than that
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000491under Unix, there's no point in having separate \longprogramopt{prefix}
492and \longprogramopt{home} options. Just use the \longprogramopt{prefix}
493option to specify a base directory, e.g.
Greg Ward29576562000-03-18 15:11:50 +0000494\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000495python setup.py install --prefix="\Temp\Python"
Greg Ward29576562000-03-18 15:11:50 +0000496\end{verbatim}
Greg Ward4756e5f2000-04-19 22:40:12 +0000497to install modules to the \file{\textbackslash{}Temp} directory on the current
Greg Ward29576562000-03-18 15:11:50 +0000498drive.
499
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000500The installation base is defined by the \longprogramopt{prefix} option;
501the \longprogramopt{exec-prefix} option is not supported under Windows.
502Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000503\installscheme{prefix}{}
504 {prefix}{}
Greg Ward4756e5f2000-04-19 22:40:12 +0000505 {prefix}{\textbackslash{}Scripts}
506 {prefix}{\textbackslash{}Data}
Greg Ward29576562000-03-18 15:11:50 +0000507
508
Greg Wardc392caa2000-04-11 02:00:26 +0000509\subsection{Alternate installation: Mac~OS}
Greg Warde78298a2000-04-28 17:12:24 +0000510\label{alt-macos}
Greg Ward29576562000-03-18 15:11:50 +0000511
Greg Wardc392caa2000-04-11 02:00:26 +0000512Like Windows, Mac~OS has no notion of home directories (or even of
Greg Ward29576562000-03-18 15:11:50 +0000513users), and a fairly simple standard Python installation. Thus, only a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000514\longprogramopt{prefix} option is needed. It defines the installation
515base, and files are installed under it as follows:
Greg Ward29576562000-03-18 15:11:50 +0000516
Greg Ward6002ffc2000-04-09 20:54:50 +0000517\XXX{how do MacPython users run the interpreter with command-line args?}
Greg Ward29576562000-03-18 15:11:50 +0000518
519\installscheme{prefix}{:Lib}
520 {prefix}{:Mac:PlugIns}
Greg Ward8e14f052000-03-22 01:00:23 +0000521 {prefix}{:Scripts}
522 {prefix}{:Data}
Greg Ward29576562000-03-18 15:11:50 +0000523
Greg Ward6002ffc2000-04-09 20:54:50 +0000524\XXX{Corran Webster says: ``Modules are found in either \file{:Lib} or
Greg Ward29576562000-03-18 15:11:50 +0000525\file{:Mac:Lib}, while extensions usually go in
526\file{:Mac:PlugIns}''---does this mean that non-pure distributions should
527be divided between \file{:Mac:PlugIns} and \file{:Mac:Lib}? If so, that
528changes the granularity at which we care about modules: instead of
529``modules from pure distributions'' and ``modules from non-pure
530distributions'', it becomes ``modules from pure distributions'',
531``Python modules from non-pure distributions'', and ``extensions from
Greg Ward6002ffc2000-04-09 20:54:50 +0000532non-pure distributions''. Is this necessary?!?}
Greg Ward29576562000-03-18 15:11:50 +0000533
534
535\section{Custom Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000536\label{custom-install}
Greg Ward29576562000-03-18 15:11:50 +0000537
538Sometimes, the alternate installation schemes described in
Greg Warde78298a2000-04-28 17:12:24 +0000539section~\ref{alt-install} just don't do what you want. You might
Greg Ward29576562000-03-18 15:11:50 +0000540want to tweak just one or two directories while keeping everything under
541the same base directory, or you might want to completely redefine the
542installation scheme. In either case, you're creating a \emph{custom
543 installation scheme}.
544
545You probably noticed the column of ``override options'' in the tables
546describing the alternate installation schemes above. Those options are
547how you define a custom installation scheme. These override options can
548be relative, absolute, or explicitly defined in terms of one of the
549installation base directories. (There are two installation base
550directories, and they are normally the same---they only differ when you
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000551use the Unix ``prefix scheme'' and supply different
552\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
Greg Ward29576562000-03-18 15:11:50 +0000553
554For example, say you're installing a module distribution to your home
555directory under Unix---but you want scripts to go in
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000556\file{\textasciitilde/scripts} rather than \file{\textasciitilde/bin}.
557As you might expect, you can override this directory with the
558\longprogramopt{install-scripts} option; in this case, it makes most
559sense to supply a relative path, which will be interpreted relative to
560the installation base directory (your home directory, in this case):
Greg Ward29576562000-03-18 15:11:50 +0000561\begin{verbatim}
Greg Ward19c67f82000-06-24 01:33:16 +0000562python setup.py install --home=~ --install-scripts=scripts
Greg Ward29576562000-03-18 15:11:50 +0000563\end{verbatim}
564
565Another Unix example: suppose your Python installation was built and
566installed with a prefix of \file{/usr/local/python}, so under a standard
567installation scripts will wind up in \file{/usr/local/python/bin}. If
568you want them in \file{/usr/local/bin} instead, you would supply this
Greg Warda021aca2000-04-19 22:34:11 +0000569absolute directory for the \longprogramopt{install-scripts} option:
Greg Ward29576562000-03-18 15:11:50 +0000570\begin{verbatim}
571python setup.py install --install-scripts=/usr/local/bin
572\end{verbatim}
573(This performs an installation using the ``prefix scheme,'' where the
574prefix is whatever your Python interpreter was installed with---
575\file{/usr/local/python} in this case.)
576
577If you maintain Python on Windows, you might want third-party modules to
578live in a subdirectory of \filevar{prefix}, rather than right in
579\filevar{prefix} itself. This is almost as easy as customizing the
580script installation directory---you just have to remember that there are
581two types of modules to worry about, pure modules and non-pure modules
582(i.e., modules from a non-pure distribution). For example:
583\begin{verbatim}
584python setup.py install --install-purelib=Site --install-platlib=Site
585\end{verbatim}
586The specified installation directories are relative to \filevar{prefix}.
587Of course, you also have to ensure that these directories are in
588Python's module search path, e.g. by putting a \file{.pth} file in
Greg Ward6002ffc2000-04-09 20:54:50 +0000589\filevar{prefix} (\XXX{should have a section describing .pth files and
590 cross-ref it here}).
Greg Ward29576562000-03-18 15:11:50 +0000591
592If you want to define an entire installation scheme, you just have to
593supply all of the installation directory options. The recommended way
Greg Wardc392caa2000-04-11 02:00:26 +0000594to do this is to supply relative paths; for example, if you want to
595maintain all Python module-related files under \file{python} in your
596home directory, and you want a separate directory for each platform that
597you use your home directory from, you might define the following
Greg Ward29576562000-03-18 15:11:50 +0000598installation scheme:
599\begin{verbatim}
Greg Wardc392caa2000-04-11 02:00:26 +0000600python setup.py install --home=~ \
Greg Ward29576562000-03-18 15:11:50 +0000601 --install-purelib=python/lib \
602 --install-platlib=python/lib.$PLAT \
603 --install-scripts=python/scripts
604 --install-data=python/data
605\end{verbatim}
606or, equivalently,
607\begin{verbatim}
608python setup.py install --home=~/python \
609 --install-purelib=lib \
Greg Ward19c67f82000-06-24 01:33:16 +0000610 --install-platlib='lib.$PLAT' \
Greg Ward29576562000-03-18 15:11:50 +0000611 --install-scripts=scripts
612 --install-data=data
613\end{verbatim}
614\code{\$PLAT} is not (necessarily) an environment variable---it will be
615expanded by the Distutils as it parses your command line options (just
616as it does when parsing your configuration file(s)).
617
618Obviously, specifying the entire installation scheme every time you
619install a new module distribution would be very tedious. Thus, you can
620put these options into your Distutils config file (see
Greg Warde78298a2000-04-28 17:12:24 +0000621section~\ref{config-files}):
Greg Ward169f91b2000-03-10 01:57:51 +0000622\begin{verbatim}
623[install]
Greg Ward29576562000-03-18 15:11:50 +0000624install-base=$HOME
625install-purelib=python/lib
626install-platlib=python/lib.$PLAT
627install-scripts=python/scripts
628install-data=python/data
Greg Ward169f91b2000-03-10 01:57:51 +0000629\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000630or, equivalently,
Greg Ward169f91b2000-03-10 01:57:51 +0000631\begin{verbatim}
632[install]
Greg Ward29576562000-03-18 15:11:50 +0000633install-base=$HOME/python
634install-purelib=lib
635install-platlib=lib.$PLAT
636install-scripts=scripts
637install-data=data
Greg Ward169f91b2000-03-10 01:57:51 +0000638\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000639Note that these two are \emph{not} equivalent if you supply a different
640installation base directory when you run the setup script. For example,
Greg Ward7c1e5f62000-03-10 01:56:58 +0000641\begin{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000642python setup.py --install-base=/tmp
Greg Ward7c1e5f62000-03-10 01:56:58 +0000643\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000644would install pure modules to \filevar{/tmp/python/lib} in the first
645case, and to \filevar{/tmp/lib} in the second case. (For the second
646case, you probably want to supply an installation base of
647\file{/tmp/python}.)
Greg Ward169f91b2000-03-10 01:57:51 +0000648
Greg Ward29576562000-03-18 15:11:50 +0000649You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
650sample configuration file input. These are Distutils configuration
651variables, which bear a strong resemblance to environment variables. In
Greg Wardc392caa2000-04-11 02:00:26 +0000652fact, you can use environment variables in config files---on platforms
653that have such a notion---but the Distutils additionally define a few
654extra variables that may not be in your environment, such as
655\code{\$PLAT}. (And of course, you can only use the configuration
656variables supplied by the Distutils on systems that don't have
657environment variables, such as Mac~OS (\XXX{true?}).) See
Greg Warde78298a2000-04-28 17:12:24 +0000658section~\ref{config-files} for details.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000659
Greg Wardc392caa2000-04-11 02:00:26 +0000660\XXX{need some Windows and Mac~OS examples---when would custom
Greg Ward6002ffc2000-04-09 20:54:50 +0000661 installation schemes be needed on those platforms?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000662
Greg Ward7c1e5f62000-03-10 01:56:58 +0000663
Greg Ward6002ffc2000-04-09 20:54:50 +0000664\section{Distutils Configuration Files}
Greg Warde78298a2000-04-28 17:12:24 +0000665\label{config-files}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000666
Greg Wardc392caa2000-04-11 02:00:26 +0000667\XXX{not even implemented yet, much less documented!}
Greg Ward6002ffc2000-04-09 20:54:50 +0000668
669
670\section{Pre-Distutils Conventions}
Greg Warde78298a2000-04-28 17:12:24 +0000671\label{pre-distutils}
Greg Ward6002ffc2000-04-09 20:54:50 +0000672
673
Greg Wardc392caa2000-04-11 02:00:26 +0000674\subsection{The Makefile.pre.in file}
Greg Warde78298a2000-04-28 17:12:24 +0000675\label{makefile-pre-in}
Greg Ward6002ffc2000-04-09 20:54:50 +0000676
677
678\subsection{Installing modules manually}
Greg Warde78298a2000-04-28 17:12:24 +0000679\label{manual-install}
Greg Ward6002ffc2000-04-09 20:54:50 +0000680
681
682
Greg Ward7c1e5f62000-03-10 01:56:58 +0000683\end{document}