<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Installing Python Modules — Python v2.6.6 documentation</title>
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '2.6.6',
COLLAPSE_MODINDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="Search within Python v2.6.6 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Python v2.6.6 documentation" href="../index.html" />
<link rel="next" title="Documenting Python" href="../documenting/index.html" />
<link rel="prev" title="11. API Reference" href="../distutils/apiref.html" />
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li class="right" >
<a href="../documenting/index.html" title="Documenting Python"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="../distutils/apiref.html" title="11. API Reference"
accesskey="P">previous</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="../index.html">Python v2.6.6 documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="installing-python-modules">
<span id="install-index"></span><h1>Installing Python Modules<a class="headerlink" href="#installing-python-modules" title="Permalink to this headline">¶</a></h1>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">Author:</th><td class="field-body">Greg Ward</td>
</tr>
<tr class="field"><th class="field-name">Release:</th><td class="field-body">2.6</td>
</tr>
<tr class="field"><th class="field-name">Date:</th><td class="field-body">July 20, 2011</td>
</tr>
</tbody>
</table>
<div class="topic">
<p class="topic-title first">Abstract</p>
<p>This document describes the Python Distribution Utilities (“Distutils”) from the
end-user’s point-of-view, describing how to extend the capabilities of a
standard Python installation by building and installing third-party Python
modules and extensions.</p>
</div>
<div class="section" id="introduction">
<span id="inst-intro"></span><h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
<p>Although Python’s extensive standard library covers many programming needs,
there often comes a time when you need to add some new functionality to your
Python installation in the form of third-party modules. This might be necessary
to support your own programming, or to support an application that you want to
use and that happens to be written in Python.</p>
<p>In the past, there has been little support for adding third-party modules to an
existing Python installation. With the introduction of the Python Distribution
Utilities (Distutils for short) in Python 2.0, this changed.</p>
<p>This document is aimed primarily at the people who need to install third-party
Python modules: end-users and system administrators who just need to get some
Python application running, and existing Python programmers who want to add some
new goodies to their toolbox. You don’t need to know Python to read this
document; there will be some brief forays into using Python’s interactive mode
to explore your installation, but that’s it. If you’re looking for information
on how to distribute your own Python modules so that others may use them, see
the <a class="reference external" href="../distutils/index.html#distutils-index"><em>Distributing Python Modules</em></a> manual.</p>
<div class="section" id="best-case-trivial-installation">
<span id="inst-trivial-install"></span><h3>Best case: trivial installation<a class="headerlink" href="#best-case-trivial-installation" title="Permalink to this headline">¶</a></h3>
<p>In the best case, someone will have prepared a special version of the module
distribution you want to install that is targeted specifically at your platform
and is installed just like any other software on your platform. For example,
the module developer might make an executable installer available for Windows
users, an RPM package for users of RPM-based Linux systems (Red Hat, SuSE,
Mandrake, and many others), a Debian package for users of Debian-based Linux
systems, and so forth.</p>
<p>In that case, you would download the installer appropriate to your platform and
do the obvious thing with it: run it if it’s an executable installer, <tt class="docutils literal"><span class="pre">rpm</span>
<span class="pre">--install</span></tt> it if it’s an RPM, etc. You don’t need to run Python or a setup
script, you don’t need to compile anything—you might not even need to read any
instructions (although it’s always a good idea to do so anyways).</p>
<p>Of course, things will not always be that easy. You might be interested in a
module distribution that doesn’t have an easy-to-use installer for your
platform. In that case, you’ll have to start with the source distribution
released by the module’s author/maintainer. Installing from a source
distribution is not too hard, as long as the modules are packaged in the
standard way. The bulk of this document is about building and installing
modules from standard source distributions.</p>
</div>
<div class="section" id="the-new-standard-distutils">
<span id="inst-new-standard"></span><h3>The new standard: Distutils<a class="headerlink" href="#the-new-standard-distutils" title="Permalink to this headline">¶</a></h3>
<p>If you download a module source distribution, you can tell pretty quickly if it
was packaged and distributed in the standard way, i.e. using the Distutils.
First, the distribution’s name and version number will be featured prominently
in the name of the downloaded archive, e.g. <tt class="docutils literal"><span class="pre">foo-1.0.tar.gz</span></tt> or
<tt class="docutils literal"><span class="pre">widget-0.9.7.zip</span></tt>. Next, the archive will unpack into a similarly-named
directory: <tt class="docutils literal"><span class="pre">foo-1.0</span></tt> or <tt class="docutils literal"><span class="pre">widget-0.9.7</span></tt>. Additionally, the
distribution will contain a setup script <tt class="docutils literal"><span class="pre">setup.py</span></tt>, and a file named
<tt class="docutils literal"><span class="pre">README.txt</span></tt> or possibly just <tt class="docutils literal"><span class="pre">README</span></tt>, which should explain that
building and installing the module distribution is a simple matter of running</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install
</pre></div>
</div>
<p>If all these things are true, then you already know how to build and install the
modules you’ve just downloaded: Run the command above. Unless you need to
install things in a non-standard way or customize the build process, you don’t
really need this manual. Or rather, the above command is everything you need to
get out of this manual.</p>
</div>
</div>
<div class="section" id="standard-build-and-install">
<span id="inst-standard-install"></span><h2>Standard Build and Install<a class="headerlink" href="#standard-build-and-install" title="Permalink to this headline">¶</a></h2>
<p>As described in section <a class="reference internal" href="#inst-new-standard"><em>The new standard: Distutils</em></a>, building and installing a module
distribution using the Distutils is usually one simple command:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install
</pre></div>
</div>
<p>On Unix, you’d run this command from a shell prompt; on Windows, you have to
open a command prompt window (“DOS box”) and do it there; on Mac OS X, you open
a <strong>Terminal</strong> window to get a shell prompt.</p>
<div class="section" id="platform-variations">
<span id="inst-platform-variations"></span><h3>Platform variations<a class="headerlink" href="#platform-variations" title="Permalink to this headline">¶</a></h3>
<p>You should always run the setup command from the distribution root directory,
i.e. the top-level subdirectory that the module source distribution unpacks
into. For example, if you’ve just downloaded a module source distribution
<tt class="docutils literal"><span class="pre">foo-1.0.tar.gz</span></tt> onto a Unix system, the normal thing to do is:</p>
<div class="highlight-none"><div class="highlight"><pre>gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
cd foo-1.0
python setup.py install
</pre></div>
</div>
<p>On Windows, you’d probably download <tt class="docutils literal"><span class="pre">foo-1.0.zip</span></tt>. If you downloaded the
archive file to <tt class="docutils literal"><span class="pre">C:\Temp</span></tt>, then it would unpack into
<tt class="docutils literal"><span class="pre">C:\Temp\foo-1.0</span></tt>; you can use either a archive manipulator with a
graphical user interface (such as WinZip) or a command-line tool (such as
<strong>unzip</strong> or <strong>pkunzip</strong>) to unpack the archive. Then, open a
command prompt window (“DOS box”), and run:</p>
<div class="highlight-none"><div class="highlight"><pre>cd c:\Temp\foo-1.0
python setup.py install
</pre></div>
</div>
</div>
<div class="section" id="splitting-the-job-up">
<span id="inst-splitting-up"></span><h3>Splitting the job up<a class="headerlink" href="#splitting-the-job-up" title="Permalink to this headline">¶</a></h3>
<p>Running <tt class="docutils literal"><span class="pre">setup.py</span> <span class="pre">install</span></tt> builds and installs all modules in one run. If you
prefer to work incrementally—especially useful if you want to customize the
build process, or if things are going wrong—you can use the setup script to do
one thing at a time. This is particularly helpful when the build and install
will be done by different users—for example, you might want to build a module
distribution and hand it off to a system administrator for installation (or do
it yourself, with super-user privileges).</p>
<p>For example, you can build everything in one step, and then install everything
in a second step, by invoking the setup script twice:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build
python setup.py install
</pre></div>
</div>
<p>If you do this, you will notice that running the <strong>install</strong> command
first runs the <strong>build</strong> command, which—in this case—quickly notices
that it has nothing to do, since everything in the <tt class="docutils literal"><span class="pre">build</span></tt> directory is
up-to-date.</p>
<p>You may not need this ability to break things down often if all you do is
install modules downloaded off the ‘net, but it’s very handy for more advanced
tasks. If you get into distributing your own Python modules and extensions,
you’ll run lots of individual Distutils commands on their own.</p>
</div>
<div class="section" id="how-building-works">
<span id="inst-how-build-works"></span><h3>How building works<a class="headerlink" href="#how-building-works" title="Permalink to this headline">¶</a></h3>
<p>As implied above, the <strong>build</strong> command is responsible for putting the
files to install into a <em>build directory</em>. By default, this is <tt class="docutils literal"><span class="pre">build</span></tt>
under the distribution root; if you’re excessively concerned with speed, or want
to keep the source tree pristine, you can change the build directory with the
<em class="xref">--build-base</em> option. For example:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build --build-base=/tmp/pybuild/foo-1.0
</pre></div>
</div>
<p>(Or you could do this permanently with a directive in your system or personal
Distutils configuration file; see section <a class="reference internal" href="#inst-config-files"><em>Distutils Configuration Files</em></a>.) Normally, this
isn’t necessary.</p>
<p>The default layout for the build tree is as follows:</p>
<div class="highlight-none"><div class="highlight"><pre>--- build/ --- lib/
or
--- build/ --- lib.<plat>/
temp.<plat>/
</pre></div>
</div>
<p>where <tt class="docutils literal"><span class="pre"><plat></span></tt> expands to a brief description of the current OS/hardware
platform and Python version. The first form, with just a <tt class="docutils literal"><span class="pre">lib</span></tt> directory,
is used for “pure module distributions”—that is, module distributions that
include only pure Python modules. If a module distribution contains any
extensions (modules written in C/C++), then the second form, with two <tt class="docutils literal"><span class="pre"><plat></span></tt>
directories, is used. In that case, the <tt class="docutils literal"><span class="pre">temp.</span><em><span class="pre">plat</span></em></tt> directory holds
temporary files generated by the compile/link process that don’t actually get
installed. In either case, the <tt class="docutils literal"><span class="pre">lib</span></tt> (or <tt class="docutils literal"><span class="pre">lib.</span><em><span class="pre">plat</span></em></tt>) directory
contains all Python modules (pure Python and extensions) that will be installed.</p>
<p>In the future, more directories will be added to handle Python scripts,
documentation, binary executables, and whatever else is needed to handle the job
of installing Python modules and applications.</p>
</div>
<div class="section" id="how-installation-works">
<span id="inst-how-install-works"></span><h3>How installation works<a class="headerlink" href="#how-installation-works" title="Permalink to this headline">¶</a></h3>
<p>After the <strong>build</strong> command runs (whether you run it explicitly, or the
<strong>install</strong> command does it for you), the work of the <strong>install</strong>
command is relatively simple: all it has to do is copy everything under
<tt class="docutils literal"><span class="pre">build/lib</span></tt> (or <tt class="docutils literal"><span class="pre">build/lib.</span><em><span class="pre">plat</span></em></tt>) to your chosen installation
directory.</p>
<p>If you don’t choose an installation directory—i.e., if you just run <tt class="docutils literal"><span class="pre">setup.py</span>
<span class="pre">install</span></tt>—then the <strong>install</strong> command installs to the standard
location for third-party Python modules. This location varies by platform and
by how you built/installed Python itself. On Unix (and Mac OS X, which is also
Unix-based), it also depends on whether the module distribution being installed
is pure Python or contains extensions (“non-pure”):</p>
<table border="1" class="docutils">
<colgroup>
<col width="13%" />
<col width="42%" />
<col width="39%" />
<col width="6%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Platform</th>
<th class="head">Standard installation location</th>
<th class="head">Default value</th>
<th class="head">Notes</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Unix (pure)</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></tt></td>
<td><tt class="docutils literal"><span class="pre">/usr/local/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></tt></td>
<td>(1)</td>
</tr>
<tr><td>Unix (non-pure)</td>
<td><tt class="docutils literal"><em><span class="pre">exec-prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></tt></td>
<td><tt class="docutils literal"><span class="pre">/usr/local/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></tt></td>
<td>(1)</td>
</tr>
<tr><td>Windows</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em></tt></td>
<td><tt class="docutils literal"><span class="pre">C:\Python</span></tt></td>
<td>(2)</td>
</tr>
</tbody>
</table>
<p>Notes:</p>
<ol class="arabic simple">
<li>Most Linux distributions include Python as a standard part of the system, so
<tt class="docutils literal"><em><span class="pre">prefix</span></em></tt> and <tt class="docutils literal"><em><span class="pre">exec-prefix</span></em></tt> are usually both <tt class="docutils literal"><span class="pre">/usr</span></tt> on
Linux. If you build Python yourself on Linux (or any Unix-like system), the
default <tt class="docutils literal"><em><span class="pre">prefix</span></em></tt> and <tt class="docutils literal"><em><span class="pre">exec-prefix</span></em></tt> are <tt class="docutils literal"><span class="pre">/usr/local</span></tt>.</li>
<li>The default installation directory on Windows was <tt class="docutils literal"><span class="pre">C:\Program</span>
<span class="pre">Files\Python</span></tt> under Python 1.6a1, 1.5.2, and earlier.</li>
</ol>
<p><tt class="docutils literal"><em><span class="pre">prefix</span></em></tt> and <tt class="docutils literal"><em><span class="pre">exec-prefix</span></em></tt> stand for the directories that Python
is installed to, and where it finds its libraries at run-time. They are always
the same under Windows, and very often the same under Unix and Mac OS X. You
can find out what your Python installation uses for <tt class="docutils literal"><em><span class="pre">prefix</span></em></tt> and
<tt class="docutils literal"><em><span class="pre">exec-prefix</span></em></tt> by running Python in interactive mode and typing a few
simple commands. Under Unix, just type <tt class="docutils literal"><span class="pre">python</span></tt> at the shell prompt. Under
Windows, choose <em>Start ‣ Programs ‣ Python X.Y ‣
Python (command line)</em>. Once the interpreter is started, you type Python code
at the prompt. For example, on my Linux system, I type the three Python
statements shown below, and get the output as shown, to find out my
<tt class="docutils literal"><em><span class="pre">prefix</span></em></tt> and <tt class="docutils literal"><em><span class="pre">exec-prefix</span></em></tt>:</p>
<div class="highlight-none"><div class="highlight"><pre>Python 2.4 (#26, Aug 7 2004, 17:19:02)
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.prefix
'/usr'
>>> sys.exec_prefix
'/usr'
</pre></div>
</div>
<p>If you don’t want to install modules to the standard location, or if you don’t
have permission to write there, then you need to read about alternate
installations in section <a class="reference internal" href="#inst-alt-install"><em>Alternate Installation</em></a>. If you want to customize your
installation directories more heavily, see section <a class="reference internal" href="#inst-custom-install"><em>Custom Installation</em></a> on
custom installations.</p>
</div>
</div>
<div class="section" id="alternate-installation">
<span id="inst-alt-install"></span><h2>Alternate Installation<a class="headerlink" href="#alternate-installation" title="Permalink to this headline">¶</a></h2>
<p>Often, it is necessary or desirable to install modules to a location other than
the standard location for third-party Python modules. For example, on a Unix
system you might not have permission to write to the standard third-party module
directory. Or you might wish to try out a module before making it a standard
part of your local Python installation. This is especially true when upgrading
a distribution already present: you want to make sure your existing base of
scripts still works with the new version before actually upgrading.</p>
<p>The Distutils <strong>install</strong> command is designed to make installing module
distributions to an alternate location simple and painless. The basic idea is
that you supply a base directory for the installation, and the
<strong>install</strong> command picks a set of directories (called an <em>installation
scheme</em>) under this base directory in which to install files. The details
differ across platforms, so read whichever of the following sections applies to
you.</p>
<div class="section" id="alternate-installation-the-home-scheme">
<span id="inst-alt-install-prefix"></span><h3>Alternate installation: the home scheme<a class="headerlink" href="#alternate-installation-the-home-scheme" title="Permalink to this headline">¶</a></h3>
<p>The idea behind the “home scheme” is that you build and maintain a personal
stash of Python modules. This scheme’s name is derived from the idea of a
“home” directory on Unix, since it’s not unusual for a Unix user to make their
home directory have a layout similar to <tt class="docutils literal"><span class="pre">/usr/</span></tt> or <tt class="docutils literal"><span class="pre">/usr/local/</span></tt>.
This scheme can be used by anyone, regardless of the operating system they
are installing for.</p>
<p>Installing a new module distribution is as simple as</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --home=<dir>
</pre></div>
</div>
<p>where you can supply any directory you like for the <em class="xref">--home</em> option. On
Unix, lazy typists can just type a tilde (<tt class="docutils literal"><span class="pre">~</span></tt>); the <strong>install</strong> command
will expand this to your home directory:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --home=~
</pre></div>
</div>
<p>The <em class="xref">--home</em> option defines the installation base directory. Files are
installed to the following directories under the installation base as follows:</p>
<table border="1" class="docutils">
<colgroup>
<col width="35%" />
<col width="31%" />
<col width="34%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Type of file</th>
<th class="head">Installation Directory</th>
<th class="head">Override option</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>pure module distribution</td>
<td><tt class="docutils literal"><em><span class="pre">home</span></em><span class="pre">/lib/python</span></tt></td>
<td><em class="xref">--install-purelib</em></td>
</tr>
<tr><td>non-pure module distribution</td>
<td><tt class="docutils literal"><em><span class="pre">home</span></em><span class="pre">/lib/python</span></tt></td>
<td><em class="xref">--install-platlib</em></td>
</tr>
<tr><td>scripts</td>
<td><tt class="docutils literal"><em><span class="pre">home</span></em><span class="pre">/bin</span></tt></td>
<td><em class="xref">--install-scripts</em></td>
</tr>
<tr><td>data</td>
<td><tt class="docutils literal"><em><span class="pre">home</span></em><span class="pre">/share</span></tt></td>
<td><em class="xref">--install-data</em></td>
</tr>
</tbody>
</table>
<p class="versionchanged">
<span class="versionmodified">Changed in version 2.4: </span>The <em class="xref">--home</em> option used to be supported only on Unix.</p>
</div>
<div class="section" id="alternate-installation-unix-the-prefix-scheme">
<span id="inst-alt-install-home"></span><h3>Alternate installation: Unix (the prefix scheme)<a class="headerlink" href="#alternate-installation-unix-the-prefix-scheme" title="Permalink to this headline">¶</a></h3>
<p>The “prefix scheme” is useful when you wish to use one Python installation to
perform the build/install (i.e., to run the setup script), but install modules
into the third-party module directory of a different Python installation (or
something that looks like a different Python installation). If this sounds a
trifle unusual, it is—that’s why the “home scheme” comes first. However,
there are at least two known cases where the prefix scheme will be useful.</p>
<p>First, consider that many Linux distributions put Python in <tt class="docutils literal"><span class="pre">/usr</span></tt>, rather
than the more traditional <tt class="docutils literal"><span class="pre">/usr/local</span></tt>. This is entirely appropriate,
since in those cases Python is part of “the system” rather than a local add-on.
However, if you are installing Python modules from source, you probably want
them to go in <tt class="docutils literal"><span class="pre">/usr/local/lib/python2.</span><em><span class="pre">X</span></em></tt> rather than
<tt class="docutils literal"><span class="pre">/usr/lib/python2.</span><em><span class="pre">X</span></em></tt>. This can be done with</p>
<div class="highlight-none"><div class="highlight"><pre>/usr/bin/python setup.py install --prefix=/usr/local
</pre></div>
</div>
<p>Another possibility is a network filesystem where the name used to write to a
remote directory is different from the name used to read it: for example, the
Python interpreter accessed as <tt class="docutils literal"><span class="pre">/usr/local/bin/python</span></tt> might search for
modules in <tt class="docutils literal"><span class="pre">/usr/local/lib/python2.</span><em><span class="pre">X</span></em></tt>, but those modules would have to
be installed to, say, <tt class="docutils literal"><span class="pre">/mnt/</span><em><span class="pre">@server</span></em><span class="pre">/export/lib/python2.</span><em><span class="pre">X</span></em></tt>. This could
be done with</p>
<div class="highlight-none"><div class="highlight"><pre>/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
</pre></div>
</div>
<p>In either case, the <em class="xref">--prefix</em> option defines the installation base, and
the <em class="xref">--exec-prefix</em> option defines the platform-specific installation
base, which is used for platform-specific files. (Currently, this just means
non-pure module distributions, but could be expanded to C libraries, binary
executables, etc.) If <em class="xref">--exec-prefix</em> is not supplied, it defaults to
<em class="xref">--prefix</em>. Files are installed as follows:</p>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="47%" />
<col width="26%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Type of file</th>
<th class="head">Installation Directory</th>
<th class="head">Override option</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>pure module distribution</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></tt></td>
<td><em class="xref">--install-purelib</em></td>
</tr>
<tr><td>non-pure module distribution</td>
<td><tt class="docutils literal"><em><span class="pre">exec-prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X.Y</span></em><span class="pre">/site-packages</span></tt></td>
<td><em class="xref">--install-platlib</em></td>
</tr>
<tr><td>scripts</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/bin</span></tt></td>
<td><em class="xref">--install-scripts</em></td>
</tr>
<tr><td>data</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/share</span></tt></td>
<td><em class="xref">--install-data</em></td>
</tr>
</tbody>
</table>
<p>There is no requirement that <em class="xref">--prefix</em> or <em class="xref">--exec-prefix</em>
actually point to an alternate Python installation; if the directories listed
above do not already exist, they are created at installation time.</p>
<p>Incidentally, the real reason the prefix scheme is important is simply that a
standard Unix installation uses the prefix scheme, but with <em class="xref">--prefix</em>
and <em class="xref">--exec-prefix</em> supplied by Python itself as <tt class="docutils literal"><span class="pre">sys.prefix</span></tt> and
<tt class="docutils literal"><span class="pre">sys.exec_prefix</span></tt>. Thus, you might think you’ll never use the prefix scheme,
but every time you run <tt class="docutils literal"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">install</span></tt> without any other options,
you’re using it.</p>
<p>Note that installing extensions to an alternate Python installation has no
effect on how those extensions are built: in particular, the Python header files
(<tt class="docutils literal"><span class="pre">Python.h</span></tt> and friends) installed with the Python interpreter used to run
the setup script will be used in compiling extensions. It is your
responsibility to ensure that the interpreter used to run extensions installed
in this way is compatible with the interpreter used to build them. The best way
to do this is to ensure that the two interpreters are the same version of Python
(possibly different builds, or possibly copies of the same build). (Of course,
if your <em class="xref">--prefix</em> and <em class="xref">--exec-prefix</em> don’t even point to an
alternate Python installation, this is immaterial.)</p>
</div>
<div class="section" id="alternate-installation-windows-the-prefix-scheme">
<span id="inst-alt-install-windows"></span><h3>Alternate installation: Windows (the prefix scheme)<a class="headerlink" href="#alternate-installation-windows-the-prefix-scheme" title="Permalink to this headline">¶</a></h3>
<p>Windows has no concept of a user’s home directory, and since the standard Python
installation under Windows is simpler than under Unix, the <em class="xref">--prefix</em>
option has traditionally been used to install additional packages in separate
locations on Windows.</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --prefix="\Temp\Python"
</pre></div>
</div>
<p>to install modules to the <tt class="docutils literal"><span class="pre">\Temp\Python</span></tt> directory on the current drive.</p>
<p>The installation base is defined by the <em class="xref">--prefix</em> option; the
<em class="xref">--exec-prefix</em> option is not supported under Windows. Files are
installed as follows:</p>
<table border="1" class="docutils">
<colgroup>
<col width="35%" />
<col width="31%" />
<col width="34%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Type of file</th>
<th class="head">Installation Directory</th>
<th class="head">Override option</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>pure module distribution</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em></tt></td>
<td><em class="xref">--install-purelib</em></td>
</tr>
<tr><td>non-pure module distribution</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em></tt></td>
<td><em class="xref">--install-platlib</em></td>
</tr>
<tr><td>scripts</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">\Scripts</span></tt></td>
<td><em class="xref">--install-scripts</em></td>
</tr>
<tr><td>data</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">\Data</span></tt></td>
<td><em class="xref">--install-data</em></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="section" id="custom-installation">
<span id="inst-custom-install"></span><h2>Custom Installation<a class="headerlink" href="#custom-installation" title="Permalink to this headline">¶</a></h2>
<p>Sometimes, the alternate installation schemes described in section
<a class="reference internal" href="#inst-alt-install"><em>Alternate Installation</em></a> just don’t do what you want. You might want to tweak just
one or two directories while keeping everything under the same base directory,
or you might want to completely redefine the installation scheme. In either
case, you’re creating a <em>custom installation scheme</em>.</p>
<p>You probably noticed the column of “override options” in the tables describing
the alternate installation schemes above. Those options are how you define a
custom installation scheme. These override options can be relative, absolute,
or explicitly defined in terms of one of the installation base directories.
(There are two installation base directories, and they are normally the same—
they only differ when you use the Unix “prefix scheme” and supply different
<em class="xref">--prefix</em> and <em class="xref">--exec-prefix</em> options.)</p>
<p>For example, say you’re installing a module distribution to your home directory
under Unix—but you want scripts to go in <tt class="docutils literal"><span class="pre">~/scripts</span></tt> rather than
<tt class="docutils literal"><span class="pre">~/bin</span></tt>. As you might expect, you can override this directory with the
<em class="xref">--install-scripts</em> option; in this case, it makes most sense to supply
a relative path, which will be interpreted relative to the installation base
directory (your home directory, in this case):</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --home=~ --install-scripts=scripts
</pre></div>
</div>
<p>Another Unix example: suppose your Python installation was built and installed
with a prefix of <tt class="docutils literal"><span class="pre">/usr/local/python</span></tt>, so under a standard installation
scripts will wind up in <tt class="docutils literal"><span class="pre">/usr/local/python/bin</span></tt>. If you want them in
<tt class="docutils literal"><span class="pre">/usr/local/bin</span></tt> instead, you would supply this absolute directory for the
<em class="xref">--install-scripts</em> option:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --install-scripts=/usr/local/bin
</pre></div>
</div>
<p>(This performs an installation using the “prefix scheme,” where the prefix is
whatever your Python interpreter was installed with— <tt class="docutils literal"><span class="pre">/usr/local/python</span></tt>
in this case.)</p>
<p>If you maintain Python on Windows, you might want third-party modules to live in
a subdirectory of <tt class="docutils literal"><em><span class="pre">prefix</span></em></tt>, rather than right in <tt class="docutils literal"><em><span class="pre">prefix</span></em></tt>
itself. This is almost as easy as customizing the script installation directory
—you just have to remember that there are two types of modules to worry about,
pure modules and non-pure modules (i.e., modules from a non-pure distribution).
For example:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --install-purelib=Site --install-platlib=Site
</pre></div>
</div>
<p>The specified installation directories are relative to <tt class="docutils literal"><em><span class="pre">prefix</span></em></tt>. Of
course, you also have to ensure that these directories are in Python’s module
search path, such as by putting a <tt class="docutils literal"><span class="pre">.pth</span></tt> file in <tt class="docutils literal"><em><span class="pre">prefix</span></em></tt>. See
section <a class="reference internal" href="#inst-search-path"><em>Modifying Python’s Search Path</em></a> to find out how to modify Python’s search path.</p>
<p>If you want to define an entire installation scheme, you just have to supply all
of the installation directory options. The recommended way to do this is to
supply relative paths; for example, if you want to maintain all Python
module-related files under <tt class="docutils literal"><span class="pre">python</span></tt> in your home directory, and you want a
separate directory for each platform that you use your home directory from, you
might define the following installation scheme:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --home=~ \
--install-purelib=python/lib \
--install-platlib=python/lib.$PLAT \
--install-scripts=python/scripts
--install-data=python/data
</pre></div>
</div>
<p>or, equivalently,</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --home=~/python \
--install-purelib=lib \
--install-platlib='lib.$PLAT' \
--install-scripts=scripts
--install-data=data
</pre></div>
</div>
<p><tt class="docutils literal"><span class="pre">$PLAT</span></tt> is not (necessarily) an environment variable—it will be expanded by
the Distutils as it parses your command line options, just as it does when
parsing your configuration file(s).</p>
<p>Obviously, specifying the entire installation scheme every time you install a
new module distribution would be very tedious. Thus, you can put these options
into your Distutils config file (see section <a class="reference internal" href="#inst-config-files"><em>Distutils Configuration Files</em></a>):</p>
<div class="highlight-none"><div class="highlight"><pre>[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-data=python/data
</pre></div>
</div>
<p>or, equivalently,</p>
<div class="highlight-none"><div class="highlight"><pre>[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data
</pre></div>
</div>
<p>Note that these two are <em>not</em> equivalent if you supply a different installation
base directory when you run the setup script. For example,</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py install --install-base=/tmp
</pre></div>
</div>
<p>would install pure modules to <tt class="docutils literal"><em><span class="pre">/tmp/python/lib</span></em></tt> in the first case, and
to <tt class="docutils literal"><em><span class="pre">/tmp/lib</span></em></tt> in the second case. (For the second case, you probably
want to supply an installation base of <tt class="docutils literal"><span class="pre">/tmp/python</span></tt>.)</p>
<p>You probably noticed the use of <tt class="docutils literal"><span class="pre">$HOME</span></tt> and <tt class="docutils literal"><span class="pre">$PLAT</span></tt> in the sample
configuration file input. These are Distutils configuration variables, which
bear a strong resemblance to environment variables. In fact, you can use
environment variables in config files on platforms that have such a notion but
the Distutils additionally define a few extra variables that may not be in your
environment, such as <tt class="docutils literal"><span class="pre">$PLAT</span></tt>. (And of course, on systems that don’t have
environment variables, such as Mac OS 9, the configuration variables supplied by
the Distutils are the only ones you can use.) See section <a class="reference internal" href="#inst-config-files"><em>Distutils Configuration Files</em></a>
for details.</p>
<div class="section" id="modifying-python-s-search-path">
<span id="inst-search-path"></span><h3>Modifying Python’s Search Path<a class="headerlink" href="#modifying-python-s-search-path" title="Permalink to this headline">¶</a></h3>
<p>When the Python interpreter executes an <a class="reference external" href="../reference/simple_stmts.html#import"><tt class="xref docutils literal"><span class="pre">import</span></tt></a> statement, it searches
for both Python code and extension modules along a search path. A default value
for the path is configured into the Python binary when the interpreter is built.
You can determine the path by importing the <a title="Access system-specific parameters and functions." class="reference external" href="../library/sys.html#module-sys"><tt class="xref docutils literal"><span class="pre">sys</span></tt></a> module and printing the
value of <tt class="docutils literal"><span class="pre">sys.path</span></tt>.</p>
<div class="highlight-none"><div class="highlight"><pre>$ python
Python 2.2 (#11, Oct 3 2002, 13:31:27)
[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
'/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
'/usr/local/lib/python2.3/site-packages']
>>>
</pre></div>
</div>
<p>The null string in <tt class="docutils literal"><span class="pre">sys.path</span></tt> represents the current working directory.</p>
<p>The expected convention for locally installed packages is to put them in the
<tt class="docutils literal"><em><span class="pre">...</span></em><span class="pre">/site-packages/</span></tt> directory, but you may want to install Python
modules into some arbitrary directory. For example, your site may have a
convention of keeping all software related to the web server under <tt class="docutils literal"><span class="pre">/www</span></tt>.
Add-on Python modules might then belong in <tt class="docutils literal"><span class="pre">/www/python</span></tt>, and in order to
import them, this directory must be added to <tt class="docutils literal"><span class="pre">sys.path</span></tt>. There are several
different ways to add the directory.</p>
<p>The most convenient way is to add a path configuration file to a directory
that’s already on Python’s path, usually to the <tt class="docutils literal"><span class="pre">.../site-packages/</span></tt>
directory. Path configuration files have an extension of <tt class="docutils literal"><span class="pre">.pth</span></tt>, and each
line must contain a single path that will be appended to <tt class="docutils literal"><span class="pre">sys.path</span></tt>. (Because
the new paths are appended to <tt class="docutils literal"><span class="pre">sys.path</span></tt>, modules in the added directories
will not override standard modules. This means you can’t use this mechanism for
installing fixed versions of standard modules.)</p>
<p>Paths can be absolute or relative, in which case they’re relative to the
directory containing the <tt class="docutils literal"><span class="pre">.pth</span></tt> file. See the documentation of
the <a title="A standard way to reference site-specific modules." class="reference external" href="../library/site.html#module-site"><tt class="xref docutils literal"><span class="pre">site</span></tt></a> module for more information.</p>
<p>A slightly less convenient way is to edit the <tt class="docutils literal"><span class="pre">site.py</span></tt> file in Python’s
standard library, and modify <tt class="docutils literal"><span class="pre">sys.path</span></tt>. <tt class="docutils literal"><span class="pre">site.py</span></tt> is automatically
imported when the Python interpreter is executed, unless the <a class="reference external" href="../using/cmdline.html#cmdoption-S"><em class="xref">-S</em></a> switch
is supplied to suppress this behaviour. So you could simply edit
<tt class="docutils literal"><span class="pre">site.py</span></tt> and add two lines to it:</p>
<div class="highlight-none"><div class="highlight"><pre>import sys
sys.path.append('/www/python/')
</pre></div>
</div>
<p>However, if you reinstall the same major version of Python (perhaps when
upgrading from 2.2 to 2.2.2, for example) <tt class="docutils literal"><span class="pre">site.py</span></tt> will be overwritten by
the stock version. You’d have to remember that it was modified and save a copy
before doing the installation.</p>
<p>There are two environment variables that can modify <tt class="docutils literal"><span class="pre">sys.path</span></tt>.
<span class="target" id="index-193"></span><a class="reference external" href="../using/cmdline.html#envvar-PYTHONHOME"><strong class="xref">PYTHONHOME</strong></a> sets an alternate value for the prefix of the Python
installation. For example, if <span class="target" id="index-194"></span><a class="reference external" href="../using/cmdline.html#envvar-PYTHONHOME"><strong class="xref">PYTHONHOME</strong></a> is set to <tt class="docutils literal"><span class="pre">/www/python</span></tt>,
the search path will be set to <tt class="docutils literal"><span class="pre">['',</span> <span class="pre">'/www/python/lib/pythonX.Y/',</span>
<span class="pre">'/www/python/lib/pythonX.Y/plat-linux2',</span> <span class="pre">...]</span></tt>.</p>
<p>The <span class="target" id="index-195"></span><a class="reference external" href="../using/cmdline.html#envvar-PYTHONPATH"><strong class="xref">PYTHONPATH</strong></a> variable can be set to a list of paths that will be
added to the beginning of <tt class="docutils literal"><span class="pre">sys.path</span></tt>. For example, if <span class="target" id="index-196"></span><a class="reference external" href="../using/cmdline.html#envvar-PYTHONPATH"><strong class="xref">PYTHONPATH</strong></a> is
set to <tt class="docutils literal"><span class="pre">/www/python:/opt/py</span></tt>, the search path will begin with
<tt class="docutils literal"><span class="pre">['/www/python',</span> <span class="pre">'/opt/py']</span></tt>. (Note that directories must exist in order to
be added to <tt class="docutils literal"><span class="pre">sys.path</span></tt>; the <a title="A standard way to reference site-specific modules." class="reference external" href="../library/site.html#module-site"><tt class="xref docutils literal"><span class="pre">site</span></tt></a> module removes paths that don’t
exist.)</p>
<p>Finally, <tt class="docutils literal"><span class="pre">sys.path</span></tt> is just a regular Python list, so any Python application
can modify it by adding or removing entries.</p>
</div>
</div>
<div class="section" id="distutils-configuration-files">
<span id="inst-config-files"></span><h2>Distutils Configuration Files<a class="headerlink" href="#distutils-configuration-files" title="Permalink to this headline">¶</a></h2>
<p>As mentioned above, you can use Distutils configuration files to record personal
or site preferences for any Distutils options. That is, any option to any
command can be stored in one of two or three (depending on your platform)
configuration files, which will be consulted before the command-line is parsed.
This means that configuration files will override default values, and the
command-line will in turn override configuration files. Furthermore, if
multiple configuration files apply, values from “earlier” files are overridden
by “later” files.</p>
<div class="section" id="location-and-names-of-config-files">
<span id="inst-config-filenames"></span><h3>Location and names of config files<a class="headerlink" href="#location-and-names-of-config-files" title="Permalink to this headline">¶</a></h3>
<p>The names and locations of the configuration files vary slightly across
platforms. On Unix and Mac OS X, the three configuration files (in the order
they are processed) are:</p>
<table border="1" class="docutils">
<colgroup>
<col width="18%" />
<col width="73%" />
<col width="9%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Type of file</th>
<th class="head">Location and filename</th>
<th class="head">Notes</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>system</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">ver</span></em><span class="pre">/distutils/distutils.cfg</span></tt></td>
<td>(1)</td>
</tr>
<tr><td>personal</td>
<td><tt class="docutils literal"><span class="pre">$HOME/.pydistutils.cfg</span></tt></td>
<td>(2)</td>
</tr>
<tr><td>local</td>
<td><tt class="docutils literal"><span class="pre">setup.cfg</span></tt></td>
<td>(3)</td>
</tr>
</tbody>
</table>
<p>And on Windows, the configuration files are:</p>
<table border="1" class="docutils">
<colgroup>
<col width="20%" />
<col width="70%" />
<col width="10%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Type of file</th>
<th class="head">Location and filename</th>
<th class="head">Notes</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>system</td>
<td><tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">\Lib\distutils\distutils.cfg</span></tt></td>
<td>(4)</td>
</tr>
<tr><td>personal</td>
<td><tt class="docutils literal"><span class="pre">%HOME%\pydistutils.cfg</span></tt></td>
<td>(5)</td>
</tr>
<tr><td>local</td>
<td><tt class="docutils literal"><span class="pre">setup.cfg</span></tt></td>
<td>(3)</td>
</tr>
</tbody>
</table>
<p>Notes:</p>
<ol class="arabic simple">
<li>Strictly speaking, the system-wide configuration file lives in the directory
where the Distutils are installed; under Python 1.6 and later on Unix, this is
as shown. For Python 1.5.2, the Distutils will normally be installed to
<tt class="docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/lib/python1.5/site-packages/distutils</span></tt>, so the system
configuration file should be put there under Python 1.5.2.</li>
<li>On Unix, if the <span class="target" id="index-197"></span><strong class="xref">HOME</strong> environment variable is not defined, the user’s
home directory will be determined with the <tt class="xref docutils literal"><span class="pre">getpwuid()</span></tt> function from the
standard <a title="(Unix) The password database (getpwnam() and friends)." class="reference external" href="../library/pwd.html#module-pwd"><tt class="xref docutils literal"><span class="pre">pwd</span></tt></a> module. This is done by the <a title="os.path.expanduser" class="reference external" href="../library/os.path.html#os.path.expanduser"><tt class="xref docutils literal"><span class="pre">os.path.expanduser()</span></tt></a>
function used by Distutils.</li>
<li>I.e., in the current directory (usually the location of the setup script).</li>
<li>(See also note (1).) Under Python 1.6 and later, Python’s default “installation
prefix” is <tt class="docutils literal"><span class="pre">C:\Python</span></tt>, so the system configuration file is normally
<tt class="docutils literal"><span class="pre">C:\Python\Lib\distutils\distutils.cfg</span></tt>. Under Python 1.5.2, the
default prefix was <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\Python</span></tt>, and the Distutils were not
part of the standard library—so the system configuration file would be
<tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\Python\distutils\distutils.cfg</span></tt> in a standard Python
1.5.2 installation under Windows.</li>
<li>On Windows, if the <span class="target" id="index-198"></span><strong class="xref">HOME</strong> environment variable is not defined,
<span class="target" id="index-199"></span><strong class="xref">USERPROFILE</strong> then <span class="target" id="index-200"></span><strong class="xref">HOMEDRIVE</strong> and <span class="target" id="index-201"></span><strong class="xref">HOMEPATH</strong> will
be tried. This is done by the <a title="os.path.expanduser" class="reference external" href="../library/os.path.html#os.path.expanduser"><tt class="xref docutils literal"><span class="pre">os.path.expanduser()</span></tt></a> function used
by Distutils.</li>
</ol>
</div>
<div class="section" id="syntax-of-config-files">
<span id="inst-config-syntax"></span><h3>Syntax of config files<a class="headerlink" href="#syntax-of-config-files" title="Permalink to this headline">¶</a></h3>
<p>The Distutils configuration files all have the same syntax. The config files
are grouped into sections. There is one section for each Distutils command,
plus a <tt class="docutils literal"><span class="pre">global</span></tt> section for global options that affect every command. Each
section consists of one option per line, specified as <tt class="docutils literal"><span class="pre">option=value</span></tt>.</p>
<p>For example, the following is a complete config file that just forces all
commands to run quietly by default:</p>
<div class="highlight-none"><div class="highlight"><pre>[global]
verbose=0
</pre></div>
</div>
<p>If this is installed as the system config file, it will affect all processing of
any Python module distribution by any user on the current system. If it is
installed as your personal config file (on systems that support them), it will
affect only module distributions processed by you. And if it is used as the
<tt class="docutils literal"><span class="pre">setup.cfg</span></tt> for a particular module distribution, it affects only that
distribution.</p>
<p>You could override the default “build base” directory and make the
<strong>build*</strong> commands always forcibly rebuild all files with the
following:</p>
<div class="highlight-none"><div class="highlight"><pre>[build]
build-base=blib
force=1
</pre></div>
</div>
<p>which corresponds to the command-line arguments</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build --build-base=blib --force
</pre></div>
</div>
<p>except that including the <strong>build</strong> command on the command-line means
that command will be run. Including a particular command in config files has no
such implication; it only means that if the command is run, the options in the
config file will apply. (Or if other commands that derive values from it are
run, they will use the values in the config file.)</p>
<p>You can find out the complete list of options for any command using the
<a class="reference external" href="../using/cmdline.html#cmdoption--help"><em class="xref">--help</em></a> option, e.g.:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build --help
</pre></div>
</div>
<p>and you can find out the complete list of global options by using
<a class="reference external" href="../using/cmdline.html#cmdoption--help"><em class="xref">--help</em></a> without a command:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py --help
</pre></div>
</div>
<p>See also the “Reference” section of the “Distributing Python Modules” manual.</p>
</div>
</div>
<div class="section" id="building-extensions-tips-and-tricks">
<span id="inst-building-ext"></span><h2>Building Extensions: Tips and Tricks<a class="headerlink" href="#building-extensions-tips-and-tricks" title="Permalink to this headline">¶</a></h2>
<p>Whenever possible, the Distutils try to use the configuration information made
available by the Python interpreter used to run the <tt class="docutils literal"><span class="pre">setup.py</span></tt> script.
For example, the same compiler and linker flags used to compile Python will also
be used for compiling extensions. Usually this will work well, but in
complicated situations this might be inappropriate. This section discusses how
to override the usual Distutils behaviour.</p>
<div class="section" id="tweaking-compiler-linker-flags">
<span id="inst-tweak-flags"></span><h3>Tweaking compiler/linker flags<a class="headerlink" href="#tweaking-compiler-linker-flags" title="Permalink to this headline">¶</a></h3>
<p>Compiling a Python extension written in C or C++ will sometimes require
specifying custom flags for the compiler and linker in order to use a particular
library or produce a special kind of object code. This is especially true if the
extension hasn’t been tested on your platform, or if you’re trying to
cross-compile Python.</p>
<p>In the most general case, the extension author might have foreseen that
compiling the extensions would be complicated, and provided a <tt class="docutils literal"><span class="pre">Setup</span></tt> file
for you to edit. This will likely only be done if the module distribution
contains many separate extension modules, or if they often require elaborate
sets of compiler flags in order to work.</p>
<p>A <tt class="docutils literal"><span class="pre">Setup</span></tt> file, if present, is parsed in order to get a list of extensions
to build. Each line in a <tt class="docutils literal"><span class="pre">Setup</span></tt> describes a single module. Lines have
the following structure:</p>
<div class="highlight-none"><div class="highlight"><pre>module ... [sourcefile ...] [cpparg ...] [library ...]
</pre></div>
</div>
<p>Let’s examine each of the fields in turn.</p>
<ul class="simple">
<li><em>module</em> is the name of the extension module to be built, and should be a
valid Python identifier. You can’t just change this in order to rename a module
(edits to the source code would also be needed), so this should be left alone.</li>
<li><em>sourcefile</em> is anything that’s likely to be a source code file, at least
judging by the filename. Filenames ending in <tt class="docutils literal"><span class="pre">.c</span></tt> are assumed to be
written in C, filenames ending in <tt class="docutils literal"><span class="pre">.C</span></tt>, <tt class="docutils literal"><span class="pre">.cc</span></tt>, and <tt class="docutils literal"><span class="pre">.c++</span></tt> are
assumed to be C++, and filenames ending in <tt class="docutils literal"><span class="pre">.m</span></tt> or <tt class="docutils literal"><span class="pre">.mm</span></tt> are assumed
to be in Objective C.</li>
<li><em>cpparg</em> is an argument for the C preprocessor, and is anything starting with
<em class="xref">-I</em>, <em class="xref">-D</em>, <a class="reference external" href="../using/cmdline.html#cmdoption-U"><em class="xref">-U</em></a> or <em class="xref">-C</em>.</li>
<li><em>library</em> is anything ending in <tt class="docutils literal"><span class="pre">.a</span></tt> or beginning with <em class="xref">-l</em> or
<em class="xref">-L</em>.</li>
</ul>
<p>If a particular platform requires a special library on your platform, you can
add it by editing the <tt class="docutils literal"><span class="pre">Setup</span></tt> file and running <tt class="docutils literal"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">build</span></tt>.
For example, if the module defined by the line</p>
<div class="highlight-none"><div class="highlight"><pre>foo foomodule.c
</pre></div>
</div>
<p>must be linked with the math library <tt class="docutils literal"><span class="pre">libm.a</span></tt> on your platform, simply add
<em class="xref">-lm</em> to the line:</p>
<div class="highlight-none"><div class="highlight"><pre>foo foomodule.c -lm
</pre></div>
</div>
<p>Arbitrary switches intended for the compiler or the linker can be supplied with
the <em class="xref">-Xcompiler</em> <em>arg</em> and <em class="xref">-Xlinker</em> <em>arg</em> options:</p>
<div class="highlight-none"><div class="highlight"><pre>foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm
</pre></div>
</div>
<p>The next option after <em class="xref">-Xcompiler</em> and <em class="xref">-Xlinker</em> will be
appended to the proper command line, so in the above example the compiler will
be passed the <em class="xref">-o32</em> option, and the linker will be passed
<em class="xref">-shared</em>. If a compiler option requires an argument, you’ll have to
supply multiple <em class="xref">-Xcompiler</em> options; for example, to pass <tt class="docutils literal"><span class="pre">-x</span> <span class="pre">c++</span></tt>
the <tt class="docutils literal"><span class="pre">Setup</span></tt> file would have to contain <tt class="docutils literal"><span class="pre">-Xcompiler</span> <span class="pre">-x</span> <span class="pre">-Xcompiler</span> <span class="pre">c++</span></tt>.</p>
<p>Compiler flags can also be supplied through setting the <span class="target" id="index-202"></span><strong class="xref">CFLAGS</strong>
environment variable. If set, the contents of <span class="target" id="index-203"></span><strong class="xref">CFLAGS</strong> will be added to
the compiler flags specified in the <tt class="docutils literal"><span class="pre">Setup</span></tt> file.</p>
</div>
<div class="section" id="using-non-microsoft-compilers-on-windows">
<span id="inst-non-ms-compilers"></span><h3>Using non-Microsoft compilers on Windows<a class="headerlink" href="#using-non-microsoft-compilers-on-windows" title="Permalink to this headline">¶</a></h3>
<div class="section" id="borland-codegear-c">
<h4>Borland/CodeGear C++<a class="headerlink" href="#borland-codegear-c" title="Permalink to this headline">¶</a></h4>
<p>This subsection describes the necessary steps to use Distutils with the Borland
C++ compiler version 5.5. First you have to know that Borland’s object file
format (OMF) is different from the format used by the Python version you can
download from the Python or ActiveState Web site. (Python is built with
Microsoft Visual C++, which uses COFF as the object file format.) For this
reason you have to convert Python’s library <tt class="docutils literal"><span class="pre">python25.lib</span></tt> into the
Borland format. You can do this as follows:</p>
<div class="highlight-none"><div class="highlight"><pre>coff2omf python25.lib python25_bcpp.lib
</pre></div>
</div>
<p>The <tt class="docutils literal"><span class="pre">coff2omf</span></tt> program comes with the Borland compiler. The file
<tt class="docutils literal"><span class="pre">python25.lib</span></tt> is in the <tt class="docutils literal"><span class="pre">Libs</span></tt> directory of your Python
installation. If your extension uses other libraries (zlib, ...) you have to
convert them too.</p>
<p>The converted files have to reside in the same directories as the normal
libraries.</p>
<p>How does Distutils manage to use these libraries with their changed names? If
the extension needs a library (eg. <tt class="docutils literal"><span class="pre">foo</span></tt>) Distutils checks first if it
finds a library with suffix <tt class="docutils literal"><span class="pre">_bcpp</span></tt> (eg. <tt class="docutils literal"><span class="pre">foo_bcpp.lib</span></tt>) and then
uses this library. In the case it doesn’t find such a special library it uses
the default name (<tt class="docutils literal"><span class="pre">foo.lib</span></tt>.) <a class="footnote-reference" href="#id4" id="id1">[1]</a></p>
<p>To let Distutils compile your extension with Borland C++ you now have to type:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build --compiler=bcpp
</pre></div>
</div>
<p>If you want to use the Borland C++ compiler as the default, you could specify
this in your personal or system-wide configuration file for Distutils (see
section <a class="reference internal" href="#inst-config-files"><em>Distutils Configuration Files</em></a>.)</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<dl class="last docutils">
<dt><a class="reference external" href="http://www.codegear.com/downloads/free/cppbuilder">C++Builder Compiler</a></dt>
<dd>Information about the free C++ compiler from Borland, including links to the
download pages.</dd>
<dt><a class="reference external" href="http://www.cyberus.ca/~g_will/pyExtenDL.shtml">Creating Python Extensions Using Borland’s Free Compiler</a></dt>
<dd>Document describing how to use Borland’s free command-line C++ compiler to build
Python.</dd>
</dl>
</div>
</div>
<div class="section" id="gnu-c-cygwin-mingw">
<h4>GNU C / Cygwin / MinGW<a class="headerlink" href="#gnu-c-cygwin-mingw" title="Permalink to this headline">¶</a></h4>
<p>These instructions only apply if you’re using a version of Python prior to
2.4.1 with a MinGW prior to 3.0.0 (with binutils-2.13.90-20030111-1).</p>
<p>This section describes the necessary steps to use Distutils with the GNU C/C++
compilers in their Cygwin and MinGW distributions. <a class="footnote-reference" href="#id5" id="id2">[2]</a> For a Python interpreter
that was built with Cygwin, everything should work without any of these
following steps.</p>
<p>These compilers require some special libraries. This task is more complex than
for Borland’s C++, because there is no program to convert the library. First
you have to create a list of symbols which the Python DLL exports. (You can find
a good program for this task at
<a class="reference external" href="http://www.emmestech.com/software/pexports-0.43/download_pexports.html">http://www.emmestech.com/software/pexports-0.43/download_pexports.html</a>).</p>
<div class="highlight-none"><div class="highlight"><pre>pexports python25.dll >python25.def
</pre></div>
</div>
<p>The location of an installed <tt class="docutils literal"><span class="pre">python25.dll</span></tt> will depend on the
installation options and the version and language of Windows. In a “just for
me” installation, it will appear in the root of the installation directory. In
a shared installation, it will be located in the system directory.</p>
<p>Then you can create from these information an import library for gcc.</p>
<div class="highlight-none"><div class="highlight"><pre>/cygwin/bin/dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a
</pre></div>
</div>
<p>The resulting library has to be placed in the same directory as
<tt class="docutils literal"><span class="pre">python25.lib</span></tt>. (Should be the <tt class="docutils literal"><span class="pre">libs</span></tt> directory under your Python
installation directory.)</p>
<p>If your extension uses other libraries (zlib,...) you might have to convert
them too. The converted files have to reside in the same directories as the
normal libraries do.</p>
<p>To let Distutils compile your extension with Cygwin you now have to type</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build --compiler=cygwin
</pre></div>
</div>
<p>and for Cygwin in no-cygwin mode <a class="footnote-reference" href="#id6" id="id3">[3]</a> or for MinGW type:</p>
<div class="highlight-none"><div class="highlight"><pre>python setup.py build --compiler=mingw32
</pre></div>
</div>
<p>If you want to use any of these options/compilers as default, you should
consider to write it in your personal or system-wide configuration file for
Distutils (see section <a class="reference internal" href="#inst-config-files"><em>Distutils Configuration Files</em></a>.)</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<dl class="last docutils">
<dt><a class="reference external" href="http://www.zope.org/Members/als/tips/win32_mingw_modules">Building Python modules on MS Windows platform with MinGW</a></dt>
<dd>Information about building the required libraries for the MinGW environment.</dd>
</dl>
</div>
<p class="rubric">Footnotes</p>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>This also means you could replace all existing COFF-libraries with OMF-libraries
of the same name.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Check <a class="reference external" href="http://sources.redhat.com/cygwin/">http://sources.redhat.com/cygwin/</a> and <a class="reference external" href="http://www.mingw.org/">http://www.mingw.org/</a> for more
information</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id6" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>Then you have no POSIX emulation available, but you also don’t need
<tt class="docutils literal"><span class="pre">cygwin1.dll</span></tt>.</td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="#">Installing Python Modules</a><ul>
<li><a class="reference external" href="#introduction">Introduction</a><ul>
<li><a class="reference external" href="#best-case-trivial-installation">Best case: trivial installation</a></li>
<li><a class="reference external" href="#the-new-standard-distutils">The new standard: Distutils</a></li>
</ul>
</li>
<li><a class="reference external" href="#standard-build-and-install">Standard Build and Install</a><ul>
<li><a class="reference external" href="#platform-variations">Platform variations</a></li>
<li><a class="reference external" href="#splitting-the-job-up">Splitting the job up</a></li>
<li><a class="reference external" href="#how-building-works">How building works</a></li>
<li><a class="reference external" href="#how-installation-works">How installation works</a></li>
</ul>
</li>
<li><a class="reference external" href="#alternate-installation">Alternate Installation</a><ul>
<li><a class="reference external" href="#alternate-installation-the-home-scheme">Alternate installation: the home scheme</a></li>
<li><a class="reference external" href="#alternate-installation-unix-the-prefix-scheme">Alternate installation: Unix (the prefix scheme)</a></li>
<li><a class="reference external" href="#alternate-installation-windows-the-prefix-scheme">Alternate installation: Windows (the prefix scheme)</a></li>
</ul>
</li>
<li><a class="reference external" href="#custom-installation">Custom Installation</a><ul>
<li><a class="reference external" href="#modifying-python-s-search-path">Modifying Python’s Search Path</a></li>
</ul>
</li>
<li><a class="reference external" href="#distutils-configuration-files">Distutils Configuration Files</a><ul>
<li><a class="reference external" href="#location-and-names-of-config-files">Location and names of config files</a></li>
<li><a class="reference external" href="#syntax-of-config-files">Syntax of config files</a></li>
</ul>
</li>
<li><a class="reference external" href="#building-extensions-tips-and-tricks">Building Extensions: Tips and Tricks</a><ul>
<li><a class="reference external" href="#tweaking-compiler-linker-flags">Tweaking compiler/linker flags</a></li>
<li><a class="reference external" href="#using-non-microsoft-compilers-on-windows">Using non-Microsoft compilers on Windows</a><ul>
<li><a class="reference external" href="#borland-codegear-c">Borland/CodeGear C++</a></li>
<li><a class="reference external" href="#gnu-c-cygwin-mingw">GNU C / Cygwin / MinGW</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="../distutils/apiref.html"
title="previous chapter">11. API Reference</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="../documenting/index.html"
title="next chapter">Documenting Python</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">Report a Bug</a></li>
<li><a href="../_sources/install/index.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../modindex.html" title="Global Module Index"
>modules</a> |</li>
<li class="right" >
<a href="../documenting/index.html" title="Documenting Python"
>next</a> |</li>
<li class="right" >
<a href="../distutils/apiref.html" title="11. API Reference"
>previous</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="../index.html">Python v2.6.6 documentation</a> »</li>
</ul>
</div>
<div class="footer">
© <a href="../copyright.html">Copyright</a> 1990-2011, Python Software Foundation.
<br />
The Python Software Foundation is a non-profit corporation.
<a href="http://www.python.org/psf/donations/">Please donate.</a>
<br />
Last updated on Jul 20, 2011.
<a href="../bugs.html">Found a bug</a>?
<br />
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.6.
</div>
</body>
</html>
Copyright 2K16 - 2K18 Indonesian Hacker Rulez