blob: 44095018d3af98dee6797559a4914f676dd94487 [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 Warde3cca262000-08-31 16:36:31 +000027\makeindex
Greg Ward7c1e5f62000-03-10 01:56:58 +000028
29\begin{document}
30
31\maketitle
32
Greg Warde3cca262000-08-31 16:36:31 +000033\begin{abstract}
34 \noindent
35 This document describes the Python Distribution Utilities
36 (``Distutils'') from the end-user's point-of-view, describing how to
37 extend the capabilities of a standard Python installation by building
38 and installing third-party Python modules and extensions.
39\end{abstract}
40
Greg Ward7c1e5f62000-03-10 01:56:58 +000041%\begin{abstract}
42%\noindent
43%Abstract this!
44%\end{abstract}
45
46\tableofcontents
47
48\section{Introduction}
Greg Warde78298a2000-04-28 17:12:24 +000049\label{intro}
Greg Ward7c1e5f62000-03-10 01:56:58 +000050
Greg Ward6002ffc2000-04-09 20:54:50 +000051Although Python's extensive standard library covers many programming
52needs, there often comes a time when you need to add some new
53functionality to your Python installation in the form of third-party
54modules. This might be necessary to support your own programming, or to
55support an application that you want to use and that happens to be
56written in Python.
57
58In the past, there has been little support for adding third-party
59modules to an existing Python installation. With the introduction of
Fred Drake01df4532000-06-30 03:36:41 +000060the Python Distribution Utilities (Distutils for short) in Python 2.0,
Greg Ward6002ffc2000-04-09 20:54:50 +000061this is starting to change. Not everything will change overnight,
62though, so while this document concentrates on installing module
63distributions that use the Distutils, we will also spend some time
64dealing with the old ways.
65
66This document is aimed primarily at the people who need to install
67third-party Python modules: end-users and system administrators who just
68need to get some Python application running, and existing Python
69programmers who want to add some new goodies to their toolbox. You
70don't need to know Python to read this document; there will be some
71brief forays into using Python's interactive mode to explore your
72installation, but that's it. If you're looking for information on how
73to distribute your own Python modules so that others may use them, see
Fred Drake01df4532000-06-30 03:36:41 +000074the \citetitle[../dist/dist.html]{Distributing Python Modules} manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +000075
76
Greg Ward6002ffc2000-04-09 20:54:50 +000077\subsection{Best case: trivial installation}
Greg Warde78298a2000-04-28 17:12:24 +000078\label{trivial-inst}
Greg Ward6002ffc2000-04-09 20:54:50 +000079
80In the best case, someone will have prepared a special version of the
81module distribution you want to install that is targeted specifically at
82your platform and is installed just like any other software on your
83platform. For example, the module developer might make an executable
84installer available for Windows users, an RPM package for users of
85RPM-based Linux systems (Red Hat, SuSE, Mandrake, and many others), a
86Debian package for users of Debian-based Linux systems (Debian proper,
87Caldera, Corel, etc.), and so forth.
88
89In that case, you would download the installer appropriate to your
Greg Wardc392caa2000-04-11 02:00:26 +000090platform and do the obvious thing with it: run it if it's an executable
91installer, \code{rpm --install} it if it's an RPM, etc. You don't need
92to run Python or a setup script, you don't need to compile
93anything---you might not even need to read any instructions (although
94it's always a good idea to do so anyways).
Greg Ward6002ffc2000-04-09 20:54:50 +000095
96Of course, things will not always be that easy. You might be interested
Greg Wardc392caa2000-04-11 02:00:26 +000097in a module distribution that doesn't have an easy-to-use installer for
98your platform. In that case, you'll have to start with the source
99distribution released by the module's author/maintainer. Installing
100from a source distribution is not too hard, as long as the modules are
101packaged in the standard way. The bulk of this document is about
102building and installing modules from standard source distributions.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000103
104
Greg Ward6002ffc2000-04-09 20:54:50 +0000105\subsection{The new standard: Distutils}
Greg Warde78298a2000-04-28 17:12:24 +0000106\label{new-standard}
Greg Ward6002ffc2000-04-09 20:54:50 +0000107
108If you download a module source distribution, you can tell pretty
Greg Ward19c67f82000-06-24 01:33:16 +0000109quickly if it was packaged and distributed in the standard way, i.e.
110using the Distutils. First, the distribution's name and version number
111will be featured prominently in the name of the downloaded archive, e.g.
Greg Ward6002ffc2000-04-09 20:54:50 +0000112\file{foo-1.0.tar.gz} or \file{widget-0.9.7.zip}. Next, the archive
113will unpack into a similarly-named directory: \file{foo-1.0} or
114\file{widget-0.9.7}. Additionally, the distribution will contain a
115setup script \file{setup.py}, and a \file{README.txt} (or possibly
116\file{README}), which should explain that building and installing the
117module distribution is a simple matter of running
118\begin{verbatim}
119python setup.py install
120\end{verbatim}
121
122If all these things are true, then you already know how to build and
123install the modules you've just downloaded: run the command above.
124Unless you need to install things in a non-standard way or customize the
125build process, you don't really need this manual. Or rather, the above
126command is everything you need to get out of this manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000127
128
Greg Ward6002ffc2000-04-09 20:54:50 +0000129\subsection{The old way: no standards}
Greg Warde78298a2000-04-28 17:12:24 +0000130\label{old-way}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000131
Greg Ward6002ffc2000-04-09 20:54:50 +0000132Before the Distutils, there was no infrastructure to support installing
133third-party modules in a consistent, standardized way. Thus, it's not
134really possible to write a general manual for installing Python modules
135that don't use the Distutils; the only truly general statement that can
Greg Wardc392caa2000-04-11 02:00:26 +0000136be made is, ``Read the module's own installation instructions.''
Greg Ward6002ffc2000-04-09 20:54:50 +0000137
Greg Ward19c67f82000-06-24 01:33:16 +0000138However, if such instructions exist at all, they are often woefully
Greg Wardc392caa2000-04-11 02:00:26 +0000139inadequate and targeted at experienced Python developers. Such users
140are already familiar with how the Python library is laid out on their
141platform, and know where to copy various files in order for Python to
142find them. This document makes no such assumptions, and explains how
143the Python library is laid out on three major platforms (Unix, Windows,
144and Mac~OS), so that you can understand what happens when the Distutils
145do their job \emph{and} know how to install modules manually when the
146module author fails to provide a setup script.
Greg Ward6002ffc2000-04-09 20:54:50 +0000147
148Additionally, while there has not previously been a standard
149installation mechanism, Python has had some standard machinery for
150building extensions on Unix since Python \XXX{version?}. This machinery
151(the \file{Makefile.pre.in} file) is superseded by the Distutils, but it
152will no doubt live on in older module distributions for a while. This
153\file{Makefile.pre.in} mechanism is documented in the ``Extending \&
154Embedding Python'' manual, but that manual is aimed at module
155developers---hence, we include documentation for builders/installers
156here.
157
158All of the pre-Distutils material is tucked away in
Greg Warde78298a2000-04-28 17:12:24 +0000159section~\ref{pre-distutils}.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000160
161
Greg Ward29576562000-03-18 15:11:50 +0000162\section{Standard Build and Install}
Greg Warde78298a2000-04-28 17:12:24 +0000163\label{normal-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000164
Greg Warde78298a2000-04-28 17:12:24 +0000165As described in section~\ref{new-standard}, building and installing
Greg Ward6002ffc2000-04-09 20:54:50 +0000166a module distribution using the Distutils is usually one simple command:
167\begin{verbatim}
168python setup.py install
169\end{verbatim}
170On Unix, you'd run this command from a shell prompt; on Windows, you
Greg Warde24f05e2000-09-12 23:55:19 +0000171have to open a command prompt window (``DOS box'') and do it there; on
172Mac~OS, things are a tad more complicated (see below).
Greg Ward6002ffc2000-04-09 20:54:50 +0000173
174
175\subsection{Platform variations}
176
177You should always run the setup command from the distribution root
178directory, i.e. the top-level subdirectory that the module source
179distribution unpacks into. For example, if you've just downloaded a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000180module source distribution \file{foo-1.0.tar.gz} onto a Unix system, the
Greg Ward6002ffc2000-04-09 20:54:50 +0000181normal thing to do is:
182\begin{verbatim}
183gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
184cd foo-1.0
185python setup.py install
186\end{verbatim}
187
Greg Warde24f05e2000-09-12 23:55:19 +0000188On Windows, you'd probably download \file{foo-1.0.zip}. If you
189downloaded the archive file to \file{C:\textbackslash{}Temp}, then it
190would unpack into \file{C:\textbackslash{}Temp\textbackslash{}foo-1.0};
191you can use either a GUI archive manipulator (such as WinZip) or a
192command-line tool (such as \program{unzip} or \program{pkunzip}) to
193unpack the archive. Then, open a command prompt window (``DOS box''),
194and run:
Greg Ward6002ffc2000-04-09 20:54:50 +0000195\begin{verbatim}
Greg Warde24f05e2000-09-12 23:55:19 +0000196cd c:\Temp\foo-1.0
Greg Ward6002ffc2000-04-09 20:54:50 +0000197python setup.py install
198\end{verbatim}
199
Greg Warde24f05e2000-09-12 23:55:19 +0000200On Mac~OS, you have to go through a bit more effort to supply
201command-line arguments to the setup script:
202\begin{itemize}
203\item hit option-double-click on the script's icon (or option-drop it
204 onto the Python interpreter's icon)
205\item press the ``Set unix-style command line'' button
206\item set the ``Keep stdio window open on termination'' if you're
207 interested in seeing the output of the setup script (which is usually
208 voluminous and often useful)
209\item (??) when the command-line dialog pops up, enter ``install'' (you
210 can, of course, enter any Distutils command-line as described in this
211 document or in the ``Distributing Python Modules'' document: just
212 leave of the initial \code{python setup.py} and you'll be fine)
213\end{itemize}
214\XXX{this should change: every Distutils setup script will need
215 command-line arguments for every run (and should probably keep stdout
216 around), so all this should happen automatically for setup scripts}
Greg Wardc392caa2000-04-11 02:00:26 +0000217
Greg Ward6002ffc2000-04-09 20:54:50 +0000218
219\subsection{Splitting the job up}
220
221Running \code{setup.py install} builds and installs all modules in one
Greg Ward14deaae2000-09-11 00:33:15 +0000222run. If you prefer to work incrementally---especially useful if you
223want to customize the build process, or if things are going wrong---you
224can use the setup script to do one thing at a time. This is
Greg Ward3e7b1332000-05-30 03:00:43 +0000225particularly helpful when the build and install will be done by
226different users---e.g., you might want to build a module distribution
227and hand it off to a system administrator for installation (or do it
228yourself, with super-user privileges).
Greg Ward6002ffc2000-04-09 20:54:50 +0000229
230For example, you can build everything in one step, and then install
231everything in a second step, by invoking the setup script twice:
232\begin{verbatim}
233python setup.py build
234python setup.py install
235\end{verbatim}
236(If you do this, you will notice that running the \command{install}
Greg Ward14deaae2000-09-11 00:33:15 +0000237command first runs the \command{build} command, which---in this
238case---quickly notices that it has nothing to do, since everything in
239the \file{build} directory is up-to-date.)
Greg Ward29576562000-03-18 15:11:50 +0000240
Greg Ward14deaae2000-09-11 00:33:15 +0000241You may not need this ability to break things down often if all you do
242is install modules downloaded off the 'net, but it's very handy for more
243advanced tasks. If you get into distributing your own Python modules
244and extensions, you'll run lots of individual Distutils commands on
245their own.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000246
247
Greg Wardc392caa2000-04-11 02:00:26 +0000248\subsection{How building works}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000249
Greg Wardc392caa2000-04-11 02:00:26 +0000250As implied above, the \command{build} command is responsible for putting
251the files to install into a \emph{build directory}. By default, this is
252\file{build} under the distribution root; if you're excessively
253concerned with speed, or want to keep the source tree pristine, you can
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000254change the build directory with the \longprogramopt{build-base} option.
255For example:
Greg Wardc392caa2000-04-11 02:00:26 +0000256\begin{verbatim}
257python setup.py build --build-base=/tmp/pybuild/foo-1.0
258\end{verbatim}
259(Or you could do this permanently with a directive in your system or
260personal Distutils configuration file; see
Greg Warde78298a2000-04-28 17:12:24 +0000261section~\ref{config-files}.) Normally, this isn't necessary.
Greg Wardc392caa2000-04-11 02:00:26 +0000262
263The default layout for the build tree is as follows:
264\begin{verbatim}
265--- build/ --- lib/
266or
267--- build/ --- lib.<plat>/
268 temp.<plat>/
269\end{verbatim}
270where \code{<plat>} expands to a brief description of the current
271OS/hardware platform. The first form, with just a \file{lib} directory,
272is used for ``pure module distributions''---that is, module
273distributions that include only pure Python modules. If a module
274distribution contains any extensions (modules written in C/C++, or Java
275for JPython), then the second form, with two \code{<plat>} directories,
276is used. In that case, the \file{temp.\filevar{plat}} directory holds
277temporary files generated by the compile/link process that don't
278actually get installed. In either case, the \file{lib} (or
279\file{lib.\filevar{plat}}) directory contains all Python modules (pure
280Python and extensions) that will be installed.
281
282In the future, more directories will be added to handle Python scripts,
283documentation, binary executables, and whatever else is needed to handle
Greg Wardd5faa7e2000-04-12 01:42:19 +0000284the job of installing Python modules and applications.
Greg Wardc392caa2000-04-11 02:00:26 +0000285
286
287\subsection{How installation works}
288
289After the \command{build} command runs (whether you run it explicitly,
290or the \command{install} command does it for you), the work of the
291\command{install} command is relatively simple: all it has to do is copy
292everything under \file{build/lib} (or \file{build/lib.\filevar{plat}})
293to your chosen installation directory.
294
295If you don't choose an installation directory---i.e., if you just run
296\code{setup.py install}---then the \command{install} command installs to
297the standard location for third-party Python modules. This location
298varies by platform and by how you built/installed Python itself. On
299Unix and Mac OS, it also depends on whether the module distribution
300being installed is pure Python or contains extensions (``non-pure''):
Greg Wardd5faa7e2000-04-12 01:42:19 +0000301\begin{tableiv}{l|l|l|c}{textrm}%
302 {Platform}{Standard installation location}{Default value}{Notes}
303 \lineiv{Unix (pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000304 {\filenq{\filevar{prefix}/lib/python2.0/site-packages}}
305 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000306 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000307 \lineiv{Unix (non-pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000308 {\filenq{\filevar{exec-prefix}/lib/python2.0/site-packages}}
309 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000310 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000311 \lineiv{Windows}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000312 {\filenq{\filevar{prefix}}}
Greg Ward4756e5f2000-04-19 22:40:12 +0000313 {\filenq{C:\textbackslash{}Python}}
Greg Ward502d2b42000-04-12 14:20:15 +0000314 {(2)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000315 \lineiv{Mac~OS (pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000316 {\filenq{\filevar{prefix}:Lib}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000317 {\filenq{Python:Lib} \XXX{???}}
318 {}
319 \lineiv{Mac~OS (non-pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000320 {\filevar{prefix}:Mac:PlugIns}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000321 {\filenq{Python:Mac:PlugIns}\XXX{???}}
322 {}
323\end{tableiv}
324
325\noindent Notes:
326\begin{description}
Greg Ward502d2b42000-04-12 14:20:15 +0000327\item[(1)] Most Linux distributions include Python as a standard part of
328 the system, so \filevar{prefix} and \filevar{exec-prefix} are usually
329 both \file{/usr} on Linux. If you build Python yourself on Linux (or
330 any Unix-like system), the default \filevar{prefix} and
331 \filevar{exec-prefix} are \file{/usr/local}.
332\item[(2)] The default installation directory on Windows was
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000333 \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
334 Python 1.6a1, 1.5.2, and earlier.
Greg Wardd5faa7e2000-04-12 01:42:19 +0000335\end{description}
336
Greg Wardc392caa2000-04-11 02:00:26 +0000337\filevar{prefix} and \filevar{exec-prefix} stand for the directories
338that Python is installed to, and where it finds its libraries at
339run-time. They are always the same under Windows and Mac~OS, and very
340often the same under Unix. You can find out what your Python
341installation uses for \filevar{prefix} and \filevar{exec-prefix} by
342running Python in interactive mode and typing a few simple commands.
343Under Unix, just type \code{python} at the shell prompt; under Windows,
Fred Drake01df4532000-06-30 03:36:41 +0000344run ``Python 2.0 (interpreter)'' \XXX{right?}; under Mac~OS, \XXX{???}.
345Once the interpreter is started, you type Python code at the
346\samp{>>> } prompt. For example, on my Linux system, I type the three
347Python statements shown below, and get the output as shown, to find
348out my \filevar{prefix} and \filevar{exec-prefix}:
349
Greg Wardc392caa2000-04-11 02:00:26 +0000350\begin{verbatim}
351Python 1.5.2 (#1, Apr 18 1999, 16:03:16) [GCC pgcc-2.91.60 19981201 (egcs-1.1.1 on linux2
352Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
353>>> import sys
354>>> sys.prefix
355'/usr'
356>>> sys.exec_prefix
357'/usr'
358\end{verbatim}
359
360If you don't want to install to the standard location, or if you don't
361have permission to write there, then you need to read about alternate
362installations in the next section.
363
364
365% This rather nasty macro is used to generate the tables that describe
366% each installation scheme. It's nasty because it takes two arguments
367% for each "slot" in an installation scheme, there will soon be more
368% than five of these slots, and TeX has a limit of 10 arguments to a
369% macro. Uh-oh.
370
Greg Ward29576562000-03-18 15:11:50 +0000371\newcommand{\installscheme}[8]
372 {\begin{tableiii}{lll}{textrm}
373 {Type of file}
374 {Installation Directory}
375 {Override option}
376 \lineiii{pure module distribution}
377 {\filevar{#1}\filenq{#2}}
Greg Warda021aca2000-04-19 22:34:11 +0000378 {\longprogramopt{install-purelib}}
Greg Ward29576562000-03-18 15:11:50 +0000379 \lineiii{non-pure module distribution}
380 {\filevar{#3}\filenq{#4}}
Greg Warda021aca2000-04-19 22:34:11 +0000381 {\longprogramopt{install-platlib}}
Greg Ward29576562000-03-18 15:11:50 +0000382 \lineiii{scripts}
383 {\filevar{#5}\filenq{#6}}
Greg Warda021aca2000-04-19 22:34:11 +0000384 {\longprogramopt{install-scripts}}
Greg Ward29576562000-03-18 15:11:50 +0000385 \lineiii{data}
386 {\filevar{#7}\filenq{#8}}
Greg Warda021aca2000-04-19 22:34:11 +0000387 {\longprogramopt{install-data}}
Greg Ward29576562000-03-18 15:11:50 +0000388 \end{tableiii}}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000389
Greg Ward29576562000-03-18 15:11:50 +0000390\section{Alternate Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000391\label{alt-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000392
Greg Ward29576562000-03-18 15:11:50 +0000393Often, it is necessary or desirable to install modules to a location
394other than the standard location for third-party Python modules. For
395example, on a Unix system you might not have permission to write to the
396standard third-party module directory. Or you might wish to try out a
397module before making it a standard part of your local Python
398installation; this is especially true when upgrading a distribution
399already present: you want to make sure your existing base of scripts
400still works with the new version before actually upgrading.
401
402The Distutils \command{install} command is designed to make installing
403module distributions to an alternate location simple and painless. The
404basic idea is that you supply a base directory for the installation, and
405the \command{install} command picks a set of directories (called an
406\emph{installation scheme}) under this base directory in which to
407install files. The details differ across platforms, so read whichever
408of the following section applies to you.
409
410
411\subsection{Alternate installation: Unix (the home scheme)}
Greg Warde78298a2000-04-28 17:12:24 +0000412\label{alt-unix-prefix}
Greg Ward29576562000-03-18 15:11:50 +0000413
414Under Unix, there are two ways to perform an alternate installation.
415The ``prefix scheme'' is similar to how alternate installation works
Greg Wardc392caa2000-04-11 02:00:26 +0000416under Windows and Mac~OS, but is not necessarily the most useful way to
Greg Ward29576562000-03-18 15:11:50 +0000417maintain a personal Python library. Hence, we document the more
418convenient and commonly useful ``home scheme'' first.
419
Greg Wardc392caa2000-04-11 02:00:26 +0000420The idea behind the ``home scheme'' is that you build and maintain a
421personal stash of Python modules, probably under your home directory.
422Installing a new module distribution is as simple as
Greg Ward29576562000-03-18 15:11:50 +0000423\begin{verbatim}
424python setup.py install --home=<dir>
425\end{verbatim}
Greg Warda021aca2000-04-19 22:34:11 +0000426where you can supply any directory you like for the \longprogramopt{home}
Greg Ward4756e5f2000-04-19 22:40:12 +0000427option. Lazy typists can just type a tilde (\code{\textasciitilde}); the
Greg Wardc392caa2000-04-11 02:00:26 +0000428\command{install} command will expand this to your home directory:
429\begin{verbatim}
430python setup.py install --home=~
431\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000432
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000433The \longprogramopt{home} option defines the installation base
434directory. Files are installed to the following directories under the
435installation base as follows:
Greg Ward29576562000-03-18 15:11:50 +0000436\installscheme{home}{/lib/python}
437 {home}{/lib/python}
438 {home}{/bin}
439 {home}{/share}
440
441\subsection{Alternate installation: Unix (the prefix scheme)}
Greg Warde78298a2000-04-28 17:12:24 +0000442\label{alt-unix-home}
Greg Ward29576562000-03-18 15:11:50 +0000443
444The ``prefix scheme'' is useful when you wish to use one Python
445installation to perform the build/install (i.e., to run the setup
446script), but install modules into the third-party module directory of a
447different Python installation (or something that looks like a different
448Python installation). If this sounds a trifle unusual, it is---that's
449why the ``home scheme'' comes first. However, there are at least two
450known cases where the prefix scheme will be useful.
451
Greg Ward19c67f82000-06-24 01:33:16 +0000452First, consider that many Linux distributions put Python in \file{/usr},
Greg Ward29576562000-03-18 15:11:50 +0000453rather than the more traditional \file{/usr/local}. This is entirely
454appropriate, since in those cases Python is part of ``the system''
455rather than a local add-on. However, if you are installing Python
456modules from source, you probably want them to go in
457\file{/usr/local/lib/python1.\filevar{X}} rather than
458\file{/usr/lib/python1.\filevar{X}}. This can be done with
459\begin{verbatim}
460/usr/bin/python setup.py install --prefix=/usr/local
461\end{verbatim}
462
463Another possibility is a network filesystem where the name used to write
464to a remote directory is different from the name used to read it: for
465example, the Python interpreter accessed as \file{/usr/local/bin/python}
466might search for modules in \file{/usr/local/lib/python1.\filevar{X}},
467but those modules would have to be installed to, say,
468\file{/mnt/\filevar{@server}/export/lib/python1.\filevar{X}}. This
469could be done with
470\begin{verbatim}
471/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
472\end{verbatim}
473
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000474In either case, the \longprogramopt{prefix} option defines the
475installation base, and the \longprogramopt{exec-prefix} option defines
476the platform-specific installation base, which is used for
477platform-specific files. (Currently, this just means non-pure module
478distributions, but could be expanded to C libraries, binary executables,
479etc.) If \longprogramopt{exec-prefix} is not supplied, it defaults to
480\longprogramopt{prefix}. Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000481
482\installscheme{prefix}{/lib/python1.\filevar{X}/site-packages}
483 {exec-prefix}{/lib/python1.\filevar{X}/site-packages}
484 {prefix}{/bin}
485 {prefix}{/share}
486
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000487There is no requirement that \longprogramopt{prefix} or
488\longprogramopt{exec-prefix} actually point to an alternate Python
489installation; if the directories listed above do not already exist, they
490are created at installation time.
Greg Ward29576562000-03-18 15:11:50 +0000491
492Incidentally, the real reason the prefix scheme is important is simply
493that a standard Unix installation uses the prefix scheme, but with
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000494\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
495Python itself (as \code{sys.prefix} and \code{sys.exec\_prefix}). Thus,
496you might think you'll never use the prefix scheme, but every time you
497run \code{python setup.py install} without any other options, you're
498using it.
Greg Ward29576562000-03-18 15:11:50 +0000499
500Note that installing extensions to an alternate Python installation has
501no effect on how those extensions are built: in particular, the Python
502header files (\file{Python.h} and friends) installed with the Python
503interpreter used to run the setup script will be used in compiling
504extensions. It is your responsibility to ensure that the interpreter
505used to run extensions installed in this way is compatibile with the
Greg Wardc392caa2000-04-11 02:00:26 +0000506interpreter used to build them. The best way to do this is to ensure
507that the two interpreters are the same version of Python (possibly
508different builds, or possibly copies of the same build). (Of course, if
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000509your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
510point to an alternate Python installation, this is immaterial.)
Greg Ward29576562000-03-18 15:11:50 +0000511
512
513\subsection{Alternate installation: Windows}
Greg Warde78298a2000-04-28 17:12:24 +0000514\label{alt-windows}
Greg Ward29576562000-03-18 15:11:50 +0000515
516Since Windows has no conception of a user's home directory, and since
517the standard Python installation under Windows is simpler than that
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000518under Unix, there's no point in having separate \longprogramopt{prefix}
519and \longprogramopt{home} options. Just use the \longprogramopt{prefix}
520option to specify a base directory, e.g.
Greg Ward29576562000-03-18 15:11:50 +0000521\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000522python setup.py install --prefix="\Temp\Python"
Greg Ward29576562000-03-18 15:11:50 +0000523\end{verbatim}
Greg Ward4756e5f2000-04-19 22:40:12 +0000524to install modules to the \file{\textbackslash{}Temp} directory on the current
Greg Ward29576562000-03-18 15:11:50 +0000525drive.
526
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000527The installation base is defined by the \longprogramopt{prefix} option;
528the \longprogramopt{exec-prefix} option is not supported under Windows.
529Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000530\installscheme{prefix}{}
531 {prefix}{}
Greg Ward4756e5f2000-04-19 22:40:12 +0000532 {prefix}{\textbackslash{}Scripts}
533 {prefix}{\textbackslash{}Data}
Greg Ward29576562000-03-18 15:11:50 +0000534
535
Greg Wardc392caa2000-04-11 02:00:26 +0000536\subsection{Alternate installation: Mac~OS}
Greg Warde78298a2000-04-28 17:12:24 +0000537\label{alt-macos}
Greg Ward29576562000-03-18 15:11:50 +0000538
Greg Wardc392caa2000-04-11 02:00:26 +0000539Like Windows, Mac~OS has no notion of home directories (or even of
Greg Ward29576562000-03-18 15:11:50 +0000540users), and a fairly simple standard Python installation. Thus, only a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000541\longprogramopt{prefix} option is needed. It defines the installation
542base, and files are installed under it as follows:
Greg Ward29576562000-03-18 15:11:50 +0000543
Greg Ward6002ffc2000-04-09 20:54:50 +0000544\XXX{how do MacPython users run the interpreter with command-line args?}
Greg Ward29576562000-03-18 15:11:50 +0000545
546\installscheme{prefix}{:Lib}
547 {prefix}{:Mac:PlugIns}
Greg Ward8e14f052000-03-22 01:00:23 +0000548 {prefix}{:Scripts}
549 {prefix}{:Data}
Greg Ward29576562000-03-18 15:11:50 +0000550
Greg Ward6002ffc2000-04-09 20:54:50 +0000551\XXX{Corran Webster says: ``Modules are found in either \file{:Lib} or
Greg Ward29576562000-03-18 15:11:50 +0000552\file{:Mac:Lib}, while extensions usually go in
553\file{:Mac:PlugIns}''---does this mean that non-pure distributions should
554be divided between \file{:Mac:PlugIns} and \file{:Mac:Lib}? If so, that
555changes the granularity at which we care about modules: instead of
556``modules from pure distributions'' and ``modules from non-pure
557distributions'', it becomes ``modules from pure distributions'',
558``Python modules from non-pure distributions'', and ``extensions from
Greg Ward6002ffc2000-04-09 20:54:50 +0000559non-pure distributions''. Is this necessary?!?}
Greg Ward29576562000-03-18 15:11:50 +0000560
561
562\section{Custom Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000563\label{custom-install}
Greg Ward29576562000-03-18 15:11:50 +0000564
565Sometimes, the alternate installation schemes described in
Greg Warde78298a2000-04-28 17:12:24 +0000566section~\ref{alt-install} just don't do what you want. You might
Greg Ward29576562000-03-18 15:11:50 +0000567want to tweak just one or two directories while keeping everything under
568the same base directory, or you might want to completely redefine the
569installation scheme. In either case, you're creating a \emph{custom
570 installation scheme}.
571
572You probably noticed the column of ``override options'' in the tables
573describing the alternate installation schemes above. Those options are
574how you define a custom installation scheme. These override options can
575be relative, absolute, or explicitly defined in terms of one of the
576installation base directories. (There are two installation base
577directories, and they are normally the same---they only differ when you
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000578use the Unix ``prefix scheme'' and supply different
579\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
Greg Ward29576562000-03-18 15:11:50 +0000580
581For example, say you're installing a module distribution to your home
582directory under Unix---but you want scripts to go in
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000583\file{\textasciitilde/scripts} rather than \file{\textasciitilde/bin}.
584As you might expect, you can override this directory with the
585\longprogramopt{install-scripts} option; in this case, it makes most
586sense to supply a relative path, which will be interpreted relative to
587the installation base directory (your home directory, in this case):
Greg Ward29576562000-03-18 15:11:50 +0000588\begin{verbatim}
Greg Ward19c67f82000-06-24 01:33:16 +0000589python setup.py install --home=~ --install-scripts=scripts
Greg Ward29576562000-03-18 15:11:50 +0000590\end{verbatim}
591
592Another Unix example: suppose your Python installation was built and
593installed with a prefix of \file{/usr/local/python}, so under a standard
594installation scripts will wind up in \file{/usr/local/python/bin}. If
595you want them in \file{/usr/local/bin} instead, you would supply this
Greg Warda021aca2000-04-19 22:34:11 +0000596absolute directory for the \longprogramopt{install-scripts} option:
Greg Ward29576562000-03-18 15:11:50 +0000597\begin{verbatim}
598python setup.py install --install-scripts=/usr/local/bin
599\end{verbatim}
600(This performs an installation using the ``prefix scheme,'' where the
601prefix is whatever your Python interpreter was installed with---
602\file{/usr/local/python} in this case.)
603
604If you maintain Python on Windows, you might want third-party modules to
605live in a subdirectory of \filevar{prefix}, rather than right in
606\filevar{prefix} itself. This is almost as easy as customizing the
607script installation directory---you just have to remember that there are
608two types of modules to worry about, pure modules and non-pure modules
609(i.e., modules from a non-pure distribution). For example:
610\begin{verbatim}
611python setup.py install --install-purelib=Site --install-platlib=Site
612\end{verbatim}
613The specified installation directories are relative to \filevar{prefix}.
614Of course, you also have to ensure that these directories are in
615Python's module search path, e.g. by putting a \file{.pth} file in
Greg Ward6002ffc2000-04-09 20:54:50 +0000616\filevar{prefix} (\XXX{should have a section describing .pth files and
617 cross-ref it here}).
Greg Ward29576562000-03-18 15:11:50 +0000618
619If you want to define an entire installation scheme, you just have to
620supply all of the installation directory options. The recommended way
Greg Wardc392caa2000-04-11 02:00:26 +0000621to do this is to supply relative paths; for example, if you want to
622maintain all Python module-related files under \file{python} in your
623home directory, and you want a separate directory for each platform that
624you use your home directory from, you might define the following
Greg Ward29576562000-03-18 15:11:50 +0000625installation scheme:
626\begin{verbatim}
Greg Wardc392caa2000-04-11 02:00:26 +0000627python setup.py install --home=~ \
Greg Ward29576562000-03-18 15:11:50 +0000628 --install-purelib=python/lib \
629 --install-platlib=python/lib.$PLAT \
630 --install-scripts=python/scripts
631 --install-data=python/data
632\end{verbatim}
633or, equivalently,
634\begin{verbatim}
635python setup.py install --home=~/python \
636 --install-purelib=lib \
Greg Ward19c67f82000-06-24 01:33:16 +0000637 --install-platlib='lib.$PLAT' \
Greg Ward29576562000-03-18 15:11:50 +0000638 --install-scripts=scripts
639 --install-data=data
640\end{verbatim}
641\code{\$PLAT} is not (necessarily) an environment variable---it will be
642expanded by the Distutils as it parses your command line options (just
643as it does when parsing your configuration file(s)).
644
645Obviously, specifying the entire installation scheme every time you
646install a new module distribution would be very tedious. Thus, you can
647put these options into your Distutils config file (see
Greg Warde78298a2000-04-28 17:12:24 +0000648section~\ref{config-files}):
Greg Ward169f91b2000-03-10 01:57:51 +0000649\begin{verbatim}
650[install]
Greg Ward29576562000-03-18 15:11:50 +0000651install-base=$HOME
652install-purelib=python/lib
653install-platlib=python/lib.$PLAT
654install-scripts=python/scripts
655install-data=python/data
Greg Ward169f91b2000-03-10 01:57:51 +0000656\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000657or, equivalently,
Greg Ward169f91b2000-03-10 01:57:51 +0000658\begin{verbatim}
659[install]
Greg Ward29576562000-03-18 15:11:50 +0000660install-base=$HOME/python
661install-purelib=lib
662install-platlib=lib.$PLAT
663install-scripts=scripts
664install-data=data
Greg Ward169f91b2000-03-10 01:57:51 +0000665\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000666Note that these two are \emph{not} equivalent if you supply a different
667installation base directory when you run the setup script. For example,
Greg Ward7c1e5f62000-03-10 01:56:58 +0000668\begin{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000669python setup.py --install-base=/tmp
Greg Ward7c1e5f62000-03-10 01:56:58 +0000670\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000671would install pure modules to \filevar{/tmp/python/lib} in the first
672case, and to \filevar{/tmp/lib} in the second case. (For the second
673case, you probably want to supply an installation base of
674\file{/tmp/python}.)
Greg Ward169f91b2000-03-10 01:57:51 +0000675
Greg Ward29576562000-03-18 15:11:50 +0000676You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
677sample configuration file input. These are Distutils configuration
678variables, which bear a strong resemblance to environment variables. In
Greg Wardc392caa2000-04-11 02:00:26 +0000679fact, you can use environment variables in config files---on platforms
680that have such a notion---but the Distutils additionally define a few
681extra variables that may not be in your environment, such as
682\code{\$PLAT}. (And of course, you can only use the configuration
683variables supplied by the Distutils on systems that don't have
684environment variables, such as Mac~OS (\XXX{true?}).) See
Greg Warde78298a2000-04-28 17:12:24 +0000685section~\ref{config-files} for details.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000686
Greg Wardc392caa2000-04-11 02:00:26 +0000687\XXX{need some Windows and Mac~OS examples---when would custom
Greg Ward6002ffc2000-04-09 20:54:50 +0000688 installation schemes be needed on those platforms?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000689
Greg Ward7c1e5f62000-03-10 01:56:58 +0000690
Greg Ward6002ffc2000-04-09 20:54:50 +0000691\section{Distutils Configuration Files}
Greg Warde78298a2000-04-28 17:12:24 +0000692\label{config-files}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000693
Greg Ward6002ffc2000-04-09 20:54:50 +0000694
695\section{Pre-Distutils Conventions}
Greg Warde78298a2000-04-28 17:12:24 +0000696\label{pre-distutils}
Greg Ward6002ffc2000-04-09 20:54:50 +0000697
698
Greg Wardc392caa2000-04-11 02:00:26 +0000699\subsection{The Makefile.pre.in file}
Greg Warde78298a2000-04-28 17:12:24 +0000700\label{makefile-pre-in}
Greg Ward6002ffc2000-04-09 20:54:50 +0000701
702
703\subsection{Installing modules manually}
Greg Warde78298a2000-04-28 17:12:24 +0000704\label{manual-install}
Greg Ward6002ffc2000-04-09 20:54:50 +0000705
706
707
Greg Ward7c1e5f62000-03-10 01:56:58 +0000708\end{document}