blob: 0792c91561d77e3241b135dea99e3793671294a9 [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
51the Python Distribution Utilities (Distutils for short) in Python 1.6,
52this 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
65the ``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
100quickly if was packaged and distributed in the standard way, i.e. using
101the Distutils. First, the distribution's name and version number will
102be featured prominently in the name of the downloaded archive, e.g.
103\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 Wardc392caa2000-04-11 02:00:26 +0000129However, if such instructions exists at all, they are often woefully
130inadequate 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
201wrong---you can use the setup script to do one thing at a time.
202
203For example, you can build everything in one step, and then install
204everything in a second step, by invoking the setup script twice:
205\begin{verbatim}
206python setup.py build
207python setup.py install
208\end{verbatim}
209(If you do this, you will notice that running the \command{install}
Greg Wardc392caa2000-04-11 02:00:26 +0000210command first runs the \command{build} command, which quickly notices
211that it has nothing to do, since everything in the \file{build}
212directory is up-to-date.)
Greg Ward29576562000-03-18 15:11:50 +0000213
Greg Wardc392caa2000-04-11 02:00:26 +0000214\XXX{concrete reason for splitting things up?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000215
216
Greg Wardc392caa2000-04-11 02:00:26 +0000217\subsection{How building works}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000218
Greg Wardc392caa2000-04-11 02:00:26 +0000219As implied above, the \command{build} command is responsible for putting
220the files to install into a \emph{build directory}. By default, this is
221\file{build} under the distribution root; if you're excessively
222concerned with speed, or want to keep the source tree pristine, you can
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000223change the build directory with the \longprogramopt{build-base} option.
224For example:
Greg Wardc392caa2000-04-11 02:00:26 +0000225\begin{verbatim}
226python setup.py build --build-base=/tmp/pybuild/foo-1.0
227\end{verbatim}
228(Or you could do this permanently with a directive in your system or
229personal Distutils configuration file; see
Greg Warde78298a2000-04-28 17:12:24 +0000230section~\ref{config-files}.) Normally, this isn't necessary.
Greg Wardc392caa2000-04-11 02:00:26 +0000231
232The default layout for the build tree is as follows:
233\begin{verbatim}
234--- build/ --- lib/
235or
236--- build/ --- lib.<plat>/
237 temp.<plat>/
238\end{verbatim}
239where \code{<plat>} expands to a brief description of the current
240OS/hardware platform. The first form, with just a \file{lib} directory,
241is used for ``pure module distributions''---that is, module
242distributions that include only pure Python modules. If a module
243distribution contains any extensions (modules written in C/C++, or Java
244for JPython), then the second form, with two \code{<plat>} directories,
245is used. In that case, the \file{temp.\filevar{plat}} directory holds
246temporary files generated by the compile/link process that don't
247actually get installed. In either case, the \file{lib} (or
248\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}
257
258After the \command{build} command runs (whether you run it explicitly,
259or the \command{install} command does it for you), the work of the
260\command{install} command is relatively simple: all it has to do is copy
261everything under \file{build/lib} (or \file{build/lib.\filevar{plat}})
262to your chosen installation directory.
263
264If you don't choose an installation directory---i.e., if you just run
265\code{setup.py install}---then the \command{install} command installs to
266the standard location for third-party Python modules. This location
267varies by platform and by how you built/installed Python itself. On
268Unix and Mac OS, it also depends on whether the module distribution
269being installed is pure Python or contains extensions (``non-pure''):
Greg Wardd5faa7e2000-04-12 01:42:19 +0000270\begin{tableiv}{l|l|l|c}{textrm}%
271 {Platform}{Standard installation location}{Default value}{Notes}
272 \lineiv{Unix (pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000273 {\filenq{\filevar{prefix}/lib/python1.6/site-packages}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000274 {\filenq{/usr/local/lib/python1.6/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000275 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000276 \lineiv{Unix (non-pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000277 {\filenq{\filevar{exec-prefix}/lib/python1.6/site-packages}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000278 {\filenq{/usr/local/lib/python1.6/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000279 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000280 \lineiv{Windows}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000281 {\filenq{\filevar{prefix}}}
Greg Ward4756e5f2000-04-19 22:40:12 +0000282 {\filenq{C:\textbackslash{}Python}}
Greg Ward502d2b42000-04-12 14:20:15 +0000283 {(2)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000284 \lineiv{Mac~OS (pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000285 {\filenq{\filevar{prefix}:Lib}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000286 {\filenq{Python:Lib} \XXX{???}}
287 {}
288 \lineiv{Mac~OS (non-pure)}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000289 {\filevar{prefix}:Mac:PlugIns}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000290 {\filenq{Python:Mac:PlugIns}\XXX{???}}
291 {}
292\end{tableiv}
293
294\noindent Notes:
295\begin{description}
Greg Ward502d2b42000-04-12 14:20:15 +0000296\item[(1)] Most Linux distributions include Python as a standard part of
297 the system, so \filevar{prefix} and \filevar{exec-prefix} are usually
298 both \file{/usr} on Linux. If you build Python yourself on Linux (or
299 any Unix-like system), the default \filevar{prefix} and
300 \filevar{exec-prefix} are \file{/usr/local}.
301\item[(2)] The default installation directory on Windows was
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000302 \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
303 Python 1.6a1, 1.5.2, and earlier.
Greg Wardd5faa7e2000-04-12 01:42:19 +0000304\end{description}
305
Greg Wardc392caa2000-04-11 02:00:26 +0000306\filevar{prefix} and \filevar{exec-prefix} stand for the directories
307that Python is installed to, and where it finds its libraries at
308run-time. They are always the same under Windows and Mac~OS, and very
309often the same under Unix. You can find out what your Python
310installation uses for \filevar{prefix} and \filevar{exec-prefix} by
311running Python in interactive mode and typing a few simple commands.
312Under Unix, just type \code{python} at the shell prompt; under Windows,
313run ``Python 1.6 (interpreter)'' \XXX{right?}; under Mac~OS, \XXX{???}.
314Once the interpreter is started, you type Python code at the \code{>>>}
315prompt. For example, on my Linux system, I type the three Python
316statements shown below, and get the output as shown, to find out my
317\filevar{prefix} and \filevar{exec-prefix}:
318\begin{verbatim}
319Python 1.5.2 (#1, Apr 18 1999, 16:03:16) [GCC pgcc-2.91.60 19981201 (egcs-1.1.1 on linux2
320Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
321>>> import sys
322>>> sys.prefix
323'/usr'
324>>> sys.exec_prefix
325'/usr'
326\end{verbatim}
327
328If you don't want to install to the standard location, or if you don't
329have permission to write there, then you need to read about alternate
330installations in the next section.
331
332
333% This rather nasty macro is used to generate the tables that describe
334% each installation scheme. It's nasty because it takes two arguments
335% for each "slot" in an installation scheme, there will soon be more
336% than five of these slots, and TeX has a limit of 10 arguments to a
337% macro. Uh-oh.
338
Greg Ward29576562000-03-18 15:11:50 +0000339\newcommand{\installscheme}[8]
340 {\begin{tableiii}{lll}{textrm}
341 {Type of file}
342 {Installation Directory}
343 {Override option}
344 \lineiii{pure module distribution}
345 {\filevar{#1}\filenq{#2}}
Greg Warda021aca2000-04-19 22:34:11 +0000346 {\longprogramopt{install-purelib}}
Greg Ward29576562000-03-18 15:11:50 +0000347 \lineiii{non-pure module distribution}
348 {\filevar{#3}\filenq{#4}}
Greg Warda021aca2000-04-19 22:34:11 +0000349 {\longprogramopt{install-platlib}}
Greg Ward29576562000-03-18 15:11:50 +0000350 \lineiii{scripts}
351 {\filevar{#5}\filenq{#6}}
Greg Warda021aca2000-04-19 22:34:11 +0000352 {\longprogramopt{install-scripts}}
Greg Ward29576562000-03-18 15:11:50 +0000353 \lineiii{data}
354 {\filevar{#7}\filenq{#8}}
Greg Warda021aca2000-04-19 22:34:11 +0000355 {\longprogramopt{install-data}}
Greg Ward29576562000-03-18 15:11:50 +0000356 \end{tableiii}}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000357
Greg Ward29576562000-03-18 15:11:50 +0000358\section{Alternate Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000359\label{alt-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000360
Greg Ward29576562000-03-18 15:11:50 +0000361Often, it is necessary or desirable to install modules to a location
362other than the standard location for third-party Python modules. For
363example, on a Unix system you might not have permission to write to the
364standard third-party module directory. Or you might wish to try out a
365module before making it a standard part of your local Python
366installation; this is especially true when upgrading a distribution
367already present: you want to make sure your existing base of scripts
368still works with the new version before actually upgrading.
369
370The Distutils \command{install} command is designed to make installing
371module distributions to an alternate location simple and painless. The
372basic idea is that you supply a base directory for the installation, and
373the \command{install} command picks a set of directories (called an
374\emph{installation scheme}) under this base directory in which to
375install files. The details differ across platforms, so read whichever
376of the following section applies to you.
377
378
379\subsection{Alternate installation: Unix (the home scheme)}
Greg Warde78298a2000-04-28 17:12:24 +0000380\label{alt-unix-prefix}
Greg Ward29576562000-03-18 15:11:50 +0000381
382Under Unix, there are two ways to perform an alternate installation.
383The ``prefix scheme'' is similar to how alternate installation works
Greg Wardc392caa2000-04-11 02:00:26 +0000384under Windows and Mac~OS, but is not necessarily the most useful way to
Greg Ward29576562000-03-18 15:11:50 +0000385maintain a personal Python library. Hence, we document the more
386convenient and commonly useful ``home scheme'' first.
387
Greg Wardc392caa2000-04-11 02:00:26 +0000388The idea behind the ``home scheme'' is that you build and maintain a
389personal stash of Python modules, probably under your home directory.
390Installing a new module distribution is as simple as
Greg Ward29576562000-03-18 15:11:50 +0000391\begin{verbatim}
392python setup.py install --home=<dir>
393\end{verbatim}
Greg Warda021aca2000-04-19 22:34:11 +0000394where you can supply any directory you like for the \longprogramopt{home}
Greg Ward4756e5f2000-04-19 22:40:12 +0000395option. Lazy typists can just type a tilde (\code{\textasciitilde}); the
Greg Wardc392caa2000-04-11 02:00:26 +0000396\command{install} command will expand this to your home directory:
397\begin{verbatim}
398python setup.py install --home=~
399\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000400
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000401The \longprogramopt{home} option defines the installation base
402directory. Files are installed to the following directories under the
403installation base as follows:
Greg Ward29576562000-03-18 15:11:50 +0000404\installscheme{home}{/lib/python}
405 {home}{/lib/python}
406 {home}{/bin}
407 {home}{/share}
408
409\subsection{Alternate installation: Unix (the prefix scheme)}
Greg Warde78298a2000-04-28 17:12:24 +0000410\label{alt-unix-home}
Greg Ward29576562000-03-18 15:11:50 +0000411
412The ``prefix scheme'' is useful when you wish to use one Python
413installation to perform the build/install (i.e., to run the setup
414script), but install modules into the third-party module directory of a
415different Python installation (or something that looks like a different
416Python installation). If this sounds a trifle unusual, it is---that's
417why the ``home scheme'' comes first. However, there are at least two
418known cases where the prefix scheme will be useful.
419
420First, consider that many Linux distribution put Python in \file{/usr},
421rather than the more traditional \file{/usr/local}. This is entirely
422appropriate, since in those cases Python is part of ``the system''
423rather than a local add-on. However, if you are installing Python
424modules from source, you probably want them to go in
425\file{/usr/local/lib/python1.\filevar{X}} rather than
426\file{/usr/lib/python1.\filevar{X}}. This can be done with
427\begin{verbatim}
428/usr/bin/python setup.py install --prefix=/usr/local
429\end{verbatim}
430
431Another possibility is a network filesystem where the name used to write
432to a remote directory is different from the name used to read it: for
433example, the Python interpreter accessed as \file{/usr/local/bin/python}
434might search for modules in \file{/usr/local/lib/python1.\filevar{X}},
435but those modules would have to be installed to, say,
436\file{/mnt/\filevar{@server}/export/lib/python1.\filevar{X}}. This
437could be done with
438\begin{verbatim}
439/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
440\end{verbatim}
441
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000442In either case, the \longprogramopt{prefix} option defines the
443installation base, and the \longprogramopt{exec-prefix} option defines
444the platform-specific installation base, which is used for
445platform-specific files. (Currently, this just means non-pure module
446distributions, but could be expanded to C libraries, binary executables,
447etc.) If \longprogramopt{exec-prefix} is not supplied, it defaults to
448\longprogramopt{prefix}. Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000449
450\installscheme{prefix}{/lib/python1.\filevar{X}/site-packages}
451 {exec-prefix}{/lib/python1.\filevar{X}/site-packages}
452 {prefix}{/bin}
453 {prefix}{/share}
454
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000455There is no requirement that \longprogramopt{prefix} or
456\longprogramopt{exec-prefix} actually point to an alternate Python
457installation; if the directories listed above do not already exist, they
458are created at installation time.
Greg Ward29576562000-03-18 15:11:50 +0000459
460Incidentally, the real reason the prefix scheme is important is simply
461that a standard Unix installation uses the prefix scheme, but with
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000462\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
463Python itself (as \code{sys.prefix} and \code{sys.exec\_prefix}). Thus,
464you might think you'll never use the prefix scheme, but every time you
465run \code{python setup.py install} without any other options, you're
466using it.
Greg Ward29576562000-03-18 15:11:50 +0000467
468Note that installing extensions to an alternate Python installation has
469no effect on how those extensions are built: in particular, the Python
470header files (\file{Python.h} and friends) installed with the Python
471interpreter used to run the setup script will be used in compiling
472extensions. It is your responsibility to ensure that the interpreter
473used to run extensions installed in this way is compatibile with the
Greg Wardc392caa2000-04-11 02:00:26 +0000474interpreter used to build them. The best way to do this is to ensure
475that the two interpreters are the same version of Python (possibly
476different builds, or possibly copies of the same build). (Of course, if
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000477your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
478point to an alternate Python installation, this is immaterial.)
Greg Ward29576562000-03-18 15:11:50 +0000479
480
481\subsection{Alternate installation: Windows}
Greg Warde78298a2000-04-28 17:12:24 +0000482\label{alt-windows}
Greg Ward29576562000-03-18 15:11:50 +0000483
484Since Windows has no conception of a user's home directory, and since
485the standard Python installation under Windows is simpler than that
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000486under Unix, there's no point in having separate \longprogramopt{prefix}
487and \longprogramopt{home} options. Just use the \longprogramopt{prefix}
488option to specify a base directory, e.g.
Greg Ward29576562000-03-18 15:11:50 +0000489\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000490python setup.py install --prefix="\Temp\Python"
Greg Ward29576562000-03-18 15:11:50 +0000491\end{verbatim}
Greg Ward4756e5f2000-04-19 22:40:12 +0000492to install modules to the \file{\textbackslash{}Temp} directory on the current
Greg Ward29576562000-03-18 15:11:50 +0000493drive.
494
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000495The installation base is defined by the \longprogramopt{prefix} option;
496the \longprogramopt{exec-prefix} option is not supported under Windows.
497Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000498\installscheme{prefix}{}
499 {prefix}{}
Greg Ward4756e5f2000-04-19 22:40:12 +0000500 {prefix}{\textbackslash{}Scripts}
501 {prefix}{\textbackslash{}Data}
Greg Ward29576562000-03-18 15:11:50 +0000502
503
Greg Wardc392caa2000-04-11 02:00:26 +0000504\subsection{Alternate installation: Mac~OS}
Greg Warde78298a2000-04-28 17:12:24 +0000505\label{alt-macos}
Greg Ward29576562000-03-18 15:11:50 +0000506
Greg Wardc392caa2000-04-11 02:00:26 +0000507Like Windows, Mac~OS has no notion of home directories (or even of
Greg Ward29576562000-03-18 15:11:50 +0000508users), and a fairly simple standard Python installation. Thus, only a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000509\longprogramopt{prefix} option is needed. It defines the installation
510base, and files are installed under it as follows:
Greg Ward29576562000-03-18 15:11:50 +0000511
Greg Ward6002ffc2000-04-09 20:54:50 +0000512\XXX{how do MacPython users run the interpreter with command-line args?}
Greg Ward29576562000-03-18 15:11:50 +0000513
514\installscheme{prefix}{:Lib}
515 {prefix}{:Mac:PlugIns}
Greg Ward8e14f052000-03-22 01:00:23 +0000516 {prefix}{:Scripts}
517 {prefix}{:Data}
Greg Ward29576562000-03-18 15:11:50 +0000518
Greg Ward6002ffc2000-04-09 20:54:50 +0000519\XXX{Corran Webster says: ``Modules are found in either \file{:Lib} or
Greg Ward29576562000-03-18 15:11:50 +0000520\file{:Mac:Lib}, while extensions usually go in
521\file{:Mac:PlugIns}''---does this mean that non-pure distributions should
522be divided between \file{:Mac:PlugIns} and \file{:Mac:Lib}? If so, that
523changes the granularity at which we care about modules: instead of
524``modules from pure distributions'' and ``modules from non-pure
525distributions'', it becomes ``modules from pure distributions'',
526``Python modules from non-pure distributions'', and ``extensions from
Greg Ward6002ffc2000-04-09 20:54:50 +0000527non-pure distributions''. Is this necessary?!?}
Greg Ward29576562000-03-18 15:11:50 +0000528
529
530\section{Custom Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000531\label{custom-install}
Greg Ward29576562000-03-18 15:11:50 +0000532
533Sometimes, the alternate installation schemes described in
Greg Warde78298a2000-04-28 17:12:24 +0000534section~\ref{alt-install} just don't do what you want. You might
Greg Ward29576562000-03-18 15:11:50 +0000535want to tweak just one or two directories while keeping everything under
536the same base directory, or you might want to completely redefine the
537installation scheme. In either case, you're creating a \emph{custom
538 installation scheme}.
539
540You probably noticed the column of ``override options'' in the tables
541describing the alternate installation schemes above. Those options are
542how you define a custom installation scheme. These override options can
543be relative, absolute, or explicitly defined in terms of one of the
544installation base directories. (There are two installation base
545directories, and they are normally the same---they only differ when you
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000546use the Unix ``prefix scheme'' and supply different
547\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
Greg Ward29576562000-03-18 15:11:50 +0000548
549For example, say you're installing a module distribution to your home
550directory under Unix---but you want scripts to go in
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000551\file{\textasciitilde/scripts} rather than \file{\textasciitilde/bin}.
552As you might expect, you can override this directory with the
553\longprogramopt{install-scripts} option; in this case, it makes most
554sense to supply a relative path, which will be interpreted relative to
555the installation base directory (your home directory, in this case):
Greg Ward29576562000-03-18 15:11:50 +0000556\begin{verbatim}
557python setup.py install --home --install-scripts=scripts
558\end{verbatim}
559
560Another Unix example: suppose your Python installation was built and
561installed with a prefix of \file{/usr/local/python}, so under a standard
562installation scripts will wind up in \file{/usr/local/python/bin}. If
563you want them in \file{/usr/local/bin} instead, you would supply this
Greg Warda021aca2000-04-19 22:34:11 +0000564absolute directory for the \longprogramopt{install-scripts} option:
Greg Ward29576562000-03-18 15:11:50 +0000565\begin{verbatim}
566python setup.py install --install-scripts=/usr/local/bin
567\end{verbatim}
568(This performs an installation using the ``prefix scheme,'' where the
569prefix is whatever your Python interpreter was installed with---
570\file{/usr/local/python} in this case.)
571
572If you maintain Python on Windows, you might want third-party modules to
573live in a subdirectory of \filevar{prefix}, rather than right in
574\filevar{prefix} itself. This is almost as easy as customizing the
575script installation directory---you just have to remember that there are
576two types of modules to worry about, pure modules and non-pure modules
577(i.e., modules from a non-pure distribution). For example:
578\begin{verbatim}
579python setup.py install --install-purelib=Site --install-platlib=Site
580\end{verbatim}
581The specified installation directories are relative to \filevar{prefix}.
582Of course, you also have to ensure that these directories are in
583Python's module search path, e.g. by putting a \file{.pth} file in
Greg Ward6002ffc2000-04-09 20:54:50 +0000584\filevar{prefix} (\XXX{should have a section describing .pth files and
585 cross-ref it here}).
Greg Ward29576562000-03-18 15:11:50 +0000586
587If you want to define an entire installation scheme, you just have to
588supply all of the installation directory options. The recommended way
Greg Wardc392caa2000-04-11 02:00:26 +0000589to do this is to supply relative paths; for example, if you want to
590maintain all Python module-related files under \file{python} in your
591home directory, and you want a separate directory for each platform that
592you use your home directory from, you might define the following
Greg Ward29576562000-03-18 15:11:50 +0000593installation scheme:
594\begin{verbatim}
Greg Wardc392caa2000-04-11 02:00:26 +0000595python setup.py install --home=~ \
Greg Ward29576562000-03-18 15:11:50 +0000596 --install-purelib=python/lib \
597 --install-platlib=python/lib.$PLAT \
598 --install-scripts=python/scripts
599 --install-data=python/data
600\end{verbatim}
601or, equivalently,
602\begin{verbatim}
603python setup.py install --home=~/python \
604 --install-purelib=lib \
605 --install-platlib=lib.$PLAT \
606 --install-scripts=scripts
607 --install-data=data
608\end{verbatim}
609\code{\$PLAT} is not (necessarily) an environment variable---it will be
610expanded by the Distutils as it parses your command line options (just
611as it does when parsing your configuration file(s)).
612
613Obviously, specifying the entire installation scheme every time you
614install a new module distribution would be very tedious. Thus, you can
615put these options into your Distutils config file (see
Greg Warde78298a2000-04-28 17:12:24 +0000616section~\ref{config-files}):
Greg Ward169f91b2000-03-10 01:57:51 +0000617\begin{verbatim}
618[install]
Greg Ward29576562000-03-18 15:11:50 +0000619install-base=$HOME
620install-purelib=python/lib
621install-platlib=python/lib.$PLAT
622install-scripts=python/scripts
623install-data=python/data
Greg Ward169f91b2000-03-10 01:57:51 +0000624\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000625or, equivalently,
Greg Ward169f91b2000-03-10 01:57:51 +0000626\begin{verbatim}
627[install]
Greg Ward29576562000-03-18 15:11:50 +0000628install-base=$HOME/python
629install-purelib=lib
630install-platlib=lib.$PLAT
631install-scripts=scripts
632install-data=data
Greg Ward169f91b2000-03-10 01:57:51 +0000633\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000634Note that these two are \emph{not} equivalent if you supply a different
635installation base directory when you run the setup script. For example,
Greg Ward7c1e5f62000-03-10 01:56:58 +0000636\begin{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000637python setup.py --install-base=/tmp
Greg Ward7c1e5f62000-03-10 01:56:58 +0000638\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000639would install pure modules to \filevar{/tmp/python/lib} in the first
640case, and to \filevar{/tmp/lib} in the second case. (For the second
641case, you probably want to supply an installation base of
642\file{/tmp/python}.)
Greg Ward169f91b2000-03-10 01:57:51 +0000643
Greg Ward29576562000-03-18 15:11:50 +0000644You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
645sample configuration file input. These are Distutils configuration
646variables, which bear a strong resemblance to environment variables. In
Greg Wardc392caa2000-04-11 02:00:26 +0000647fact, you can use environment variables in config files---on platforms
648that have such a notion---but the Distutils additionally define a few
649extra variables that may not be in your environment, such as
650\code{\$PLAT}. (And of course, you can only use the configuration
651variables supplied by the Distutils on systems that don't have
652environment variables, such as Mac~OS (\XXX{true?}).) See
Greg Warde78298a2000-04-28 17:12:24 +0000653section~\ref{config-files} for details.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000654
Greg Wardc392caa2000-04-11 02:00:26 +0000655\XXX{need some Windows and Mac~OS examples---when would custom
Greg Ward6002ffc2000-04-09 20:54:50 +0000656 installation schemes be needed on those platforms?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000657
Greg Ward7c1e5f62000-03-10 01:56:58 +0000658
Greg Ward6002ffc2000-04-09 20:54:50 +0000659\section{Distutils Configuration Files}
Greg Warde78298a2000-04-28 17:12:24 +0000660\label{config-files}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000661
Greg Wardc392caa2000-04-11 02:00:26 +0000662\XXX{not even implemented yet, much less documented!}
Greg Ward6002ffc2000-04-09 20:54:50 +0000663
664
665\section{Pre-Distutils Conventions}
Greg Warde78298a2000-04-28 17:12:24 +0000666\label{pre-distutils}
Greg Ward6002ffc2000-04-09 20:54:50 +0000667
668
Greg Wardc392caa2000-04-11 02:00:26 +0000669\subsection{The Makefile.pre.in file}
Greg Warde78298a2000-04-28 17:12:24 +0000670\label{makefile-pre-in}
Greg Ward6002ffc2000-04-09 20:54:50 +0000671
672
673\subsection{Installing modules manually}
Greg Warde78298a2000-04-28 17:12:24 +0000674\label{manual-install}
Greg Ward6002ffc2000-04-09 20:54:50 +0000675
676
677
Greg Ward7c1e5f62000-03-10 01:56:58 +0000678\end{document}