blob: 53c16440719a9431d192e315d4d3ad4c626a120b [file] [log] [blame]
Greg Ward7c1e5f62000-03-10 01:56:58 +00001\documentclass{howto}
Greg Ward7593eb32000-04-09 03:59:15 +00002\usepackage{distutils}
Greg Ward7c1e5f62000-03-10 01:56:58 +00003
4\title{Installing Python Modules}
5
6% The audience for this document includes people who don't know anything
7% about Python and aren't about to learn the language just in order to
8% install and maintain it for their users, i.e. system administrators.
9% Thus, I have to be sure to explain the basics at some point:
10% sys.path and PYTHONPATH at least. Should probably give pointers to
11% other docs on "import site", PYTHONSTARTUP, PYTHONHOME, etc.
12%
13% Also, I need to take into account that most modules out there don't
14% (yet) use Distutils: briefly explain the old Makefile.pre.in
15% convention (maybe move material from the E&E manual to here?), and
16% explain where to copy .py and .so files manually if the distribution
17% doesn't provide a mechanism for doing so.
18%
19% Finally, it might be useful to include all the material from my "Care
20% and Feeding of a Python Installation" talk in here somewhere. Yow!
21
Greg Ward7c1e5f62000-03-10 01:56:58 +000022\author{Greg Ward}
Fred Drake17f690f2001-07-14 02:14:42 +000023\authoraddress{Email: \email{gward@python.net}}
Greg Ward7c1e5f62000-03-10 01:56:58 +000024
Greg Warde3cca262000-08-31 16:36:31 +000025\makeindex
Greg Ward7c1e5f62000-03-10 01:56:58 +000026
27\begin{document}
28
29\maketitle
30
Greg Warde3cca262000-08-31 16:36:31 +000031\begin{abstract}
32 \noindent
33 This document describes the Python Distribution Utilities
34 (``Distutils'') from the end-user's point-of-view, describing how to
35 extend the capabilities of a standard Python installation by building
36 and installing third-party Python modules and extensions.
37\end{abstract}
38
Greg Ward7c1e5f62000-03-10 01:56:58 +000039%\begin{abstract}
40%\noindent
41%Abstract this!
42%\end{abstract}
43
Fred Drakea9a83e92001-03-01 18:37:52 +000044
45% The ugly "%begin{latexonly}" pseudo-environment supresses the table
46% of contents for HTML generation.
47%
48%begin{latexonly}
Greg Ward7c1e5f62000-03-10 01:56:58 +000049\tableofcontents
Fred Drakea9a83e92001-03-01 18:37:52 +000050%end{latexonly}
51
Greg Ward7c1e5f62000-03-10 01:56:58 +000052
53\section{Introduction}
Greg Warde78298a2000-04-28 17:12:24 +000054\label{intro}
Greg Ward7c1e5f62000-03-10 01:56:58 +000055
Greg Ward6002ffc2000-04-09 20:54:50 +000056Although Python's extensive standard library covers many programming
57needs, there often comes a time when you need to add some new
58functionality to your Python installation in the form of third-party
59modules. This might be necessary to support your own programming, or to
60support an application that you want to use and that happens to be
61written in Python.
62
63In the past, there has been little support for adding third-party
64modules to an existing Python installation. With the introduction of
Fred Drake01df4532000-06-30 03:36:41 +000065the Python Distribution Utilities (Distutils for short) in Python 2.0,
Greg Ward6002ffc2000-04-09 20:54:50 +000066this is starting to change. Not everything will change overnight,
67though, so while this document concentrates on installing module
68distributions that use the Distutils, we will also spend some time
69dealing with the old ways.
70
71This document is aimed primarily at the people who need to install
72third-party Python modules: end-users and system administrators who just
73need to get some Python application running, and existing Python
74programmers who want to add some new goodies to their toolbox. You
75don't need to know Python to read this document; there will be some
76brief forays into using Python's interactive mode to explore your
77installation, but that's it. If you're looking for information on how
78to distribute your own Python modules so that others may use them, see
Fred Drake01df4532000-06-30 03:36:41 +000079the \citetitle[../dist/dist.html]{Distributing Python Modules} manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +000080
81
Greg Ward6002ffc2000-04-09 20:54:50 +000082\subsection{Best case: trivial installation}
Greg Ward1ed49ee2000-09-13 00:00:58 +000083\label{trivial-install}
Greg Ward6002ffc2000-04-09 20:54:50 +000084
85In the best case, someone will have prepared a special version of the
86module distribution you want to install that is targeted specifically at
87your platform and is installed just like any other software on your
88platform. For example, the module developer might make an executable
89installer available for Windows users, an RPM package for users of
90RPM-based Linux systems (Red Hat, SuSE, Mandrake, and many others), a
91Debian package for users of Debian-based Linux systems (Debian proper,
92Caldera, Corel, etc.), and so forth.
93
94In that case, you would download the installer appropriate to your
Greg Wardc392caa2000-04-11 02:00:26 +000095platform and do the obvious thing with it: run it if it's an executable
96installer, \code{rpm --install} it if it's an RPM, etc. You don't need
97to run Python or a setup script, you don't need to compile
98anything---you might not even need to read any instructions (although
99it's always a good idea to do so anyways).
Greg Ward6002ffc2000-04-09 20:54:50 +0000100
101Of course, things will not always be that easy. You might be interested
Greg Wardc392caa2000-04-11 02:00:26 +0000102in a module distribution that doesn't have an easy-to-use installer for
103your platform. In that case, you'll have to start with the source
104distribution released by the module's author/maintainer. Installing
105from a source distribution is not too hard, as long as the modules are
106packaged in the standard way. The bulk of this document is about
107building and installing modules from standard source distributions.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000108
109
Greg Ward6002ffc2000-04-09 20:54:50 +0000110\subsection{The new standard: Distutils}
Greg Warde78298a2000-04-28 17:12:24 +0000111\label{new-standard}
Greg Ward6002ffc2000-04-09 20:54:50 +0000112
113If you download a module source distribution, you can tell pretty
Greg Ward19c67f82000-06-24 01:33:16 +0000114quickly if it was packaged and distributed in the standard way, i.e.
115using the Distutils. First, the distribution's name and version number
116will be featured prominently in the name of the downloaded archive, e.g.
Greg Ward6002ffc2000-04-09 20:54:50 +0000117\file{foo-1.0.tar.gz} or \file{widget-0.9.7.zip}. Next, the archive
118will unpack into a similarly-named directory: \file{foo-1.0} or
119\file{widget-0.9.7}. Additionally, the distribution will contain a
120setup script \file{setup.py}, and a \file{README.txt} (or possibly
121\file{README}), which should explain that building and installing the
122module distribution is a simple matter of running
Fred Drakea9a83e92001-03-01 18:37:52 +0000123
Greg Ward6002ffc2000-04-09 20:54:50 +0000124\begin{verbatim}
125python setup.py install
126\end{verbatim}
127
128If all these things are true, then you already know how to build and
129install the modules you've just downloaded: run the command above.
130Unless you need to install things in a non-standard way or customize the
131build process, you don't really need this manual. Or rather, the above
132command is everything you need to get out of this manual.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000133
134
Greg Ward6002ffc2000-04-09 20:54:50 +0000135\subsection{The old way: no standards}
Greg Warde78298a2000-04-28 17:12:24 +0000136\label{old-way}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000137
Greg Ward6002ffc2000-04-09 20:54:50 +0000138Before the Distutils, there was no infrastructure to support installing
139third-party modules in a consistent, standardized way. Thus, it's not
140really possible to write a general manual for installing Python modules
141that don't use the Distutils; the only truly general statement that can
Greg Wardc392caa2000-04-11 02:00:26 +0000142be made is, ``Read the module's own installation instructions.''
Greg Ward6002ffc2000-04-09 20:54:50 +0000143
Greg Ward19c67f82000-06-24 01:33:16 +0000144However, if such instructions exist at all, they are often woefully
Greg Wardc392caa2000-04-11 02:00:26 +0000145inadequate and targeted at experienced Python developers. Such users
146are already familiar with how the Python library is laid out on their
147platform, and know where to copy various files in order for Python to
148find them. This document makes no such assumptions, and explains how
Fred Drakeeff9a872000-10-26 16:41:03 +0000149the Python library is laid out on three major platforms (\UNIX, Windows,
Fred Drake74f1a562001-09-25 15:12:41 +0000150and Mac OS), so that you can understand what happens when the Distutils
Greg Wardc392caa2000-04-11 02:00:26 +0000151do their job \emph{and} know how to install modules manually when the
152module author fails to provide a setup script.
Greg Ward6002ffc2000-04-09 20:54:50 +0000153
154Additionally, while there has not previously been a standard
155installation mechanism, Python has had some standard machinery for
Andrew M. Kuchling30537da2001-02-17 00:42:56 +0000156building extensions on \UNIX{} since Python 1.4. This
Fred Drakeeff9a872000-10-26 16:41:03 +0000157machinery (the \file{Makefile.pre.in} file) is superseded by the
158Distutils, but it will no doubt live on in older module distributions
159for a while. This \file{Makefile.pre.in} mechanism is documented in
160the \citetitle[../ext/ext.html]{Extending \& Embedding Python} manual,
161but that manual is aimed at module developers---hence, we include
162documentation for builders/installers here.
Greg Ward6002ffc2000-04-09 20:54:50 +0000163
164All of the pre-Distutils material is tucked away in
Greg Warde78298a2000-04-28 17:12:24 +0000165section~\ref{pre-distutils}.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000166
167
Greg Ward29576562000-03-18 15:11:50 +0000168\section{Standard Build and Install}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000169\label{standard-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000170
Greg Warde78298a2000-04-28 17:12:24 +0000171As described in section~\ref{new-standard}, building and installing
Greg Ward6002ffc2000-04-09 20:54:50 +0000172a module distribution using the Distutils is usually one simple command:
Fred Drakea9a83e92001-03-01 18:37:52 +0000173
Greg Ward6002ffc2000-04-09 20:54:50 +0000174\begin{verbatim}
175python setup.py install
176\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000177
Fred Drakeeff9a872000-10-26 16:41:03 +0000178On \UNIX, you'd run this command from a shell prompt; on Windows, you
Greg Warde24f05e2000-09-12 23:55:19 +0000179have to open a command prompt window (``DOS box'') and do it there; on
Fred Drake74f1a562001-09-25 15:12:41 +0000180Mac OS, things are a tad more complicated (see below).
Greg Ward6002ffc2000-04-09 20:54:50 +0000181
182
183\subsection{Platform variations}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000184\label{platform-variations}
Greg Ward6002ffc2000-04-09 20:54:50 +0000185
186You should always run the setup command from the distribution root
187directory, i.e. the top-level subdirectory that the module source
188distribution unpacks into. For example, if you've just downloaded a
Fred Drakeeff9a872000-10-26 16:41:03 +0000189module source distribution \file{foo-1.0.tar.gz} onto a
190\UNIX{} system, the normal thing to do is:
Fred Drakea9a83e92001-03-01 18:37:52 +0000191
Greg Ward6002ffc2000-04-09 20:54:50 +0000192\begin{verbatim}
193gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
194cd foo-1.0
195python setup.py install
196\end{verbatim}
197
Greg Warde24f05e2000-09-12 23:55:19 +0000198On Windows, you'd probably download \file{foo-1.0.zip}. If you
199downloaded the archive file to \file{C:\textbackslash{}Temp}, then it
200would unpack into \file{C:\textbackslash{}Temp\textbackslash{}foo-1.0};
Fred Drake17f690f2001-07-14 02:14:42 +0000201you can use either a archive manipulator with a grapical user interface
202(such as WinZip) or a command-line tool (such as \program{unzip} or
203\program{pkunzip}) to unpack the archive. Then, open a command prompt
204window (``DOS box''), and run:
Fred Drakea9a83e92001-03-01 18:37:52 +0000205
Greg Ward6002ffc2000-04-09 20:54:50 +0000206\begin{verbatim}
Greg Warde24f05e2000-09-12 23:55:19 +0000207cd c:\Temp\foo-1.0
Greg Ward6002ffc2000-04-09 20:54:50 +0000208python setup.py install
209\end{verbatim}
210
Fred Drake74f1a562001-09-25 15:12:41 +0000211On Mac OS, you have to go through a bit more effort to supply
Greg Warde24f05e2000-09-12 23:55:19 +0000212command-line arguments to the setup script:
213\begin{itemize}
214\item hit option-double-click on the script's icon (or option-drop it
215 onto the Python interpreter's icon)
216\item press the ``Set unix-style command line'' button
217\item set the ``Keep stdio window open on termination'' if you're
218 interested in seeing the output of the setup script (which is usually
219 voluminous and often useful)
Greg Ward15f5e2a2000-09-26 02:54:43 +0000220\item when the command-line dialog pops up, enter ``install'' (you
Greg Warde24f05e2000-09-12 23:55:19 +0000221 can, of course, enter any Distutils command-line as described in this
Fred Drakeeff9a872000-10-26 16:41:03 +0000222 document or in \citetitle[../dist/dist.html]{Distributing Python
223 Modules}: just leave off the initial \code{python setup.py} and
224 you'll be fine)
Greg Warde24f05e2000-09-12 23:55:19 +0000225\end{itemize}
226\XXX{this should change: every Distutils setup script will need
227 command-line arguments for every run (and should probably keep stdout
228 around), so all this should happen automatically for setup scripts}
Greg Wardc392caa2000-04-11 02:00:26 +0000229
Greg Ward6002ffc2000-04-09 20:54:50 +0000230
231\subsection{Splitting the job up}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000232\label{splitting-up}
Greg Ward6002ffc2000-04-09 20:54:50 +0000233
234Running \code{setup.py install} builds and installs all modules in one
Greg Ward14deaae2000-09-11 00:33:15 +0000235run. If you prefer to work incrementally---especially useful if you
236want to customize the build process, or if things are going wrong---you
237can use the setup script to do one thing at a time. This is
Greg Ward3e7b1332000-05-30 03:00:43 +0000238particularly helpful when the build and install will be done by
239different users---e.g., you might want to build a module distribution
240and hand it off to a system administrator for installation (or do it
241yourself, with super-user privileges).
Greg Ward6002ffc2000-04-09 20:54:50 +0000242
243For example, you can build everything in one step, and then install
244everything in a second step, by invoking the setup script twice:
Fred Drakea9a83e92001-03-01 18:37:52 +0000245
Greg Ward6002ffc2000-04-09 20:54:50 +0000246\begin{verbatim}
247python setup.py build
248python setup.py install
249\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000250
Greg Ward6002ffc2000-04-09 20:54:50 +0000251(If you do this, you will notice that running the \command{install}
Greg Ward14deaae2000-09-11 00:33:15 +0000252command first runs the \command{build} command, which---in this
253case---quickly notices that it has nothing to do, since everything in
254the \file{build} directory is up-to-date.)
Greg Ward29576562000-03-18 15:11:50 +0000255
Greg Ward14deaae2000-09-11 00:33:15 +0000256You may not need this ability to break things down often if all you do
257is install modules downloaded off the 'net, but it's very handy for more
258advanced tasks. If you get into distributing your own Python modules
259and extensions, you'll run lots of individual Distutils commands on
260their own.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000261
262
Greg Wardc392caa2000-04-11 02:00:26 +0000263\subsection{How building works}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000264\label{how-build-works}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000265
Greg Wardc392caa2000-04-11 02:00:26 +0000266As implied above, the \command{build} command is responsible for putting
267the files to install into a \emph{build directory}. By default, this is
268\file{build} under the distribution root; if you're excessively
269concerned with speed, or want to keep the source tree pristine, you can
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000270change the build directory with the \longprogramopt{build-base} option.
271For example:
Fred Drakea9a83e92001-03-01 18:37:52 +0000272
Greg Wardc392caa2000-04-11 02:00:26 +0000273\begin{verbatim}
274python setup.py build --build-base=/tmp/pybuild/foo-1.0
275\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000276
Greg Wardc392caa2000-04-11 02:00:26 +0000277(Or you could do this permanently with a directive in your system or
278personal Distutils configuration file; see
Greg Warde78298a2000-04-28 17:12:24 +0000279section~\ref{config-files}.) Normally, this isn't necessary.
Greg Wardc392caa2000-04-11 02:00:26 +0000280
281The default layout for the build tree is as follows:
Fred Drakea9a83e92001-03-01 18:37:52 +0000282
Greg Wardc392caa2000-04-11 02:00:26 +0000283\begin{verbatim}
284--- build/ --- lib/
285or
286--- build/ --- lib.<plat>/
287 temp.<plat>/
288\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000289
Greg Wardc392caa2000-04-11 02:00:26 +0000290where \code{<plat>} expands to a brief description of the current
Greg Ward7ef2ba72000-10-22 01:40:08 +0000291OS/hardware platform and Python version. The first form, with just a
292\file{lib} directory, is used for ``pure module distributions''---that
293is, module distributions that include only pure Python modules. If a
Fred Drake42119e42001-03-03 19:47:24 +0000294module distribution contains any extensions (modules written in C/\Cpp),
Greg Ward7ef2ba72000-10-22 01:40:08 +0000295then the second form, with two \code{<plat>} directories, is used. In
296that case, the \file{temp.\filevar{plat}} directory holds temporary
297files generated by the compile/link process that don't actually get
298installed. In either case, the \file{lib} (or
Greg Wardc392caa2000-04-11 02:00:26 +0000299\file{lib.\filevar{plat}}) directory contains all Python modules (pure
300Python and extensions) that will be installed.
301
302In the future, more directories will be added to handle Python scripts,
303documentation, binary executables, and whatever else is needed to handle
Greg Wardd5faa7e2000-04-12 01:42:19 +0000304the job of installing Python modules and applications.
Greg Wardc392caa2000-04-11 02:00:26 +0000305
306
307\subsection{How installation works}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000308\label{how-install-works}
Greg Wardc392caa2000-04-11 02:00:26 +0000309
310After the \command{build} command runs (whether you run it explicitly,
311or the \command{install} command does it for you), the work of the
312\command{install} command is relatively simple: all it has to do is copy
313everything under \file{build/lib} (or \file{build/lib.\filevar{plat}})
314to your chosen installation directory.
315
316If you don't choose an installation directory---i.e., if you just run
317\code{setup.py install}---then the \command{install} command installs to
318the standard location for third-party Python modules. This location
319varies by platform and by how you built/installed Python itself. On
Fred Drake74f1a562001-09-25 15:12:41 +0000320\UNIX{} and Mac OS, it also depends on whether the module distribution
Greg Wardc392caa2000-04-11 02:00:26 +0000321being installed is pure Python or contains extensions (``non-pure''):
Greg Wardd5faa7e2000-04-12 01:42:19 +0000322\begin{tableiv}{l|l|l|c}{textrm}%
323 {Platform}{Standard installation location}{Default value}{Notes}
Fred Drakeeff9a872000-10-26 16:41:03 +0000324 \lineiv{\UNIX{} (pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000325 {\filenq{\filevar{prefix}/lib/python2.0/site-packages}}
326 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000327 {(1)}
Fred Drakeeff9a872000-10-26 16:41:03 +0000328 \lineiv{\UNIX{} (non-pure)}
Fred Drake01df4532000-06-30 03:36:41 +0000329 {\filenq{\filevar{exec-prefix}/lib/python2.0/site-packages}}
330 {\filenq{/usr/local/lib/python2.0/site-packages}}
Greg Ward502d2b42000-04-12 14:20:15 +0000331 {(1)}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000332 \lineiv{Windows}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000333 {\filenq{\filevar{prefix}}}
Greg Ward4756e5f2000-04-19 22:40:12 +0000334 {\filenq{C:\textbackslash{}Python}}
Greg Ward502d2b42000-04-12 14:20:15 +0000335 {(2)}
Fred Drake74f1a562001-09-25 15:12:41 +0000336 \lineiv{Mac OS (pure)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000337 {\filenq{\filevar{prefix}:Lib:site-packages}}
338 {\filenq{Python:Lib:site-packages}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000339 {}
Fred Drake74f1a562001-09-25 15:12:41 +0000340 \lineiv{Mac OS (non-pure)}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000341 {\filenq{\filevar{prefix}:Lib:site-packages}}
342 {\filenq{Python:Lib:site-packages}}
Greg Wardd5faa7e2000-04-12 01:42:19 +0000343 {}
344\end{tableiv}
345
346\noindent Notes:
347\begin{description}
Greg Ward502d2b42000-04-12 14:20:15 +0000348\item[(1)] Most Linux distributions include Python as a standard part of
349 the system, so \filevar{prefix} and \filevar{exec-prefix} are usually
350 both \file{/usr} on Linux. If you build Python yourself on Linux (or
Fred Drakeeff9a872000-10-26 16:41:03 +0000351 any \UNIX-like system), the default \filevar{prefix} and
Greg Ward502d2b42000-04-12 14:20:15 +0000352 \filevar{exec-prefix} are \file{/usr/local}.
353\item[(2)] The default installation directory on Windows was
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000354 \file{C:\textbackslash{}Program Files\textbackslash{}Python} under
355 Python 1.6a1, 1.5.2, and earlier.
Greg Wardd5faa7e2000-04-12 01:42:19 +0000356\end{description}
357
Greg Wardc392caa2000-04-11 02:00:26 +0000358\filevar{prefix} and \filevar{exec-prefix} stand for the directories
359that Python is installed to, and where it finds its libraries at
Fred Drake74f1a562001-09-25 15:12:41 +0000360run-time. They are always the same under Windows and Mac OS, and very
Fred Drakeeff9a872000-10-26 16:41:03 +0000361often the same under \UNIX. You can find out what your Python
Greg Wardc392caa2000-04-11 02:00:26 +0000362installation uses for \filevar{prefix} and \filevar{exec-prefix} by
363running Python in interactive mode and typing a few simple commands.
Fred Drakeb2d10062001-07-06 22:46:52 +0000364Under \UNIX, just type \code{python} at the shell prompt. Under
365Windows, choose \menuselection{Start \sub Programs \sub Python
Fred Drake74f1a562001-09-25 15:12:41 +00003662.1 \sub Python (command line)}. Under Mac OS, \XXX{???}.
Fred Drake01df4532000-06-30 03:36:41 +0000367Once the interpreter is started, you type Python code at the
Fred Drakeb2d10062001-07-06 22:46:52 +0000368prompt. For example, on my Linux system, I type the three Python
369statements shown below, and get the output as shown, to find out my
370\filevar{prefix} and \filevar{exec-prefix}:
Fred Drake01df4532000-06-30 03:36:41 +0000371
Greg Wardc392caa2000-04-11 02:00:26 +0000372\begin{verbatim}
373Python 1.5.2 (#1, Apr 18 1999, 16:03:16) [GCC pgcc-2.91.60 19981201 (egcs-1.1.1 on linux2
374Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
375>>> import sys
376>>> sys.prefix
377'/usr'
378>>> sys.exec_prefix
379'/usr'
380\end{verbatim}
381
Greg Ward7ef2ba72000-10-22 01:40:08 +0000382If you don't want to install modules to the standard location, or if you
383don't have permission to write there, then you need to read about
384alternate installations in section~\ref{alt-install}. If you want to
385customize your installation directories more heavily, see
386section~\ref{custom-install} on custom installations.
Greg Wardc392caa2000-04-11 02:00:26 +0000387
388
389% This rather nasty macro is used to generate the tables that describe
390% each installation scheme. It's nasty because it takes two arguments
391% for each "slot" in an installation scheme, there will soon be more
392% than five of these slots, and TeX has a limit of 10 arguments to a
393% macro. Uh-oh.
394
Greg Ward29576562000-03-18 15:11:50 +0000395\newcommand{\installscheme}[8]
396 {\begin{tableiii}{lll}{textrm}
397 {Type of file}
398 {Installation Directory}
399 {Override option}
400 \lineiii{pure module distribution}
401 {\filevar{#1}\filenq{#2}}
Greg Warda021aca2000-04-19 22:34:11 +0000402 {\longprogramopt{install-purelib}}
Greg Ward29576562000-03-18 15:11:50 +0000403 \lineiii{non-pure module distribution}
404 {\filevar{#3}\filenq{#4}}
Greg Warda021aca2000-04-19 22:34:11 +0000405 {\longprogramopt{install-platlib}}
Greg Ward29576562000-03-18 15:11:50 +0000406 \lineiii{scripts}
407 {\filevar{#5}\filenq{#6}}
Greg Warda021aca2000-04-19 22:34:11 +0000408 {\longprogramopt{install-scripts}}
Greg Ward29576562000-03-18 15:11:50 +0000409 \lineiii{data}
410 {\filevar{#7}\filenq{#8}}
Greg Warda021aca2000-04-19 22:34:11 +0000411 {\longprogramopt{install-data}}
Greg Ward29576562000-03-18 15:11:50 +0000412 \end{tableiii}}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000413
Greg Ward0bc59532000-09-30 21:06:40 +0000414
415\section{Building Extensions: Tips and Tricks}
416\label{building-ext}
417
418(This is the section to read for people doing any sort of interesting
419build. Things to talk about:
420\begin{itemize}
Fred Drakeeff9a872000-10-26 16:41:03 +0000421\item the \file{Setup} file (any platform now, but \UNIX-biased)
Greg Ward0bc59532000-09-30 21:06:40 +0000422\item CFLAGS and LDFLAGS (must implement them first!)
423\item using non-MS compilers on Windows (how to convert
424 Python's library, ...)
425\end{itemize}
426
427
Fred Drakea9a83e92001-03-01 18:37:52 +0000428%\subsection{Tweaking compiler/linker flags}
429%\label{tweak-flags}
Greg Ward0bc59532000-09-30 21:06:40 +0000430
431
Fred Drake6be838a2001-03-03 19:18:01 +0000432\subsection{Using non-Microsoft compilers on Windows \label{non-ms-compilers}}
433\sectionauthor{Rene Liebscher}{R.Liebscher@gmx.de}
Greg Ward0bc59532000-09-30 21:06:40 +0000434
Fred Drake6be838a2001-03-03 19:18:01 +0000435\subsubsection{Borland C++}
436
437This subsection describes the necessary steps to use Distutils with the
Fred Drake74f1a562001-09-25 15:12:41 +0000438Borland \Cpp{} compiler version 5.5.
Fred Drake6be838a2001-03-03 19:18:01 +0000439%Should we mention that users have to create cfg-files for the compiler
440%see also http://community.borland.com/article/0,1410,21205,00.html
441
442First you have to know that the Borland's object file format(OMF) is
443different from what is used by the Python version you can download
Fred Drake17f690f2001-07-14 02:14:42 +0000444from the Python Web site. (Python is built with Microsoft Visual \Cpp,
Fred Drake6be838a2001-03-03 19:18:01 +0000445which uses COFF as object file format.) For this reason you have to
446convert Python's library \file{python20.lib} into the Borland format.
447You can do this as follows:
448
449\begin{verbatim}
450coff2omf python20.lib python20_bcpp.lib
451\end{verbatim}
452
453The \file{coff2omf} program comes with the Borland compiler. The file
454\file{python20.lib} is in the \file{Libs} directory of your Python
455installation. If your extension uses other libraries (zlib,...) you
456have to convert them too.
457
Fred Drake42119e42001-03-03 19:47:24 +0000458The converted files have to reside in the same directories as the
459normal libraries.
Fred Drake6be838a2001-03-03 19:18:01 +0000460
461How does Distutils manage to use these libraries with their changed
462names? If the extension needs a library (eg. \file{foo}) Distutils
463checks first if it finds a library with suffix \file{_bcpp}
464(eg. \file{foo_bcpp.lib}) and then uses this library. In the case it
465doesn't find such a special library it uses the default name
466(\file{foo.lib}.)\footnote{This also means you could replace all
467existing COFF-libraries with OMF-libraries of the same name.}
468
Fred Drake42119e42001-03-03 19:47:24 +0000469To let Distutils compile your extension with Borland \Cpp{} you now have
Fred Drake6be838a2001-03-03 19:18:01 +0000470to type:
471
472\begin{verbatim}
473python setup.py build --compiler=bcpp
474\end{verbatim}
475
476If you want to use the Borland \Cpp{} compiler as default, you should
477consider to write it in your personal or system-wide configuration
478file for Distutils (see section~\ref{config-files}.)
479
Fred Drake74f1a562001-09-25 15:12:41 +0000480\begin{seealso}
481 \seetitle[http://www.borland.com/bcppbuilder/freecompiler/]
482 {\Cpp{}Builder Compiler}
483 {Information about the free \Cpp{} compiler from Borland,
484 including links to the download pages.}
485
486 \seetitle[http://www.cyberus.ca/~g_will/pyExtenDL.shtml]
487 {Creating Python Extensions Using Borland's Free Compiler}
488 {Document describing how to use Borland's free command-line C++
489 compiler to build Python.}
490\end{seealso}
Greg Ward0bc59532000-09-30 21:06:40 +0000491
492
Fred Drake6be838a2001-03-03 19:18:01 +0000493\subsubsection{GNU C / Cygwin / MinGW32}
494
495This section describes the necessary steps to use Distutils with the
Fred Drake42119e42001-03-03 19:47:24 +0000496GNU C/\Cpp{} compilers in their Cygwin and MinGW32
497distributions.\footnote{Check
Fred Drake6be838a2001-03-03 19:18:01 +0000498\url{http://sources.redhat.com/cygwin/} and
Fred Drake74f1a562001-09-25 15:12:41 +0000499\url{http://www.mingw.org/} for more information}
Fred Drake6be838a2001-03-03 19:18:01 +0000500
501\XXX{For a Python which was built with Cygwin, all should work without
502any of these following steps.}
503
504For these compilers we have to create some special libraries too.
Fred Drake42119e42001-03-03 19:47:24 +0000505This task is more complex as for Borland's \Cpp, because there is no
506program to convert the library (inclusive the references on data
507structures.)
Fred Drake6be838a2001-03-03 19:18:01 +0000508
509First you have to create a list of symbols which the Python DLL exports.
510(You can find a good program for this task at
511\url{http://starship.python.net/crew/kernr/mingw32/Notes.html}, see at
Fred Drake42119e42001-03-03 19:47:24 +0000512PExports 0.42h there.)
Fred Drake6be838a2001-03-03 19:18:01 +0000513
514\begin{verbatim}
515pexports python20.dll >python20.def
516\end{verbatim}
517
518Then you can create from these information an import library for gcc.
519
520\begin{verbatim}
521dlltool --dllname python20.dll --def python20.def --output-lib libpython20.a
522\end{verbatim}
Fred Drake74f1a562001-09-25 15:12:41 +0000523
Fred Drake6be838a2001-03-03 19:18:01 +0000524The resulting library has to be placed in the same directory as
525\file{python20.lib}. (Should be the \file{libs} directory under your
526Python installation directory.)
527
528If your extension uses other libraries (zlib,...) you might
529have to convert them too.
530The converted files have to reside in the same directories as the normal
531libraries do.
532
533To let Distutils compile your extension with Cygwin you now have to type
534
535\begin{verbatim}
536python setup.py build --compiler=cygwin
537\end{verbatim}
538
Fred Drake74f1a562001-09-25 15:12:41 +0000539and for Cygwin in no-cygwin mode\footnote{Then you have no
540\POSIX{} emulation available, but you also don't need
541\file{cygwin1.dll}.} or for MinGW32 type:
Fred Drake6be838a2001-03-03 19:18:01 +0000542
543\begin{verbatim}
544python setup.py build --compiler=mingw32
545\end{verbatim}
546
547If you want to use any of these options/compilers as default, you should
548consider to write it in your personal or system-wide configuration file
549for Distutils (see section~\ref{config-files}.)
550
Fred Drake74f1a562001-09-25 15:12:41 +0000551\begin{seealso}
552 \seetitle[http://www.zope.org/Members/als/tips/win32_mingw_modules]
553 {Building Python modules on MS Windows platform with MinGW32}
554 {Information about building the required libraries for the MinGW32
555 environment.}
Fred Drake6be838a2001-03-03 19:18:01 +0000556
Fred Drake74f1a562001-09-25 15:12:41 +0000557 \seeurl{http://pyopengl.sourceforge.net/ftp/win32-stuff/}
558 {Converted import libraries in Cygwin/MinGW32 and Borland format,
559 and a script to create the registry entries needed for Distutils
560 to locate the built Python.}
561\end{seealso}
Fred Drake6be838a2001-03-03 19:18:01 +0000562
Greg Ward0bc59532000-09-30 21:06:40 +0000563
Greg Ward29576562000-03-18 15:11:50 +0000564\section{Alternate Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000565\label{alt-install}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000566
Greg Ward29576562000-03-18 15:11:50 +0000567Often, it is necessary or desirable to install modules to a location
568other than the standard location for third-party Python modules. For
Fred Drakeeff9a872000-10-26 16:41:03 +0000569example, on a \UNIX{} system you might not have permission to write to the
Greg Ward29576562000-03-18 15:11:50 +0000570standard third-party module directory. Or you might wish to try out a
571module before making it a standard part of your local Python
572installation; this is especially true when upgrading a distribution
573already present: you want to make sure your existing base of scripts
574still works with the new version before actually upgrading.
575
576The Distutils \command{install} command is designed to make installing
577module distributions to an alternate location simple and painless. The
578basic idea is that you supply a base directory for the installation, and
579the \command{install} command picks a set of directories (called an
580\emph{installation scheme}) under this base directory in which to
581install files. The details differ across platforms, so read whichever
Andrew M. Kuchling30537da2001-02-17 00:42:56 +0000582of the following sections applies to you.
Greg Ward29576562000-03-18 15:11:50 +0000583
584
Fred Drakeeff9a872000-10-26 16:41:03 +0000585\subsection{Alternate installation: \UNIX{} (the home scheme)}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000586\label{alt-install-prefix}
Greg Ward29576562000-03-18 15:11:50 +0000587
Fred Drakeeff9a872000-10-26 16:41:03 +0000588Under \UNIX, there are two ways to perform an alternate installation.
Greg Ward29576562000-03-18 15:11:50 +0000589The ``prefix scheme'' is similar to how alternate installation works
Fred Drake74f1a562001-09-25 15:12:41 +0000590under Windows and Mac OS, but is not necessarily the most useful way to
Greg Ward29576562000-03-18 15:11:50 +0000591maintain a personal Python library. Hence, we document the more
592convenient and commonly useful ``home scheme'' first.
593
Greg Wardc392caa2000-04-11 02:00:26 +0000594The idea behind the ``home scheme'' is that you build and maintain a
595personal stash of Python modules, probably under your home directory.
596Installing a new module distribution is as simple as
Fred Drakea9a83e92001-03-01 18:37:52 +0000597
Greg Ward29576562000-03-18 15:11:50 +0000598\begin{verbatim}
599python setup.py install --home=<dir>
600\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000601
Greg Warda021aca2000-04-19 22:34:11 +0000602where you can supply any directory you like for the \longprogramopt{home}
Greg Ward4756e5f2000-04-19 22:40:12 +0000603option. Lazy typists can just type a tilde (\code{\textasciitilde}); the
Greg Wardc392caa2000-04-11 02:00:26 +0000604\command{install} command will expand this to your home directory:
Fred Drakea9a83e92001-03-01 18:37:52 +0000605
Greg Wardc392caa2000-04-11 02:00:26 +0000606\begin{verbatim}
607python setup.py install --home=~
608\end{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000609
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000610The \longprogramopt{home} option defines the installation base
611directory. Files are installed to the following directories under the
612installation base as follows:
Greg Ward29576562000-03-18 15:11:50 +0000613\installscheme{home}{/lib/python}
614 {home}{/lib/python}
615 {home}{/bin}
616 {home}{/share}
617
Fred Drakeeff9a872000-10-26 16:41:03 +0000618\subsection{Alternate installation: \UNIX{} (the prefix scheme)}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000619\label{alt-install-home}
Greg Ward29576562000-03-18 15:11:50 +0000620
621The ``prefix scheme'' is useful when you wish to use one Python
622installation to perform the build/install (i.e., to run the setup
623script), but install modules into the third-party module directory of a
624different Python installation (or something that looks like a different
625Python installation). If this sounds a trifle unusual, it is---that's
626why the ``home scheme'' comes first. However, there are at least two
627known cases where the prefix scheme will be useful.
628
Greg Ward19c67f82000-06-24 01:33:16 +0000629First, consider that many Linux distributions put Python in \file{/usr},
Greg Ward29576562000-03-18 15:11:50 +0000630rather than the more traditional \file{/usr/local}. This is entirely
631appropriate, since in those cases Python is part of ``the system''
632rather than a local add-on. However, if you are installing Python
633modules from source, you probably want them to go in
634\file{/usr/local/lib/python1.\filevar{X}} rather than
635\file{/usr/lib/python1.\filevar{X}}. This can be done with
Fred Drakea9a83e92001-03-01 18:37:52 +0000636
Greg Ward29576562000-03-18 15:11:50 +0000637\begin{verbatim}
638/usr/bin/python setup.py install --prefix=/usr/local
639\end{verbatim}
640
641Another possibility is a network filesystem where the name used to write
642to a remote directory is different from the name used to read it: for
643example, the Python interpreter accessed as \file{/usr/local/bin/python}
644might search for modules in \file{/usr/local/lib/python1.\filevar{X}},
645but those modules would have to be installed to, say,
646\file{/mnt/\filevar{@server}/export/lib/python1.\filevar{X}}. This
647could be done with
Fred Drakea9a83e92001-03-01 18:37:52 +0000648
Greg Ward29576562000-03-18 15:11:50 +0000649\begin{verbatim}
650/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
651\end{verbatim}
652
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000653In either case, the \longprogramopt{prefix} option defines the
654installation base, and the \longprogramopt{exec-prefix} option defines
655the platform-specific installation base, which is used for
656platform-specific files. (Currently, this just means non-pure module
657distributions, but could be expanded to C libraries, binary executables,
658etc.) If \longprogramopt{exec-prefix} is not supplied, it defaults to
659\longprogramopt{prefix}. Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000660
661\installscheme{prefix}{/lib/python1.\filevar{X}/site-packages}
662 {exec-prefix}{/lib/python1.\filevar{X}/site-packages}
663 {prefix}{/bin}
664 {prefix}{/share}
665
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000666There is no requirement that \longprogramopt{prefix} or
667\longprogramopt{exec-prefix} actually point to an alternate Python
668installation; if the directories listed above do not already exist, they
669are created at installation time.
Greg Ward29576562000-03-18 15:11:50 +0000670
671Incidentally, the real reason the prefix scheme is important is simply
Fred Drakeeff9a872000-10-26 16:41:03 +0000672that a standard \UNIX{} installation uses the prefix scheme, but with
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000673\longprogramopt{prefix} and \longprogramopt{exec-prefix} supplied by
674Python itself (as \code{sys.prefix} and \code{sys.exec\_prefix}). Thus,
675you might think you'll never use the prefix scheme, but every time you
676run \code{python setup.py install} without any other options, you're
677using it.
Greg Ward29576562000-03-18 15:11:50 +0000678
679Note that installing extensions to an alternate Python installation has
680no effect on how those extensions are built: in particular, the Python
681header files (\file{Python.h} and friends) installed with the Python
682interpreter used to run the setup script will be used in compiling
683extensions. It is your responsibility to ensure that the interpreter
684used to run extensions installed in this way is compatibile with the
Greg Wardc392caa2000-04-11 02:00:26 +0000685interpreter used to build them. The best way to do this is to ensure
686that the two interpreters are the same version of Python (possibly
687different builds, or possibly copies of the same build). (Of course, if
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000688your \longprogramopt{prefix} and \longprogramopt{exec-prefix} don't even
689point to an alternate Python installation, this is immaterial.)
Greg Ward29576562000-03-18 15:11:50 +0000690
691
692\subsection{Alternate installation: Windows}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000693\label{alt-install-windows}
Greg Ward29576562000-03-18 15:11:50 +0000694
695Since Windows has no conception of a user's home directory, and since
696the standard Python installation under Windows is simpler than that
Fred Drakeeff9a872000-10-26 16:41:03 +0000697under \UNIX, there's no point in having separate \longprogramopt{prefix}
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000698and \longprogramopt{home} options. Just use the \longprogramopt{prefix}
699option to specify a base directory, e.g.
Fred Drakea9a83e92001-03-01 18:37:52 +0000700
Greg Ward29576562000-03-18 15:11:50 +0000701\begin{verbatim}
Greg Ward8e14f052000-03-22 01:00:23 +0000702python setup.py install --prefix="\Temp\Python"
Greg Ward29576562000-03-18 15:11:50 +0000703\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000704
Greg Ward4756e5f2000-04-19 22:40:12 +0000705to install modules to the \file{\textbackslash{}Temp} directory on the current
Greg Ward29576562000-03-18 15:11:50 +0000706drive.
707
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000708The installation base is defined by the \longprogramopt{prefix} option;
709the \longprogramopt{exec-prefix} option is not supported under Windows.
710Files are installed as follows:
Greg Ward29576562000-03-18 15:11:50 +0000711\installscheme{prefix}{}
712 {prefix}{}
Greg Ward4756e5f2000-04-19 22:40:12 +0000713 {prefix}{\textbackslash{}Scripts}
714 {prefix}{\textbackslash{}Data}
Greg Ward29576562000-03-18 15:11:50 +0000715
716
Fred Drake74f1a562001-09-25 15:12:41 +0000717\subsection{Alternate installation: Mac OS}
Greg Ward1ed49ee2000-09-13 00:00:58 +0000718\label{alt-install-macos}
Greg Ward29576562000-03-18 15:11:50 +0000719
Fred Drake74f1a562001-09-25 15:12:41 +0000720Like Windows, Mac OS has no notion of home directories (or even of
Greg Ward29576562000-03-18 15:11:50 +0000721users), and a fairly simple standard Python installation. Thus, only a
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000722\longprogramopt{prefix} option is needed. It defines the installation
723base, and files are installed under it as follows:
Greg Ward29576562000-03-18 15:11:50 +0000724
Greg Ward8c562592000-09-13 00:12:37 +0000725\installscheme{prefix}{:Lib:site-packages}
726 {prefix}{:Lib:site-packages}
Greg Ward8e14f052000-03-22 01:00:23 +0000727 {prefix}{:Scripts}
728 {prefix}{:Data}
Greg Ward29576562000-03-18 15:11:50 +0000729
Greg Ward8c562592000-09-13 00:12:37 +0000730See section~\ref{platform-variations} for information on supplying
731command-line arguments to the setup script with MacPython.
Greg Ward29576562000-03-18 15:11:50 +0000732
733
734\section{Custom Installation}
Greg Warde78298a2000-04-28 17:12:24 +0000735\label{custom-install}
Greg Ward29576562000-03-18 15:11:50 +0000736
737Sometimes, the alternate installation schemes described in
Greg Warde78298a2000-04-28 17:12:24 +0000738section~\ref{alt-install} just don't do what you want. You might
Greg Ward29576562000-03-18 15:11:50 +0000739want to tweak just one or two directories while keeping everything under
740the same base directory, or you might want to completely redefine the
741installation scheme. In either case, you're creating a \emph{custom
742 installation scheme}.
743
744You probably noticed the column of ``override options'' in the tables
745describing the alternate installation schemes above. Those options are
746how you define a custom installation scheme. These override options can
747be relative, absolute, or explicitly defined in terms of one of the
748installation base directories. (There are two installation base
749directories, and they are normally the same---they only differ when you
Fred Drakeeff9a872000-10-26 16:41:03 +0000750use the \UNIX{} ``prefix scheme'' and supply different
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000751\longprogramopt{prefix} and \longprogramopt{exec-prefix} options.)
Greg Ward29576562000-03-18 15:11:50 +0000752
753For example, say you're installing a module distribution to your home
Fred Drakeeff9a872000-10-26 16:41:03 +0000754directory under \UNIX---but you want scripts to go in
Greg Ward4eaa3bf2000-04-19 22:44:25 +0000755\file{\textasciitilde/scripts} rather than \file{\textasciitilde/bin}.
756As you might expect, you can override this directory with the
757\longprogramopt{install-scripts} option; in this case, it makes most
758sense to supply a relative path, which will be interpreted relative to
759the installation base directory (your home directory, in this case):
Fred Drakea9a83e92001-03-01 18:37:52 +0000760
Greg Ward29576562000-03-18 15:11:50 +0000761\begin{verbatim}
Greg Ward19c67f82000-06-24 01:33:16 +0000762python setup.py install --home=~ --install-scripts=scripts
Greg Ward29576562000-03-18 15:11:50 +0000763\end{verbatim}
764
Fred Drakeeff9a872000-10-26 16:41:03 +0000765Another \UNIX{} example: suppose your Python installation was built and
Greg Ward29576562000-03-18 15:11:50 +0000766installed with a prefix of \file{/usr/local/python}, so under a standard
767installation scripts will wind up in \file{/usr/local/python/bin}. If
768you want them in \file{/usr/local/bin} instead, you would supply this
Greg Warda021aca2000-04-19 22:34:11 +0000769absolute directory for the \longprogramopt{install-scripts} option:
Fred Drakea9a83e92001-03-01 18:37:52 +0000770
Greg Ward29576562000-03-18 15:11:50 +0000771\begin{verbatim}
772python setup.py install --install-scripts=/usr/local/bin
773\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000774
Greg Ward29576562000-03-18 15:11:50 +0000775(This performs an installation using the ``prefix scheme,'' where the
776prefix is whatever your Python interpreter was installed with---
777\file{/usr/local/python} in this case.)
778
779If you maintain Python on Windows, you might want third-party modules to
780live in a subdirectory of \filevar{prefix}, rather than right in
781\filevar{prefix} itself. This is almost as easy as customizing the
782script installation directory---you just have to remember that there are
783two types of modules to worry about, pure modules and non-pure modules
784(i.e., modules from a non-pure distribution). For example:
Fred Drakea9a83e92001-03-01 18:37:52 +0000785
Greg Ward29576562000-03-18 15:11:50 +0000786\begin{verbatim}
787python setup.py install --install-purelib=Site --install-platlib=Site
788\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000789
Greg Ward29576562000-03-18 15:11:50 +0000790The specified installation directories are relative to \filevar{prefix}.
791Of course, you also have to ensure that these directories are in
792Python's module search path, e.g. by putting a \file{.pth} file in
Fred Drake74f1a562001-09-25 15:12:41 +0000793\filevar{prefix} (\XXX{should have a section describing \file{.pth} files and
Greg Ward6002ffc2000-04-09 20:54:50 +0000794 cross-ref it here}).
Greg Ward29576562000-03-18 15:11:50 +0000795
796If you want to define an entire installation scheme, you just have to
797supply all of the installation directory options. The recommended way
Greg Wardc392caa2000-04-11 02:00:26 +0000798to do this is to supply relative paths; for example, if you want to
799maintain all Python module-related files under \file{python} in your
800home directory, and you want a separate directory for each platform that
801you use your home directory from, you might define the following
Greg Ward29576562000-03-18 15:11:50 +0000802installation scheme:
Fred Drakea9a83e92001-03-01 18:37:52 +0000803
Greg Ward29576562000-03-18 15:11:50 +0000804\begin{verbatim}
Greg Wardc392caa2000-04-11 02:00:26 +0000805python setup.py install --home=~ \
Greg Ward29576562000-03-18 15:11:50 +0000806 --install-purelib=python/lib \
807 --install-platlib=python/lib.$PLAT \
808 --install-scripts=python/scripts
809 --install-data=python/data
810\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000811% $ % -- bow to font-lock
812
Greg Ward29576562000-03-18 15:11:50 +0000813or, equivalently,
Fred Drakea9a83e92001-03-01 18:37:52 +0000814
Greg Ward29576562000-03-18 15:11:50 +0000815\begin{verbatim}
816python setup.py install --home=~/python \
817 --install-purelib=lib \
Greg Ward19c67f82000-06-24 01:33:16 +0000818 --install-platlib='lib.$PLAT' \
Greg Ward29576562000-03-18 15:11:50 +0000819 --install-scripts=scripts
820 --install-data=data
821\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000822% $ % -- bow to font-lock
823
Greg Ward29576562000-03-18 15:11:50 +0000824\code{\$PLAT} is not (necessarily) an environment variable---it will be
825expanded by the Distutils as it parses your command line options (just
826as it does when parsing your configuration file(s)).
827
828Obviously, specifying the entire installation scheme every time you
829install a new module distribution would be very tedious. Thus, you can
830put these options into your Distutils config file (see
Greg Warde78298a2000-04-28 17:12:24 +0000831section~\ref{config-files}):
Fred Drakea9a83e92001-03-01 18:37:52 +0000832
Greg Ward169f91b2000-03-10 01:57:51 +0000833\begin{verbatim}
834[install]
Greg Ward29576562000-03-18 15:11:50 +0000835install-base=$HOME
836install-purelib=python/lib
837install-platlib=python/lib.$PLAT
838install-scripts=python/scripts
839install-data=python/data
Greg Ward169f91b2000-03-10 01:57:51 +0000840\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000841
Greg Ward29576562000-03-18 15:11:50 +0000842or, equivalently,
Fred Drakea9a83e92001-03-01 18:37:52 +0000843
Greg Ward169f91b2000-03-10 01:57:51 +0000844\begin{verbatim}
845[install]
Greg Ward29576562000-03-18 15:11:50 +0000846install-base=$HOME/python
847install-purelib=lib
848install-platlib=lib.$PLAT
849install-scripts=scripts
850install-data=data
Greg Ward169f91b2000-03-10 01:57:51 +0000851\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000852
Greg Ward29576562000-03-18 15:11:50 +0000853Note that these two are \emph{not} equivalent if you supply a different
854installation base directory when you run the setup script. For example,
Fred Drakea9a83e92001-03-01 18:37:52 +0000855
Greg Ward7c1e5f62000-03-10 01:56:58 +0000856\begin{verbatim}
Greg Ward29576562000-03-18 15:11:50 +0000857python setup.py --install-base=/tmp
Greg Ward7c1e5f62000-03-10 01:56:58 +0000858\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000859
Greg Ward29576562000-03-18 15:11:50 +0000860would install pure modules to \filevar{/tmp/python/lib} in the first
861case, and to \filevar{/tmp/lib} in the second case. (For the second
862case, you probably want to supply an installation base of
863\file{/tmp/python}.)
Greg Ward169f91b2000-03-10 01:57:51 +0000864
Greg Ward29576562000-03-18 15:11:50 +0000865You probably noticed the use of \code{\$HOME} and \code{\$PLAT} in the
866sample configuration file input. These are Distutils configuration
867variables, which bear a strong resemblance to environment variables. In
Greg Wardc392caa2000-04-11 02:00:26 +0000868fact, you can use environment variables in config files---on platforms
869that have such a notion---but the Distutils additionally define a few
870extra variables that may not be in your environment, such as
871\code{\$PLAT}. (And of course, you can only use the configuration
872variables supplied by the Distutils on systems that don't have
Fred Drake74f1a562001-09-25 15:12:41 +0000873environment variables, such as Mac OS (\XXX{true?}).) See
Greg Warde78298a2000-04-28 17:12:24 +0000874section~\ref{config-files} for details.
Greg Ward7c1e5f62000-03-10 01:56:58 +0000875
Fred Drake74f1a562001-09-25 15:12:41 +0000876\XXX{need some Windows and Mac OS examples---when would custom
Greg Ward6002ffc2000-04-09 20:54:50 +0000877 installation schemes be needed on those platforms?}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000878
Greg Ward7c1e5f62000-03-10 01:56:58 +0000879
Greg Ward6002ffc2000-04-09 20:54:50 +0000880\section{Distutils Configuration Files}
Greg Warde78298a2000-04-28 17:12:24 +0000881\label{config-files}
Greg Ward7c1e5f62000-03-10 01:56:58 +0000882
Greg Ward7ef2ba72000-10-22 01:40:08 +0000883As mentioned above, you can use Distutils configuration files to record
884personal or site preferences for any Distutils options. That is, any
885option to any command can be stored in one of two or three (depending on
886your platform) configuration files, which will be consulted before the
887command-line is parsed. This means that configuration files will
888override default values, and the command-line will in turn override
889configuration files. Furthermore, if multiple configuration files
890apply, values from ``earlier'' files are overridden by ``later'' files.
891
892
893\subsection{Location and names of config files}
Fred Drake0bbaa512001-01-24 16:39:35 +0000894\label{config-filenames}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000895
896The names and locations of the configuration files vary slightly across
Fred Drakeeff9a872000-10-26 16:41:03 +0000897platforms. On \UNIX, the three configuration files (in the order they
Greg Ward7ef2ba72000-10-22 01:40:08 +0000898are processed) are:
899\begin{tableiii}{l|l|c}{textrm}
900 {Type of file}{Location and filename}{Notes}
901 \lineiii{system}{\filenq{\filevar{prefix}/lib/python\filevar{ver}/distutils/pydistutils.cfg}}{(1)}
902 \lineiii{personal}{\filenq{\$HOME/.pydistutils.cfg}}{(2)}
903 \lineiii{local}{\filenq{setup.cfg}}{(3)}
904\end{tableiii}
905
906On Windows, the configuration files are:
907\begin{tableiii}{l|l|c}{textrm}
908 {Type of file}{Location and filename}{Notes}
909 \lineiii{system}{\filenq{\filevar{prefix}\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}pydistutils.cfg}}{(4)}
910 \lineiii{personal}{\filenq{\%HOME\textbackslash{}pydistutils.cfg}}{(5)}
911 \lineiii{local}{\filenq{setup.cfg}}{(3)}
912\end{tableiii}
913
Fred Drake74f1a562001-09-25 15:12:41 +0000914And on Mac OS, they are:
Greg Ward7ef2ba72000-10-22 01:40:08 +0000915\begin{tableiii}{l|l|c}{textrm}
916 {Type of file}{Location and filename}{Notes}
917 \lineiii{system}{\filenq{\filevar{prefix}:Lib:distutils:pydistutils.cfg}}{(6)}
918 \lineiii{personal}{N/A}{}
919 \lineiii{local}{\filenq{setup.cfg}}{(3)}
920\end{tableiii}
921
922\noindent Notes:
923\begin{description}
924\item[(1)] Strictly speaking, the system-wide configuration file lives
925 in the directory where the Distutils are installed; under Python 1.6
Fred Drakeeff9a872000-10-26 16:41:03 +0000926 and later on \UNIX, this is as shown. For Python 1.5.2, the Distutils
Greg Ward7ef2ba72000-10-22 01:40:08 +0000927 will normally be installed to
928 \file{\filevar{prefix}/lib/site-packages/python1.5/distutils},
929 so the system configuration file should be put there under Python
930 1.5.2.
Fred Drakeeff9a872000-10-26 16:41:03 +0000931\item[(2)] On \UNIX, if the \envvar{HOME} environment variable is not
Greg Ward7ef2ba72000-10-22 01:40:08 +0000932 defined, the user's home directory will be determined with the
933 \function{getpwuid()} function from the standard \module{pwd} module.
934\item[(3)] I.e., in the current directory (usually the location of the
935 setup script).
936\item[(4)] (See also note (1).) Under Python 1.6 and later, Python's
937 default ``installation prefix'' is \file{C:\textbackslash{}Python}, so
938 the system configuration file is normally
939 \file{C:\textbackslash{}Python\textbackslash{}Lib\textbackslash{}distutils\textbackslash{}pydistutils.cfg}.
940 Under Python 1.5.2, the default prefix was
941 \file{C:\textbackslash{}Program~Files\textbackslash{}Python}, and the
942 Distutils were not part of the standard library---so the system
943 configuration file would be
944 \file{C:\textbackslash{}Program~Files\textbackslash{}Python\textbackslash{}distutils\textbackslash{}pydistutils.cfg}
945 in a standard Python 1.5.2 installation under Windows.
946\item[(5)] On Windows, if the \envvar{HOME} environment variable is not
947 defined, no personal configuration file will be found or used. (In
948 other words, the Distutils make no attempt to guess your home
949 directory on Windows.)
950\item[(6)] (See also notes (1) and (4).) The default installation
951 prefix is just \file{Python:}, so under Python 1.6 and later this is
952 normally\file{Python:Lib:distutils:pydistutils.cfg}. (The Distutils
Fred Drake74f1a562001-09-25 15:12:41 +0000953 don't work very well with Python 1.5.2 under Mac OS. \XXX{true?})
Greg Ward7ef2ba72000-10-22 01:40:08 +0000954\end{description}
955
956
957\subsection{Syntax of config files}
Fred Drake0bbaa512001-01-24 16:39:35 +0000958\label{config-syntax}
Greg Ward7ef2ba72000-10-22 01:40:08 +0000959
960The Distutils configuration files all have the same syntax. The config
961files are grouped into sections; there is one section for each Distutils
962command, plus a \code{global} section for global options that affect
963every command. Each section consists of one option per line, specified
964like \code{option=value}.
965
966For example, the following is a complete config file that just forces
967all commands to run quietly by default:
Fred Drakea9a83e92001-03-01 18:37:52 +0000968
Greg Ward7ef2ba72000-10-22 01:40:08 +0000969\begin{verbatim}
970[global]
971verbose=0
972\end{verbatim}
973
974If this is installed as the system config file, it will affect all
975processing of any Python module distribution by any user on the current
976system. If it is installed as your personal config file (on systems
977that support them), it will affect only module distributions processed
978by you. And if it is used as the \file{setup.cfg} for a particular
979module distribution, it affects only that distribution.
980
981You could override the default ``build base'' directory and make the
982\command{build*} commands always forcibly rebuild all files with the
983following:
Fred Drakea9a83e92001-03-01 18:37:52 +0000984
Greg Ward7ef2ba72000-10-22 01:40:08 +0000985\begin{verbatim}
986[build]
987build-base=blib
988force=1
989\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000990
Greg Ward7ef2ba72000-10-22 01:40:08 +0000991which corresponds to the command-line arguments
Fred Drakea9a83e92001-03-01 18:37:52 +0000992
Greg Ward7ef2ba72000-10-22 01:40:08 +0000993\begin{verbatim}
994python setup.py build --build-base=blib --force
995\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +0000996
Greg Ward7ef2ba72000-10-22 01:40:08 +0000997except that including the \command{build} command on the command-line
998means that command will be run. Including a particular command in
999config files has no such implication; it only means that if the command
1000is run, the options in the config file will apply. (Or if other
1001commands that derive values from it are run, they will use the values in
1002the config file.)
1003
1004You can find out the complete list of options for any command using the
1005\longprogramopt{help} option, e.g.:
Fred Drakea9a83e92001-03-01 18:37:52 +00001006
Greg Ward7ef2ba72000-10-22 01:40:08 +00001007\begin{verbatim}
1008python setup.py build --help
1009\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +00001010
Greg Ward7ef2ba72000-10-22 01:40:08 +00001011and you can find out the complete list of global options by using
1012\longprogramopt{help} without a command:
Fred Drakea9a83e92001-03-01 18:37:52 +00001013
Greg Ward7ef2ba72000-10-22 01:40:08 +00001014\begin{verbatim}
1015python setup.py --help
1016\end{verbatim}
Fred Drakea9a83e92001-03-01 18:37:52 +00001017
Greg Ward7ef2ba72000-10-22 01:40:08 +00001018See also the ``Reference'' section of the ``Distributing Python
1019Modules'' manual.
1020
Greg Ward6002ffc2000-04-09 20:54:50 +00001021
Fred Drakea9a83e92001-03-01 18:37:52 +00001022%\section{Pre-Distutils Conventions}
1023%\label{pre-distutils}
Greg Ward6002ffc2000-04-09 20:54:50 +00001024
1025
Fred Drakea9a83e92001-03-01 18:37:52 +00001026%\subsection{The Makefile.pre.in file}
1027%\label{makefile-pre-in}
Greg Ward6002ffc2000-04-09 20:54:50 +00001028
1029
Fred Drakea9a83e92001-03-01 18:37:52 +00001030%\subsection{Installing modules manually}
1031%\label{manual-install}
Greg Ward6002ffc2000-04-09 20:54:50 +00001032
1033
Greg Ward7c1e5f62000-03-10 01:56:58 +00001034\end{document}