| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1 | .. highlightlang:: none | 
|  | 2 |  | 
|  | 3 | .. _install-index: | 
|  | 4 |  | 
| Ned Deily | 835d392 | 2016-06-05 17:35:43 -0700 | [diff] [blame] | 5 | ******************************************** | 
|  | 6 | Installing Python Modules (Legacy version) | 
|  | 7 | ******************************************** | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 8 |  | 
|  | 9 | :Author: Greg Ward | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 10 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 11 | .. TODO: Fill in XXX comments | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 12 |  | 
| Ned Deily | 835d392 | 2016-06-05 17:35:43 -0700 | [diff] [blame] | 13 | .. seealso:: | 
|  | 14 |  | 
|  | 15 | :ref:`installing-index` | 
|  | 16 | The up to date module installation documentations | 
|  | 17 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 18 | .. The audience for this document includes people who don't know anything | 
|  | 19 | about Python and aren't about to learn the language just in order to | 
|  | 20 | install and maintain it for their users, i.e. system administrators. | 
|  | 21 | Thus, I have to be sure to explain the basics at some point: | 
|  | 22 | sys.path and PYTHONPATH at least.  Should probably give pointers to | 
|  | 23 | other docs on "import site", PYTHONSTARTUP, PYTHONHOME, etc. | 
| Georg Brandl | c62ef8b | 2009-01-03 20:55:06 +0000 | [diff] [blame] | 24 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 25 | Finally, it might be useful to include all the material from my "Care | 
|  | 26 | and Feeding of a Python Installation" talk in here somewhere.  Yow! | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 27 |  | 
| Nick Coghlan | 73188fb | 2013-12-10 21:18:32 +1000 | [diff] [blame] | 28 | This document describes the Python Distribution Utilities ("Distutils") from the | 
|  | 29 | end-user's point-of-view, describing how to extend the capabilities of a | 
|  | 30 | standard Python installation by building and installing third-party Python | 
|  | 31 | modules and extensions. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 32 |  | 
| Nick Coghlan | 73188fb | 2013-12-10 21:18:32 +1000 | [diff] [blame] | 33 |  | 
|  | 34 | .. note:: | 
| Benjamin Peterson | be03807 | 2015-11-03 22:43:31 -0800 | [diff] [blame] | 35 |  | 
| Benjamin Peterson | 873cad2 | 2015-11-03 22:42:02 -0800 | [diff] [blame] | 36 | This guide only covers the basic tools for building and distributing | 
|  | 37 | extensions that are provided as part of this version of Python. Third party | 
|  | 38 | tools offer easier to use and more secure alternatives. Refer to the `quick | 
|  | 39 | recommendations section <https://packaging.python.org/en/latest/current/>`__ | 
| Nick Coghlan | 73188fb | 2013-12-10 21:18:32 +1000 | [diff] [blame] | 40 | in the Python Packaging User Guide for more information. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 41 |  | 
|  | 42 |  | 
|  | 43 | .. _inst-intro: | 
|  | 44 |  | 
| Benjamin Peterson | 873cad2 | 2015-11-03 22:42:02 -0800 | [diff] [blame] | 45 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 46 | Introduction | 
|  | 47 | ============ | 
|  | 48 |  | 
|  | 49 | Although Python's extensive standard library covers many programming needs, | 
|  | 50 | there often comes a time when you need to add some new functionality to your | 
|  | 51 | Python installation in the form of third-party modules.  This might be necessary | 
|  | 52 | to support your own programming, or to support an application that you want to | 
|  | 53 | use and that happens to be written in Python. | 
|  | 54 |  | 
|  | 55 | In the past, there has been little support for adding third-party modules to an | 
|  | 56 | existing Python installation.  With the introduction of the Python Distribution | 
|  | 57 | Utilities (Distutils for short) in Python 2.0, this changed. | 
|  | 58 |  | 
|  | 59 | This document is aimed primarily at the people who need to install third-party | 
|  | 60 | Python modules: end-users and system administrators who just need to get some | 
|  | 61 | Python application running, and existing Python programmers who want to add some | 
|  | 62 | new goodies to their toolbox.  You don't need to know Python to read this | 
|  | 63 | document; there will be some brief forays into using Python's interactive mode | 
|  | 64 | to explore your installation, but that's it.  If you're looking for information | 
|  | 65 | on how to distribute your own Python modules so that others may use them, see | 
| Éric Araujo | 31fe52d | 2014-03-12 22:19:39 -0400 | [diff] [blame] | 66 | the :ref:`distutils-index` manual.  :ref:`debug-setup-script` may also be of | 
|  | 67 | interest. | 
|  | 68 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 69 |  | 
|  | 70 |  | 
|  | 71 | .. _inst-trivial-install: | 
|  | 72 |  | 
|  | 73 | Best case: trivial installation | 
|  | 74 | ------------------------------- | 
|  | 75 |  | 
|  | 76 | In the best case, someone will have prepared a special version of the module | 
|  | 77 | distribution you want to install that is targeted specifically at your platform | 
|  | 78 | and is installed just like any other software on your platform.  For example, | 
|  | 79 | the module developer might make an executable installer available for Windows | 
|  | 80 | users, an RPM package for users of RPM-based Linux systems (Red Hat, SuSE, | 
|  | 81 | Mandrake, and many others), a Debian package for users of Debian-based Linux | 
|  | 82 | systems, and so forth. | 
|  | 83 |  | 
|  | 84 | In that case, you would download the installer appropriate to your platform and | 
|  | 85 | do the obvious thing with it: run it if it's an executable installer, ``rpm | 
|  | 86 | --install`` it if it's an RPM, etc.  You don't need to run Python or a setup | 
|  | 87 | script, you don't need to compile anything---you might not even need to read any | 
| Éric Araujo | 2e1c294 | 2011-07-29 11:57:50 +0200 | [diff] [blame] | 88 | instructions (although it's always a good idea to do so anyway). | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 89 |  | 
|  | 90 | Of course, things will not always be that easy.  You might be interested in a | 
|  | 91 | module distribution that doesn't have an easy-to-use installer for your | 
|  | 92 | platform.  In that case, you'll have to start with the source distribution | 
|  | 93 | released by the module's author/maintainer.  Installing from a source | 
|  | 94 | distribution is not too hard, as long as the modules are packaged in the | 
|  | 95 | standard way.  The bulk of this document is about building and installing | 
|  | 96 | modules from standard source distributions. | 
|  | 97 |  | 
|  | 98 |  | 
|  | 99 | .. _inst-new-standard: | 
|  | 100 |  | 
|  | 101 | The new standard: Distutils | 
|  | 102 | --------------------------- | 
|  | 103 |  | 
|  | 104 | If you download a module source distribution, you can tell pretty quickly if it | 
|  | 105 | was packaged and distributed in the standard way, i.e. using the Distutils. | 
|  | 106 | First, the distribution's name and version number will be featured prominently | 
|  | 107 | in the name of the downloaded archive, e.g. :file:`foo-1.0.tar.gz` or | 
|  | 108 | :file:`widget-0.9.7.zip`.  Next, the archive will unpack into a similarly-named | 
|  | 109 | directory: :file:`foo-1.0` or :file:`widget-0.9.7`.  Additionally, the | 
|  | 110 | distribution will contain a setup script :file:`setup.py`, and a file named | 
|  | 111 | :file:`README.txt` or possibly just :file:`README`, which should explain that | 
| Éric Araujo | a65a880 | 2011-06-08 01:11:36 +0200 | [diff] [blame] | 112 | building and installing the module distribution is a simple matter of running | 
|  | 113 | one command from a terminal:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 114 |  | 
|  | 115 | python setup.py install | 
|  | 116 |  | 
| Éric Araujo | a2596a4 | 2011-08-19 09:29:56 +0200 | [diff] [blame] | 117 | For Windows, this command should be run from a command prompt window | 
|  | 118 | (:menuselection:`Start --> Accessories`):: | 
| Éric Araujo | a65a880 | 2011-06-08 01:11:36 +0200 | [diff] [blame] | 119 |  | 
|  | 120 | setup.py install | 
|  | 121 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 122 | If all these things are true, then you already know how to build and install the | 
|  | 123 | modules you've just downloaded:  Run the command above. Unless you need to | 
|  | 124 | install things in a non-standard way or customize the build process, you don't | 
|  | 125 | really need this manual.  Or rather, the above command is everything you need to | 
|  | 126 | get out of this manual. | 
|  | 127 |  | 
|  | 128 |  | 
|  | 129 | .. _inst-standard-install: | 
|  | 130 |  | 
|  | 131 | Standard Build and Install | 
|  | 132 | ========================== | 
|  | 133 |  | 
|  | 134 | As described in section :ref:`inst-new-standard`, building and installing a module | 
| Éric Araujo | a65a880 | 2011-06-08 01:11:36 +0200 | [diff] [blame] | 135 | distribution using the Distutils is usually one simple command to run from a | 
|  | 136 | terminal:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 137 |  | 
|  | 138 | python setup.py install | 
|  | 139 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 140 |  | 
|  | 141 | .. _inst-platform-variations: | 
|  | 142 |  | 
|  | 143 | Platform variations | 
|  | 144 | ------------------- | 
|  | 145 |  | 
|  | 146 | You should always run the setup command from the distribution root directory, | 
|  | 147 | i.e. the top-level subdirectory that the module source distribution unpacks | 
|  | 148 | into.  For example, if you've just downloaded a module source distribution | 
|  | 149 | :file:`foo-1.0.tar.gz` onto a Unix system, the normal thing to do is:: | 
|  | 150 |  | 
|  | 151 | gunzip -c foo-1.0.tar.gz | tar xf -    # unpacks into directory foo-1.0 | 
|  | 152 | cd foo-1.0 | 
|  | 153 | python setup.py install | 
|  | 154 |  | 
|  | 155 | On Windows, you'd probably download :file:`foo-1.0.zip`.  If you downloaded the | 
|  | 156 | archive file to :file:`C:\\Temp`, then it would unpack into | 
| Serhiy Storchaka | c72e66a | 2015-11-02 15:06:09 +0200 | [diff] [blame] | 157 | :file:`C:\\Temp\\foo-1.0`; you can use either an archive manipulator with a | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 158 | graphical user interface (such as WinZip) or a command-line tool (such as | 
|  | 159 | :program:`unzip` or :program:`pkunzip`) to unpack the archive.  Then, open a | 
| Éric Araujo | a2596a4 | 2011-08-19 09:29:56 +0200 | [diff] [blame] | 160 | command prompt window and run:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 161 |  | 
|  | 162 | cd c:\Temp\foo-1.0 | 
|  | 163 | python setup.py install | 
|  | 164 |  | 
|  | 165 |  | 
|  | 166 | .. _inst-splitting-up: | 
|  | 167 |  | 
|  | 168 | Splitting the job up | 
|  | 169 | -------------------- | 
|  | 170 |  | 
|  | 171 | Running ``setup.py install`` builds and installs all modules in one run.  If you | 
|  | 172 | prefer to work incrementally---especially useful if you want to customize the | 
|  | 173 | build process, or if things are going wrong---you can use the setup script to do | 
|  | 174 | one thing at a time.  This is particularly helpful when the build and install | 
|  | 175 | will be done by different users---for example, you might want to build a module | 
|  | 176 | distribution and hand it off to a system administrator for installation (or do | 
|  | 177 | it yourself, with super-user privileges). | 
|  | 178 |  | 
|  | 179 | For example, you can build everything in one step, and then install everything | 
|  | 180 | in a second step, by invoking the setup script twice:: | 
|  | 181 |  | 
|  | 182 | python setup.py build | 
|  | 183 | python setup.py install | 
|  | 184 |  | 
|  | 185 | If you do this, you will notice that running the :command:`install` command | 
|  | 186 | first runs the :command:`build` command, which---in this case---quickly notices | 
|  | 187 | that it has nothing to do, since everything in the :file:`build` directory is | 
|  | 188 | up-to-date. | 
|  | 189 |  | 
|  | 190 | You may not need this ability to break things down often if all you do is | 
|  | 191 | install modules downloaded off the 'net, but it's very handy for more advanced | 
|  | 192 | tasks.  If you get into distributing your own Python modules and extensions, | 
|  | 193 | you'll run lots of individual Distutils commands on their own. | 
|  | 194 |  | 
|  | 195 |  | 
|  | 196 | .. _inst-how-build-works: | 
|  | 197 |  | 
|  | 198 | How building works | 
|  | 199 | ------------------ | 
|  | 200 |  | 
|  | 201 | As implied above, the :command:`build` command is responsible for putting the | 
|  | 202 | files to install into a *build directory*.  By default, this is :file:`build` | 
|  | 203 | under the distribution root; if you're excessively concerned with speed, or want | 
|  | 204 | to keep the source tree pristine, you can change the build directory with the | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 205 | :option:`!--build-base` option. For example:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 206 |  | 
| Petri Lehtinen | 0b78503 | 2013-02-23 19:24:08 +0100 | [diff] [blame] | 207 | python setup.py build --build-base=/path/to/pybuild/foo-1.0 | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 208 |  | 
|  | 209 | (Or you could do this permanently with a directive in your system or personal | 
|  | 210 | Distutils configuration file; see section :ref:`inst-config-files`.)  Normally, this | 
|  | 211 | isn't necessary. | 
|  | 212 |  | 
|  | 213 | The default layout for the build tree is as follows:: | 
|  | 214 |  | 
|  | 215 | --- build/ --- lib/ | 
|  | 216 | or | 
|  | 217 | --- build/ --- lib.<plat>/ | 
|  | 218 | temp.<plat>/ | 
|  | 219 |  | 
|  | 220 | where ``<plat>`` expands to a brief description of the current OS/hardware | 
|  | 221 | platform and Python version.  The first form, with just a :file:`lib` directory, | 
|  | 222 | is used for "pure module distributions"---that is, module distributions that | 
|  | 223 | include only pure Python modules.  If a module distribution contains any | 
|  | 224 | extensions (modules written in C/C++), then the second form, with two ``<plat>`` | 
|  | 225 | directories, is used.  In that case, the :file:`temp.{plat}` directory holds | 
|  | 226 | temporary files generated by the compile/link process that don't actually get | 
|  | 227 | installed.  In either case, the :file:`lib` (or :file:`lib.{plat}`) directory | 
|  | 228 | contains all Python modules (pure Python and extensions) that will be installed. | 
|  | 229 |  | 
|  | 230 | In the future, more directories will be added to handle Python scripts, | 
|  | 231 | documentation, binary executables, and whatever else is needed to handle the job | 
|  | 232 | of installing Python modules and applications. | 
|  | 233 |  | 
|  | 234 |  | 
|  | 235 | .. _inst-how-install-works: | 
|  | 236 |  | 
|  | 237 | How installation works | 
|  | 238 | ---------------------- | 
|  | 239 |  | 
|  | 240 | After the :command:`build` command runs (whether you run it explicitly, or the | 
|  | 241 | :command:`install` command does it for you), the work of the :command:`install` | 
|  | 242 | command is relatively simple: all it has to do is copy everything under | 
|  | 243 | :file:`build/lib` (or :file:`build/lib.{plat}`) to your chosen installation | 
|  | 244 | directory. | 
|  | 245 |  | 
|  | 246 | If you don't choose an installation directory---i.e., if you just run ``setup.py | 
|  | 247 | install``\ ---then the :command:`install` command installs to the standard | 
|  | 248 | location for third-party Python modules.  This location varies by platform and | 
|  | 249 | by how you built/installed Python itself.  On Unix (and Mac OS X, which is also | 
|  | 250 | Unix-based), it also depends on whether the module distribution being installed | 
|  | 251 | is pure Python or contains extensions ("non-pure"): | 
|  | 252 |  | 
| Georg Brandl | 44ea77b | 2013-03-28 13:28:44 +0100 | [diff] [blame] | 253 | .. tabularcolumns:: |l|l|l|l| | 
|  | 254 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 255 | +-----------------+-----------------------------------------------------+--------------------------------------------------+-------+ | 
|  | 256 | | Platform        | Standard installation location                      | Default value                                    | Notes | | 
|  | 257 | +=================+=====================================================+==================================================+=======+ | 
|  | 258 | | Unix (pure)     | :file:`{prefix}/lib/python{X.Y}/site-packages`      | :file:`/usr/local/lib/python{X.Y}/site-packages` | \(1)  | | 
|  | 259 | +-----------------+-----------------------------------------------------+--------------------------------------------------+-------+ | 
|  | 260 | | Unix (non-pure) | :file:`{exec-prefix}/lib/python{X.Y}/site-packages` | :file:`/usr/local/lib/python{X.Y}/site-packages` | \(1)  | | 
|  | 261 | +-----------------+-----------------------------------------------------+--------------------------------------------------+-------+ | 
| Brian Curtin | 1602ec1 | 2011-05-03 22:01:53 -0500 | [diff] [blame] | 262 | | Windows         | :file:`{prefix}\\Lib\\site-packages`                | :file:`C:\\Python{XY}\\Lib\\site-packages`       | \(2)  | | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 263 | +-----------------+-----------------------------------------------------+--------------------------------------------------+-------+ | 
|  | 264 |  | 
|  | 265 | Notes: | 
|  | 266 |  | 
|  | 267 | (1) | 
|  | 268 | Most Linux distributions include Python as a standard part of the system, so | 
|  | 269 | :file:`{prefix}` and :file:`{exec-prefix}` are usually both :file:`/usr` on | 
|  | 270 | Linux.  If you build Python yourself on Linux (or any Unix-like system), the | 
|  | 271 | default :file:`{prefix}` and :file:`{exec-prefix}` are :file:`/usr/local`. | 
|  | 272 |  | 
|  | 273 | (2) | 
|  | 274 | The default installation directory on Windows was :file:`C:\\Program | 
|  | 275 | Files\\Python` under Python 1.6a1, 1.5.2, and earlier. | 
|  | 276 |  | 
|  | 277 | :file:`{prefix}` and :file:`{exec-prefix}` stand for the directories that Python | 
|  | 278 | is installed to, and where it finds its libraries at run-time.  They are always | 
|  | 279 | the same under Windows, and very often the same under Unix and Mac OS X.  You | 
|  | 280 | can find out what your Python installation uses for :file:`{prefix}` and | 
|  | 281 | :file:`{exec-prefix}` by running Python in interactive mode and typing a few | 
|  | 282 | simple commands. Under Unix, just type ``python`` at the shell prompt.  Under | 
|  | 283 | Windows, choose :menuselection:`Start --> Programs --> Python X.Y --> | 
|  | 284 | Python (command line)`.   Once the interpreter is started, you type Python code | 
|  | 285 | at the prompt.  For example, on my Linux system, I type the three Python | 
|  | 286 | statements shown below, and get the output as shown, to find out my | 
|  | 287 | :file:`{prefix}` and :file:`{exec-prefix}`:: | 
|  | 288 |  | 
| Georg Brandl | c62ef8b | 2009-01-03 20:55:06 +0000 | [diff] [blame] | 289 | Python 2.4 (#26, Aug  7 2004, 17:19:02) | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 290 | Type "help", "copyright", "credits" or "license" for more information. | 
|  | 291 | >>> import sys | 
|  | 292 | >>> sys.prefix | 
|  | 293 | '/usr' | 
|  | 294 | >>> sys.exec_prefix | 
|  | 295 | '/usr' | 
|  | 296 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 297 | A few other placeholders are used in this document: :file:`{X.Y}` stands for the | 
|  | 298 | version of Python, for example ``2.7``; :file:`{distname}` will be replaced by | 
|  | 299 | the name of the module distribution being installed.  Dots and capitalization | 
|  | 300 | are important in the paths; for example, a value that uses ``python2.7`` on UNIX | 
|  | 301 | will typically use ``Python27`` on Windows. | 
|  | 302 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 303 | If you don't want to install modules to the standard location, or if you don't | 
|  | 304 | have permission to write there, then you need to read about alternate | 
|  | 305 | installations in section :ref:`inst-alt-install`.  If you want to customize your | 
|  | 306 | installation directories more heavily, see section :ref:`inst-custom-install` on | 
|  | 307 | custom installations. | 
|  | 308 |  | 
|  | 309 |  | 
|  | 310 | .. _inst-alt-install: | 
|  | 311 |  | 
|  | 312 | Alternate Installation | 
|  | 313 | ====================== | 
|  | 314 |  | 
|  | 315 | Often, it is necessary or desirable to install modules to a location other than | 
|  | 316 | the standard location for third-party Python modules.  For example, on a Unix | 
|  | 317 | system you might not have permission to write to the standard third-party module | 
|  | 318 | directory.  Or you might wish to try out a module before making it a standard | 
|  | 319 | part of your local Python installation.  This is especially true when upgrading | 
|  | 320 | a distribution already present: you want to make sure your existing base of | 
|  | 321 | scripts still works with the new version before actually upgrading. | 
|  | 322 |  | 
|  | 323 | The Distutils :command:`install` command is designed to make installing module | 
|  | 324 | distributions to an alternate location simple and painless.  The basic idea is | 
|  | 325 | that you supply a base directory for the installation, and the | 
|  | 326 | :command:`install` command picks a set of directories (called an *installation | 
|  | 327 | scheme*) under this base directory in which to install files.  The details | 
|  | 328 | differ across platforms, so read whichever of the following sections applies to | 
|  | 329 | you. | 
|  | 330 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 331 | Note that the various alternate installation schemes are mutually exclusive: you | 
|  | 332 | can pass ``--user``, or ``--home``, or ``--prefix`` and ``--exec-prefix``, or | 
|  | 333 | ``--install-base`` and ``--install-platbase``, but you can't mix from these | 
|  | 334 | groups. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 335 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 336 |  | 
|  | 337 | .. _inst-alt-install-user: | 
|  | 338 |  | 
|  | 339 | Alternate installation: the user scheme | 
|  | 340 | --------------------------------------- | 
|  | 341 |  | 
|  | 342 | This scheme is designed to be the most convenient solution for users that don't | 
|  | 343 | have write permission to the global site-packages directory or don't want to | 
|  | 344 | install into it.  It is enabled with a simple option:: | 
|  | 345 |  | 
|  | 346 | python setup.py install --user | 
|  | 347 |  | 
|  | 348 | Files will be installed into subdirectories of :data:`site.USER_BASE` (written | 
|  | 349 | as :file:`{userbase}` hereafter).  This scheme installs pure Python modules and | 
|  | 350 | extension modules in the same location (also known as :data:`site.USER_SITE`). | 
|  | 351 | Here are the values for UNIX, including Mac OS X: | 
|  | 352 |  | 
|  | 353 | =============== =========================================================== | 
|  | 354 | Type of file    Installation directory | 
|  | 355 | =============== =========================================================== | 
|  | 356 | modules         :file:`{userbase}/lib/python{X.Y}/site-packages` | 
|  | 357 | scripts         :file:`{userbase}/bin` | 
|  | 358 | data            :file:`{userbase}` | 
|  | 359 | C headers       :file:`{userbase}/include/python{X.Y}/{distname}` | 
|  | 360 | =============== =========================================================== | 
|  | 361 |  | 
|  | 362 | And here are the values used on Windows: | 
|  | 363 |  | 
|  | 364 | =============== =========================================================== | 
|  | 365 | Type of file    Installation directory | 
|  | 366 | =============== =========================================================== | 
|  | 367 | modules         :file:`{userbase}\\Python{XY}\\site-packages` | 
|  | 368 | scripts         :file:`{userbase}\\Scripts` | 
|  | 369 | data            :file:`{userbase}` | 
|  | 370 | C headers       :file:`{userbase}\\Python{XY}\\Include\\{distname}` | 
|  | 371 | =============== =========================================================== | 
|  | 372 |  | 
|  | 373 | The advantage of using this scheme compared to the other ones described below is | 
|  | 374 | that the user site-packages directory is under normal conditions always included | 
|  | 375 | in :data:`sys.path` (see :mod:`site` for more information), which means that | 
|  | 376 | there is no additional step to perform after running the :file:`setup.py` script | 
|  | 377 | to finalize the installation. | 
|  | 378 |  | 
|  | 379 | The :command:`build_ext` command also has a ``--user`` option to add | 
|  | 380 | :file:`{userbase}/include` to the compiler search path for header files and | 
|  | 381 | :file:`{userbase}/lib` to the compiler search path for libraries as well as to | 
|  | 382 | the runtime search path for shared C libraries (rpath). | 
|  | 383 |  | 
|  | 384 |  | 
|  | 385 | .. _inst-alt-install-home: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 386 |  | 
|  | 387 | Alternate installation: the home scheme | 
|  | 388 | --------------------------------------- | 
|  | 389 |  | 
|  | 390 | The idea behind the "home scheme" is that you build and maintain a personal | 
|  | 391 | stash of Python modules.  This scheme's name is derived from the idea of a | 
|  | 392 | "home" directory on Unix, since it's not unusual for a Unix user to make their | 
|  | 393 | home directory have a layout similar to :file:`/usr/` or :file:`/usr/local/`. | 
| Georg Brandl | 8891e23 | 2010-08-01 21:23:50 +0000 | [diff] [blame] | 394 | This scheme can be used by anyone, regardless of the operating system they | 
|  | 395 | are installing for. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 396 |  | 
|  | 397 | Installing a new module distribution is as simple as :: | 
|  | 398 |  | 
|  | 399 | python setup.py install --home=<dir> | 
|  | 400 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 401 | where you can supply any directory you like for the :option:`!--home` option.  On | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 402 | Unix, lazy typists can just type a tilde (``~``); the :command:`install` command | 
|  | 403 | will expand this to your home directory:: | 
|  | 404 |  | 
|  | 405 | python setup.py install --home=~ | 
|  | 406 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 407 | To make Python find the distributions installed with this scheme, you may have | 
|  | 408 | to :ref:`modify Python's search path <inst-search-path>` or edit | 
|  | 409 | :mod:`sitecustomize` (see :mod:`site`) to call :func:`site.addsitedir` or edit | 
|  | 410 | :data:`sys.path`. | 
|  | 411 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 412 | The :option:`!--home` option defines the installation base directory.  Files are | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 413 | installed to the following directories under the installation base as follows: | 
|  | 414 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 415 | =============== =========================================================== | 
|  | 416 | Type of file    Installation directory | 
|  | 417 | =============== =========================================================== | 
|  | 418 | modules         :file:`{home}/lib/python` | 
|  | 419 | scripts         :file:`{home}/bin` | 
|  | 420 | data            :file:`{home}` | 
|  | 421 | C headers       :file:`{home}/include/python/{distname}` | 
|  | 422 | =============== =========================================================== | 
|  | 423 |  | 
|  | 424 | (Mentally replace slashes with backslashes if you're on Windows.) | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 425 |  | 
|  | 426 | .. versionchanged:: 2.4 | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 427 | The :option:`!--home` option used to be supported only on Unix. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 428 |  | 
|  | 429 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 430 | .. _inst-alt-install-prefix-unix: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 431 |  | 
|  | 432 | Alternate installation: Unix (the prefix scheme) | 
|  | 433 | ------------------------------------------------ | 
|  | 434 |  | 
|  | 435 | The "prefix scheme" is useful when you wish to use one Python installation to | 
|  | 436 | perform the build/install (i.e., to run the setup script), but install modules | 
|  | 437 | into the third-party module directory of a different Python installation (or | 
|  | 438 | something that looks like a different Python installation).  If this sounds a | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 439 | trifle unusual, it is---that's why the user and home schemes come before.  However, | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 440 | there are at least two known cases where the prefix scheme will be useful. | 
|  | 441 |  | 
|  | 442 | First, consider that many Linux distributions put Python in :file:`/usr`, rather | 
|  | 443 | than the more traditional :file:`/usr/local`.  This is entirely appropriate, | 
|  | 444 | since in those cases Python is part of "the system" rather than a local add-on. | 
|  | 445 | However, if you are installing Python modules from source, you probably want | 
|  | 446 | them to go in :file:`/usr/local/lib/python2.{X}` rather than | 
|  | 447 | :file:`/usr/lib/python2.{X}`.  This can be done with :: | 
|  | 448 |  | 
|  | 449 | /usr/bin/python setup.py install --prefix=/usr/local | 
|  | 450 |  | 
|  | 451 | Another possibility is a network filesystem where the name used to write to a | 
|  | 452 | remote directory is different from the name used to read it: for example, the | 
|  | 453 | Python interpreter accessed as :file:`/usr/local/bin/python` might search for | 
|  | 454 | modules in :file:`/usr/local/lib/python2.{X}`, but those modules would have to | 
|  | 455 | be installed to, say, :file:`/mnt/{@server}/export/lib/python2.{X}`.  This could | 
|  | 456 | be done with :: | 
|  | 457 |  | 
|  | 458 | /usr/local/bin/python setup.py install --prefix=/mnt/@server/export | 
|  | 459 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 460 | In either case, the :option:`!--prefix` option defines the installation base, and | 
|  | 461 | the :option:`!--exec-prefix` option defines the platform-specific installation | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 462 | base, which is used for platform-specific files.  (Currently, this just means | 
|  | 463 | non-pure module distributions, but could be expanded to C libraries, binary | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 464 | executables, etc.)  If :option:`!--exec-prefix` is not supplied, it defaults to | 
|  | 465 | :option:`!--prefix`.  Files are installed as follows: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 466 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 467 | ================= ========================================================== | 
|  | 468 | Type of file      Installation directory | 
|  | 469 | ================= ========================================================== | 
|  | 470 | Python modules    :file:`{prefix}/lib/python{X.Y}/site-packages` | 
|  | 471 | extension modules :file:`{exec-prefix}/lib/python{X.Y}/site-packages` | 
|  | 472 | scripts           :file:`{prefix}/bin` | 
|  | 473 | data              :file:`{prefix}` | 
|  | 474 | C headers         :file:`{prefix}/include/python{X.Y}/{distname}` | 
|  | 475 | ================= ========================================================== | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 476 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 477 | There is no requirement that :option:`!--prefix` or :option:`!--exec-prefix` | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 478 | actually point to an alternate Python installation; if the directories listed | 
|  | 479 | above do not already exist, they are created at installation time. | 
|  | 480 |  | 
|  | 481 | Incidentally, the real reason the prefix scheme is important is simply that a | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 482 | standard Unix installation uses the prefix scheme, but with :option:`!--prefix` | 
|  | 483 | and :option:`!--exec-prefix` supplied by Python itself as ``sys.prefix`` and | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 484 | ``sys.exec_prefix``.  Thus, you might think you'll never use the prefix scheme, | 
|  | 485 | but every time you run ``python setup.py install`` without any other options, | 
|  | 486 | you're using it. | 
|  | 487 |  | 
|  | 488 | Note that installing extensions to an alternate Python installation has no | 
|  | 489 | effect on how those extensions are built: in particular, the Python header files | 
|  | 490 | (:file:`Python.h` and friends) installed with the Python interpreter used to run | 
|  | 491 | the setup script will be used in compiling extensions.  It is your | 
|  | 492 | responsibility to ensure that the interpreter used to run extensions installed | 
|  | 493 | in this way is compatible with the interpreter used to build them.  The best way | 
|  | 494 | to do this is to ensure that the two interpreters are the same version of Python | 
|  | 495 | (possibly different builds, or possibly copies of the same build).  (Of course, | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 496 | if your :option:`!--prefix` and :option:`!--exec-prefix` don't even point to an | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 497 | alternate Python installation, this is immaterial.) | 
|  | 498 |  | 
|  | 499 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 500 | .. _inst-alt-install-prefix-windows: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 501 |  | 
|  | 502 | Alternate installation: Windows (the prefix scheme) | 
|  | 503 | --------------------------------------------------- | 
|  | 504 |  | 
|  | 505 | Windows has no concept of a user's home directory, and since the standard Python | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 506 | installation under Windows is simpler than under Unix, the :option:`!--prefix` | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 507 | option has traditionally been used to install additional packages in separate | 
|  | 508 | locations on Windows. :: | 
|  | 509 |  | 
|  | 510 | python setup.py install --prefix="\Temp\Python" | 
|  | 511 |  | 
|  | 512 | to install modules to the :file:`\\Temp\\Python` directory on the current drive. | 
|  | 513 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 514 | The installation base is defined by the :option:`!--prefix` option; the | 
|  | 515 | :option:`!--exec-prefix` option is not supported under Windows, which means that | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 516 | pure Python modules and extension modules are installed into the same location. | 
|  | 517 | Files are installed as follows: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 518 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 519 | =============== ========================================================== | 
|  | 520 | Type of file    Installation directory | 
|  | 521 | =============== ========================================================== | 
|  | 522 | modules         :file:`{prefix}\\Lib\\site-packages` | 
|  | 523 | scripts         :file:`{prefix}\\Scripts` | 
|  | 524 | data            :file:`{prefix}` | 
|  | 525 | C headers       :file:`{prefix}\\Include\\{distname}` | 
|  | 526 | =============== ========================================================== | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 527 |  | 
|  | 528 |  | 
|  | 529 | .. _inst-custom-install: | 
|  | 530 |  | 
|  | 531 | Custom Installation | 
|  | 532 | =================== | 
|  | 533 |  | 
|  | 534 | Sometimes, the alternate installation schemes described in section | 
|  | 535 | :ref:`inst-alt-install` just don't do what you want.  You might want to tweak just | 
|  | 536 | one or two directories while keeping everything under the same base directory, | 
|  | 537 | or you might want to completely redefine the installation scheme.  In either | 
|  | 538 | case, you're creating a *custom installation scheme*. | 
|  | 539 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 540 | To create a custom installation scheme, you start with one of the alternate | 
|  | 541 | schemes and override some of the installation directories used for the various | 
|  | 542 | types of files, using these options: | 
|  | 543 |  | 
|  | 544 | ====================== ======================= | 
|  | 545 | Type of file           Override option | 
|  | 546 | ====================== ======================= | 
|  | 547 | Python modules         ``--install-purelib`` | 
|  | 548 | extension modules      ``--install-platlib`` | 
|  | 549 | all modules            ``--install-lib`` | 
|  | 550 | scripts                ``--install-scripts`` | 
|  | 551 | data                   ``--install-data`` | 
|  | 552 | C headers              ``--install-headers`` | 
|  | 553 | ====================== ======================= | 
|  | 554 |  | 
|  | 555 | These override options can be relative, absolute, | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 556 | or explicitly defined in terms of one of the installation base directories. | 
|  | 557 | (There are two installation base directories, and they are normally the same--- | 
|  | 558 | they only differ when you use the Unix "prefix scheme" and supply different | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 559 | ``--prefix`` and ``--exec-prefix`` options; using ``--install-lib`` will | 
|  | 560 | override values computed or given for ``--install-purelib`` and | 
|  | 561 | ``--install-platlib``, and is recommended for schemes that don't make a | 
|  | 562 | difference between Python and extension modules.) | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 563 |  | 
|  | 564 | For example, say you're installing a module distribution to your home directory | 
|  | 565 | under Unix---but you want scripts to go in :file:`~/scripts` rather than | 
|  | 566 | :file:`~/bin`. As you might expect, you can override this directory with the | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 567 | :option:`!--install-scripts` option; in this case, it makes most sense to supply | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 568 | a relative path, which will be interpreted relative to the installation base | 
|  | 569 | directory (your home directory, in this case):: | 
|  | 570 |  | 
|  | 571 | python setup.py install --home=~ --install-scripts=scripts | 
|  | 572 |  | 
|  | 573 | Another Unix example: suppose your Python installation was built and installed | 
|  | 574 | with a prefix of :file:`/usr/local/python`, so under a standard  installation | 
|  | 575 | scripts will wind up in :file:`/usr/local/python/bin`.  If you want them in | 
|  | 576 | :file:`/usr/local/bin` instead, you would supply this absolute directory for the | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 577 | :option:`!--install-scripts` option:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 578 |  | 
|  | 579 | python setup.py install --install-scripts=/usr/local/bin | 
|  | 580 |  | 
|  | 581 | (This performs an installation using the "prefix scheme," where the prefix is | 
|  | 582 | whatever your Python interpreter was installed with--- :file:`/usr/local/python` | 
|  | 583 | in this case.) | 
|  | 584 |  | 
|  | 585 | If you maintain Python on Windows, you might want third-party modules to live in | 
|  | 586 | a subdirectory of :file:`{prefix}`, rather than right in :file:`{prefix}` | 
|  | 587 | itself.  This is almost as easy as customizing the script installation directory | 
|  | 588 | ---you just have to remember that there are two types of modules to worry about, | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 589 | Python and extension modules, which can conveniently be both controlled by one | 
|  | 590 | option:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 591 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 592 | python setup.py install --install-lib=Site | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 593 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 594 | The specified installation directory is relative to :file:`{prefix}`.  Of | 
|  | 595 | course, you also have to ensure that this directory is in Python's module | 
|  | 596 | search path, such as by putting a :file:`.pth` file in a site directory (see | 
|  | 597 | :mod:`site`).  See section :ref:`inst-search-path` to find out how to modify | 
|  | 598 | Python's search path. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 599 |  | 
|  | 600 | If you want to define an entire installation scheme, you just have to supply all | 
|  | 601 | of the installation directory options.  The recommended way to do this is to | 
|  | 602 | supply relative paths; for example, if you want to maintain all Python | 
|  | 603 | module-related files under :file:`python` in your home directory, and you want a | 
|  | 604 | separate directory for each platform that you use your home directory from, you | 
|  | 605 | might define the following installation scheme:: | 
|  | 606 |  | 
|  | 607 | python setup.py install --home=~ \ | 
|  | 608 | --install-purelib=python/lib \ | 
|  | 609 | --install-platlib=python/lib.$PLAT \ | 
|  | 610 | --install-scripts=python/scripts | 
|  | 611 | --install-data=python/data | 
|  | 612 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 613 | or, equivalently, :: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 614 |  | 
|  | 615 | python setup.py install --home=~/python \ | 
|  | 616 | --install-purelib=lib \ | 
|  | 617 | --install-platlib='lib.$PLAT' \ | 
|  | 618 | --install-scripts=scripts | 
|  | 619 | --install-data=data | 
|  | 620 |  | 
|  | 621 | ``$PLAT`` is not (necessarily) an environment variable---it will be expanded by | 
|  | 622 | the Distutils as it parses your command line options, just as it does when | 
|  | 623 | parsing your configuration file(s). | 
|  | 624 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 625 | Obviously, specifying the entire installation scheme every time you install a | 
|  | 626 | new module distribution would be very tedious.  Thus, you can put these options | 
|  | 627 | into your Distutils config file (see section :ref:`inst-config-files`):: | 
|  | 628 |  | 
|  | 629 | [install] | 
|  | 630 | install-base=$HOME | 
|  | 631 | install-purelib=python/lib | 
|  | 632 | install-platlib=python/lib.$PLAT | 
|  | 633 | install-scripts=python/scripts | 
|  | 634 | install-data=python/data | 
|  | 635 |  | 
|  | 636 | or, equivalently, :: | 
|  | 637 |  | 
|  | 638 | [install] | 
|  | 639 | install-base=$HOME/python | 
|  | 640 | install-purelib=lib | 
|  | 641 | install-platlib=lib.$PLAT | 
|  | 642 | install-scripts=scripts | 
|  | 643 | install-data=data | 
|  | 644 |  | 
|  | 645 | Note that these two are *not* equivalent if you supply a different installation | 
|  | 646 | base directory when you run the setup script.  For example, :: | 
|  | 647 |  | 
|  | 648 | python setup.py install --install-base=/tmp | 
|  | 649 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 650 | would install pure modules to :file:`/tmp/python/lib` in the first case, and | 
|  | 651 | to :file:`/tmp/lib` in the second case.  (For the second case, you probably | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 652 | want to supply an installation base of :file:`/tmp/python`.) | 
|  | 653 |  | 
|  | 654 | You probably noticed the use of ``$HOME`` and ``$PLAT`` in the sample | 
|  | 655 | configuration file input.  These are Distutils configuration variables, which | 
|  | 656 | bear a strong resemblance to environment variables. In fact, you can use | 
|  | 657 | environment variables in config files on platforms that have such a notion but | 
|  | 658 | the Distutils additionally define a few extra variables that may not be in your | 
|  | 659 | environment, such as ``$PLAT``.  (And of course, on systems that don't have | 
|  | 660 | environment variables, such as Mac OS 9, the configuration variables supplied by | 
|  | 661 | the Distutils are the only ones you can use.) See section :ref:`inst-config-files` | 
|  | 662 | for details. | 
|  | 663 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 664 | .. XXX need some Windows examples---when would custom installation schemes be | 
|  | 665 | needed on those platforms? | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 666 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 667 |  | 
| Éric Araujo | e68d450 | 2011-08-19 08:34:52 +0200 | [diff] [blame] | 668 | .. XXX Move this to Doc/using | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 669 |  | 
|  | 670 | .. _inst-search-path: | 
|  | 671 |  | 
|  | 672 | Modifying Python's Search Path | 
|  | 673 | ------------------------------ | 
|  | 674 |  | 
|  | 675 | When the Python interpreter executes an :keyword:`import` statement, it searches | 
|  | 676 | for both Python code and extension modules along a search path.  A default value | 
|  | 677 | for the path is configured into the Python binary when the interpreter is built. | 
|  | 678 | You can determine the path by importing the :mod:`sys` module and printing the | 
|  | 679 | value of ``sys.path``.   :: | 
|  | 680 |  | 
|  | 681 | $ python | 
|  | 682 | Python 2.2 (#11, Oct  3 2002, 13:31:27) | 
|  | 683 | [GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2 | 
| Georg Brandl | fc29f27 | 2009-01-02 20:25:14 +0000 | [diff] [blame] | 684 | Type "help", "copyright", "credits" or "license" for more information. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 685 | >>> import sys | 
|  | 686 | >>> sys.path | 
| Georg Brandl | c62ef8b | 2009-01-03 20:55:06 +0000 | [diff] [blame] | 687 | ['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2', | 
|  | 688 | '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 689 | '/usr/local/lib/python2.3/site-packages'] | 
|  | 690 | >>> | 
|  | 691 |  | 
|  | 692 | The null string in ``sys.path`` represents the current working directory. | 
|  | 693 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 694 | The expected convention for locally installed packages is to put them in the | 
|  | 695 | :file:`{...}/site-packages/` directory, but you may want to install Python | 
|  | 696 | modules into some arbitrary directory.  For example, your site may have a | 
|  | 697 | convention of keeping all software related to the web server under :file:`/www`. | 
|  | 698 | Add-on Python modules might then belong in :file:`/www/python`, and in order to | 
|  | 699 | import them, this directory must be added to ``sys.path``.  There are several | 
|  | 700 | different ways to add the directory. | 
|  | 701 |  | 
|  | 702 | The most convenient way is to add a path configuration file to a directory | 
|  | 703 | that's already on Python's path, usually to the :file:`.../site-packages/` | 
|  | 704 | directory.  Path configuration files have an extension of :file:`.pth`, and each | 
|  | 705 | line must contain a single path that will be appended to ``sys.path``.  (Because | 
|  | 706 | the new paths are appended to ``sys.path``, modules in the added directories | 
|  | 707 | will not override standard modules.  This means you can't use this mechanism for | 
|  | 708 | installing fixed versions of standard modules.) | 
|  | 709 |  | 
|  | 710 | Paths can be absolute or relative, in which case they're relative to the | 
| Brett Cannon | 5cf449c | 2007-11-17 07:07:29 +0000 | [diff] [blame] | 711 | directory containing the :file:`.pth` file.  See the documentation of | 
| Georg Brandl | b3c572b | 2007-08-24 17:46:54 +0000 | [diff] [blame] | 712 | the :mod:`site` module for more information. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 713 |  | 
|  | 714 | A slightly less convenient way is to edit the :file:`site.py` file in Python's | 
|  | 715 | standard library, and modify ``sys.path``.  :file:`site.py` is automatically | 
|  | 716 | imported when the Python interpreter is executed, unless the :option:`-S` switch | 
|  | 717 | is supplied to suppress this behaviour.  So you could simply edit | 
|  | 718 | :file:`site.py` and add two lines to it:: | 
|  | 719 |  | 
|  | 720 | import sys | 
|  | 721 | sys.path.append('/www/python/') | 
|  | 722 |  | 
|  | 723 | However, if you reinstall the same major version of Python (perhaps when | 
|  | 724 | upgrading from 2.2 to 2.2.2, for example) :file:`site.py` will be overwritten by | 
|  | 725 | the stock version.  You'd have to remember that it was modified and save a copy | 
|  | 726 | before doing the installation. | 
|  | 727 |  | 
|  | 728 | There are two environment variables that can modify ``sys.path``. | 
|  | 729 | :envvar:`PYTHONHOME` sets an alternate value for the prefix of the Python | 
|  | 730 | installation.  For example, if :envvar:`PYTHONHOME` is set to ``/www/python``, | 
|  | 731 | the search path will be set to ``['', '/www/python/lib/pythonX.Y/', | 
|  | 732 | '/www/python/lib/pythonX.Y/plat-linux2', ...]``. | 
|  | 733 |  | 
|  | 734 | The :envvar:`PYTHONPATH` variable can be set to a list of paths that will be | 
|  | 735 | added to the beginning of ``sys.path``.  For example, if :envvar:`PYTHONPATH` is | 
|  | 736 | set to ``/www/python:/opt/py``, the search path will begin with | 
|  | 737 | ``['/www/python', '/opt/py']``.  (Note that directories must exist in order to | 
|  | 738 | be added to ``sys.path``; the :mod:`site` module removes paths that don't | 
|  | 739 | exist.) | 
|  | 740 |  | 
|  | 741 | Finally, ``sys.path`` is just a regular Python list, so any Python application | 
|  | 742 | can modify it by adding or removing entries. | 
|  | 743 |  | 
|  | 744 |  | 
|  | 745 | .. _inst-config-files: | 
|  | 746 |  | 
|  | 747 | Distutils Configuration Files | 
|  | 748 | ============================= | 
|  | 749 |  | 
|  | 750 | As mentioned above, you can use Distutils configuration files to record personal | 
|  | 751 | or site preferences for any Distutils options.  That is, any option to any | 
|  | 752 | command can be stored in one of two or three (depending on your platform) | 
|  | 753 | configuration files, which will be consulted before the command-line is parsed. | 
|  | 754 | This means that configuration files will override default values, and the | 
|  | 755 | command-line will in turn override configuration files.  Furthermore, if | 
|  | 756 | multiple configuration files apply, values from "earlier" files are overridden | 
|  | 757 | by "later" files. | 
|  | 758 |  | 
|  | 759 |  | 
|  | 760 | .. _inst-config-filenames: | 
|  | 761 |  | 
|  | 762 | Location and names of config files | 
|  | 763 | ---------------------------------- | 
|  | 764 |  | 
|  | 765 | The names and locations of the configuration files vary slightly across | 
|  | 766 | platforms.  On Unix and Mac OS X, the three configuration files (in the order | 
|  | 767 | they are processed) are: | 
|  | 768 |  | 
|  | 769 | +--------------+----------------------------------------------------------+-------+ | 
|  | 770 | | Type of file | Location and filename                                    | Notes | | 
|  | 771 | +==============+==========================================================+=======+ | 
|  | 772 | | system       | :file:`{prefix}/lib/python{ver}/distutils/distutils.cfg` | \(1)  | | 
|  | 773 | +--------------+----------------------------------------------------------+-------+ | 
|  | 774 | | personal     | :file:`$HOME/.pydistutils.cfg`                           | \(2)  | | 
|  | 775 | +--------------+----------------------------------------------------------+-------+ | 
|  | 776 | | local        | :file:`setup.cfg`                                        | \(3)  | | 
|  | 777 | +--------------+----------------------------------------------------------+-------+ | 
|  | 778 |  | 
|  | 779 | And on Windows, the configuration files are: | 
|  | 780 |  | 
|  | 781 | +--------------+-------------------------------------------------+-------+ | 
|  | 782 | | Type of file | Location and filename                           | Notes | | 
|  | 783 | +==============+=================================================+=======+ | 
|  | 784 | | system       | :file:`{prefix}\\Lib\\distutils\\distutils.cfg` | \(4)  | | 
|  | 785 | +--------------+-------------------------------------------------+-------+ | 
|  | 786 | | personal     | :file:`%HOME%\\pydistutils.cfg`                 | \(5)  | | 
|  | 787 | +--------------+-------------------------------------------------+-------+ | 
|  | 788 | | local        | :file:`setup.cfg`                               | \(3)  | | 
|  | 789 | +--------------+-------------------------------------------------+-------+ | 
|  | 790 |  | 
| Tarek Ziadé | 40b998b | 2009-10-27 23:06:10 +0000 | [diff] [blame] | 791 | On all platforms, the "personal" file can be temporarily disabled by | 
|  | 792 | passing the `--no-user-cfg` option. | 
|  | 793 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 794 | Notes: | 
|  | 795 |  | 
|  | 796 | (1) | 
|  | 797 | Strictly speaking, the system-wide configuration file lives in the directory | 
|  | 798 | where the Distutils are installed; under Python 1.6 and later on Unix, this is | 
|  | 799 | as shown. For Python 1.5.2, the Distutils will normally be installed to | 
|  | 800 | :file:`{prefix}/lib/python1.5/site-packages/distutils`, so the system | 
|  | 801 | configuration file should be put there under Python 1.5.2. | 
|  | 802 |  | 
|  | 803 | (2) | 
|  | 804 | On Unix, if the :envvar:`HOME` environment variable is not defined, the user's | 
|  | 805 | home directory will be determined with the :func:`getpwuid` function from the | 
| Tarek Ziadé | f721666 | 2009-08-21 14:11:26 +0000 | [diff] [blame] | 806 | standard :mod:`pwd` module. This is done by the :func:`os.path.expanduser` | 
|  | 807 | function used by Distutils. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 808 |  | 
|  | 809 | (3) | 
|  | 810 | I.e., in the current directory (usually the location of the setup script). | 
|  | 811 |  | 
|  | 812 | (4) | 
|  | 813 | (See also note (1).)  Under Python 1.6 and later, Python's default "installation | 
|  | 814 | prefix" is :file:`C:\\Python`, so the system configuration file is normally | 
|  | 815 | :file:`C:\\Python\\Lib\\distutils\\distutils.cfg`. Under Python 1.5.2, the | 
|  | 816 | default prefix was :file:`C:\\Program Files\\Python`, and the Distutils were not | 
|  | 817 | part of the standard library---so the system configuration file would be | 
|  | 818 | :file:`C:\\Program Files\\Python\\distutils\\distutils.cfg` in a standard Python | 
|  | 819 | 1.5.2 installation under Windows. | 
|  | 820 |  | 
|  | 821 | (5) | 
| Tarek Ziadé | f721666 | 2009-08-21 14:11:26 +0000 | [diff] [blame] | 822 | On Windows, if the :envvar:`HOME` environment variable is not defined, | 
|  | 823 | :envvar:`USERPROFILE` then :envvar:`HOMEDRIVE` and :envvar:`HOMEPATH` will | 
|  | 824 | be tried. This is done by the :func:`os.path.expanduser` function used | 
|  | 825 | by Distutils. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 826 |  | 
|  | 827 |  | 
|  | 828 | .. _inst-config-syntax: | 
|  | 829 |  | 
|  | 830 | Syntax of config files | 
|  | 831 | ---------------------- | 
|  | 832 |  | 
|  | 833 | The Distutils configuration files all have the same syntax.  The config files | 
|  | 834 | are grouped into sections.  There is one section for each Distutils command, | 
|  | 835 | plus a ``global`` section for global options that affect every command.  Each | 
|  | 836 | section consists of one option per line, specified as ``option=value``. | 
|  | 837 |  | 
|  | 838 | For example, the following is a complete config file that just forces all | 
|  | 839 | commands to run quietly by default:: | 
|  | 840 |  | 
|  | 841 | [global] | 
|  | 842 | verbose=0 | 
|  | 843 |  | 
|  | 844 | If this is installed as the system config file, it will affect all processing of | 
|  | 845 | any Python module distribution by any user on the current system.  If it is | 
|  | 846 | installed as your personal config file (on systems that support them), it will | 
|  | 847 | affect only module distributions processed by you.  And if it is used as the | 
|  | 848 | :file:`setup.cfg` for a particular module distribution, it affects only that | 
|  | 849 | distribution. | 
|  | 850 |  | 
|  | 851 | You could override the default "build base" directory and make the | 
|  | 852 | :command:`build\*` commands always forcibly rebuild all files with the | 
|  | 853 | following:: | 
|  | 854 |  | 
|  | 855 | [build] | 
|  | 856 | build-base=blib | 
|  | 857 | force=1 | 
|  | 858 |  | 
|  | 859 | which corresponds to the command-line arguments :: | 
|  | 860 |  | 
|  | 861 | python setup.py build --build-base=blib --force | 
|  | 862 |  | 
|  | 863 | except that including the :command:`build` command on the command-line means | 
|  | 864 | that command will be run.  Including a particular command in config files has no | 
|  | 865 | such implication; it only means that if the command is run, the options in the | 
|  | 866 | config file will apply.  (Or if other commands that derive values from it are | 
|  | 867 | run, they will use the values in the config file.) | 
|  | 868 |  | 
|  | 869 | You can find out the complete list of options for any command using the | 
| Martin Panter | fb45216 | 2016-04-16 04:59:38 +0000 | [diff] [blame] | 870 | :option:`!--help` option, e.g.:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 871 |  | 
|  | 872 | python setup.py build --help | 
|  | 873 |  | 
|  | 874 | and you can find out the complete list of global options by using | 
| Martin Panter | fb45216 | 2016-04-16 04:59:38 +0000 | [diff] [blame] | 875 | :option:`!--help` without a command:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 876 |  | 
|  | 877 | python setup.py --help | 
|  | 878 |  | 
|  | 879 | See also the "Reference" section of the "Distributing Python Modules" manual. | 
|  | 880 |  | 
|  | 881 |  | 
|  | 882 | .. _inst-building-ext: | 
|  | 883 |  | 
|  | 884 | Building Extensions: Tips and Tricks | 
|  | 885 | ==================================== | 
|  | 886 |  | 
|  | 887 | Whenever possible, the Distutils try to use the configuration information made | 
|  | 888 | available by the Python interpreter used to run the :file:`setup.py` script. | 
|  | 889 | For example, the same compiler and linker flags used to compile Python will also | 
|  | 890 | be used for compiling extensions.  Usually this will work well, but in | 
|  | 891 | complicated situations this might be inappropriate.  This section discusses how | 
|  | 892 | to override the usual Distutils behaviour. | 
|  | 893 |  | 
|  | 894 |  | 
|  | 895 | .. _inst-tweak-flags: | 
|  | 896 |  | 
|  | 897 | Tweaking compiler/linker flags | 
|  | 898 | ------------------------------ | 
|  | 899 |  | 
|  | 900 | Compiling a Python extension written in C or C++ will sometimes require | 
|  | 901 | specifying custom flags for the compiler and linker in order to use a particular | 
|  | 902 | library or produce a special kind of object code. This is especially true if the | 
|  | 903 | extension hasn't been tested on your platform, or if you're trying to | 
|  | 904 | cross-compile Python. | 
|  | 905 |  | 
|  | 906 | In the most general case, the extension author might have foreseen that | 
|  | 907 | compiling the extensions would be complicated, and provided a :file:`Setup` file | 
|  | 908 | for you to edit.  This will likely only be done if the module distribution | 
|  | 909 | contains many separate extension modules, or if they often require elaborate | 
|  | 910 | sets of compiler flags in order to work. | 
|  | 911 |  | 
|  | 912 | A :file:`Setup` file, if present, is parsed in order to get a list of extensions | 
|  | 913 | to build.  Each line in a :file:`Setup` describes a single module.  Lines have | 
|  | 914 | the following structure:: | 
|  | 915 |  | 
|  | 916 | module ... [sourcefile ...] [cpparg ...] [library ...] | 
|  | 917 |  | 
|  | 918 |  | 
|  | 919 | Let's examine each of the fields in turn. | 
|  | 920 |  | 
|  | 921 | * *module* is the name of the extension module to be built, and should be a | 
|  | 922 | valid Python identifier.  You can't just change this in order to rename a module | 
|  | 923 | (edits to the source code would also be needed), so this should be left alone. | 
|  | 924 |  | 
|  | 925 | * *sourcefile* is anything that's likely to be a source code file, at least | 
|  | 926 | judging by the filename.  Filenames ending in :file:`.c` are assumed to be | 
|  | 927 | written in C, filenames ending in :file:`.C`, :file:`.cc`, and :file:`.c++` are | 
|  | 928 | assumed to be C++, and filenames ending in :file:`.m` or :file:`.mm` are assumed | 
|  | 929 | to be in Objective C. | 
|  | 930 |  | 
|  | 931 | * *cpparg* is an argument for the C preprocessor,  and is anything starting with | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 932 | :option:`!-I`, :option:`!-D`, :option:`!-U` or :option:`!-C`. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 933 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 934 | * *library* is anything ending in :file:`.a` or beginning with :option:`!-l` or | 
|  | 935 | :option:`!-L`. | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 936 |  | 
|  | 937 | If a particular platform requires a special library on your platform, you can | 
|  | 938 | add it by editing the :file:`Setup` file and running ``python setup.py build``. | 
|  | 939 | For example, if the module defined by the line :: | 
|  | 940 |  | 
|  | 941 | foo foomodule.c | 
|  | 942 |  | 
|  | 943 | must be linked with the math library :file:`libm.a` on your platform, simply add | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 944 | :option:`!-lm` to the line:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 945 |  | 
|  | 946 | foo foomodule.c -lm | 
|  | 947 |  | 
|  | 948 | Arbitrary switches intended for the compiler or the linker can be supplied with | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 949 | the :option:`!-Xcompiler` *arg* and :option:`!-Xlinker` *arg* options:: | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 950 |  | 
|  | 951 | foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm | 
|  | 952 |  | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 953 | The next option after :option:`!-Xcompiler` and :option:`!-Xlinker` will be | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 954 | appended to the proper command line, so in the above example the compiler will | 
| Martin Panter | e3e362e | 2016-10-30 05:19:02 +0000 | [diff] [blame] | 955 | be passed the :option:`!-o32` option, and the linker will be passed | 
|  | 956 | :option:`!-shared`.  If a compiler option requires an argument, you'll have to | 
|  | 957 | supply multiple :option:`!-Xcompiler` options; for example, to pass ``-x c++`` | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 958 | the :file:`Setup` file would have to contain ``-Xcompiler -x -Xcompiler c++``. | 
|  | 959 |  | 
|  | 960 | Compiler flags can also be supplied through setting the :envvar:`CFLAGS` | 
|  | 961 | environment variable.  If set, the contents of :envvar:`CFLAGS` will be added to | 
|  | 962 | the compiler flags specified in the  :file:`Setup` file. | 
|  | 963 |  | 
|  | 964 |  | 
|  | 965 | .. _inst-non-ms-compilers: | 
|  | 966 |  | 
|  | 967 | Using non-Microsoft compilers on Windows | 
|  | 968 | ---------------------------------------- | 
|  | 969 |  | 
|  | 970 | .. sectionauthor:: Rene Liebscher <R.Liebscher@gmx.de> | 
|  | 971 |  | 
|  | 972 |  | 
|  | 973 |  | 
| Georg Brandl | 0267781 | 2008-03-15 00:20:19 +0000 | [diff] [blame] | 974 | Borland/CodeGear C++ | 
|  | 975 | ^^^^^^^^^^^^^^^^^^^^ | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 976 |  | 
| Georg Brandl | 0267781 | 2008-03-15 00:20:19 +0000 | [diff] [blame] | 977 | This subsection describes the necessary steps to use Distutils with the Borland | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 978 | C++ compiler version 5.5.  First you have to know that Borland's object file | 
|  | 979 | format (OMF) is different from the format used by the Python version you can | 
|  | 980 | download from the Python or ActiveState Web site.  (Python is built with | 
|  | 981 | Microsoft Visual C++, which uses COFF as the object file format.) For this | 
|  | 982 | reason you have to convert Python's library :file:`python25.lib` into the | 
|  | 983 | Borland format.  You can do this as follows: | 
|  | 984 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 985 | .. Should we mention that users have to create cfg-files for the compiler? | 
|  | 986 | .. see also http://community.borland.com/article/0,1410,21205,00.html | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 987 |  | 
|  | 988 | :: | 
|  | 989 |  | 
|  | 990 | coff2omf python25.lib python25_bcpp.lib | 
|  | 991 |  | 
|  | 992 | The :file:`coff2omf` program comes with the Borland compiler.  The file | 
|  | 993 | :file:`python25.lib` is in the :file:`Libs` directory of your Python | 
|  | 994 | installation.  If your extension uses other libraries (zlib, ...) you have to | 
|  | 995 | convert them too. | 
|  | 996 |  | 
|  | 997 | The converted files have to reside in the same directories as the normal | 
|  | 998 | libraries. | 
|  | 999 |  | 
|  | 1000 | How does Distutils manage to use these libraries with their changed names?  If | 
|  | 1001 | the extension needs a library (eg. :file:`foo`) Distutils checks first if it | 
|  | 1002 | finds a library with suffix :file:`_bcpp` (eg. :file:`foo_bcpp.lib`) and then | 
|  | 1003 | uses this library.  In the case it doesn't find such a special library it uses | 
|  | 1004 | the default name (:file:`foo.lib`.) [#]_ | 
|  | 1005 |  | 
|  | 1006 | To let Distutils compile your extension with Borland C++ you now have to type:: | 
|  | 1007 |  | 
|  | 1008 | python setup.py build --compiler=bcpp | 
|  | 1009 |  | 
|  | 1010 | If you want to use the Borland C++ compiler as the default, you could specify | 
|  | 1011 | this in your personal or system-wide configuration file for Distutils (see | 
|  | 1012 | section :ref:`inst-config-files`.) | 
|  | 1013 |  | 
|  | 1014 |  | 
|  | 1015 | .. seealso:: | 
|  | 1016 |  | 
| Serhiy Storchaka | b4905ef | 2016-05-07 10:50:12 +0300 | [diff] [blame] | 1017 | `C++Builder Compiler <https://www.embarcadero.com/products>`_ | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1018 | Information about the free C++ compiler from Borland, including links to the | 
|  | 1019 | download pages. | 
|  | 1020 |  | 
|  | 1021 | `Creating Python Extensions Using Borland's Free Compiler <http://www.cyberus.ca/~g_will/pyExtenDL.shtml>`_ | 
|  | 1022 | Document describing how to use Borland's free command-line C++ compiler to build | 
|  | 1023 | Python. | 
|  | 1024 |  | 
|  | 1025 |  | 
|  | 1026 | GNU C / Cygwin / MinGW | 
|  | 1027 | ^^^^^^^^^^^^^^^^^^^^^^ | 
|  | 1028 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1029 | This section describes the necessary steps to use Distutils with the GNU C/C++ | 
|  | 1030 | compilers in their Cygwin and MinGW distributions. [#]_ For a Python interpreter | 
|  | 1031 | that was built with Cygwin, everything should work without any of these | 
|  | 1032 | following steps. | 
|  | 1033 |  | 
| Éric Araujo | be98fab | 2010-12-15 22:20:15 +0000 | [diff] [blame] | 1034 | Not all extensions can be built with MinGW or Cygwin, but many can.  Extensions | 
|  | 1035 | most likely to not work are those that use C++ or depend on Microsoft Visual C | 
|  | 1036 | extensions. | 
|  | 1037 |  | 
|  | 1038 | To let Distutils compile your extension with Cygwin you have to type:: | 
|  | 1039 |  | 
|  | 1040 | python setup.py build --compiler=cygwin | 
|  | 1041 |  | 
|  | 1042 | and for Cygwin in no-cygwin mode [#]_ or for MinGW type:: | 
|  | 1043 |  | 
|  | 1044 | python setup.py build --compiler=mingw32 | 
|  | 1045 |  | 
|  | 1046 | If you want to use any of these options/compilers as default, you should | 
|  | 1047 | consider writing it in your personal or system-wide configuration file for | 
|  | 1048 | Distutils (see section :ref:`inst-config-files`.) | 
|  | 1049 |  | 
|  | 1050 | Older Versions of Python and MinGW | 
|  | 1051 | """""""""""""""""""""""""""""""""" | 
|  | 1052 | The following instructions only apply if you're using a version of Python | 
|  | 1053 | inferior to 2.4.1 with a MinGW inferior to 3.0.0 (with | 
|  | 1054 | binutils-2.13.90-20030111-1). | 
|  | 1055 |  | 
|  | 1056 | These compilers require some special libraries.  This task is more complex than | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1057 | for Borland's C++, because there is no program to convert the library.  First | 
|  | 1058 | you have to create a list of symbols which the Python DLL exports. (You can find | 
| Georg Brandl | a4314c2 | 2009-10-11 20:16:16 +0000 | [diff] [blame] | 1059 | a good program for this task at | 
| Serhiy Storchaka | b4905ef | 2016-05-07 10:50:12 +0300 | [diff] [blame] | 1060 | https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/). | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1061 |  | 
| Georg Brandl | b19be57 | 2007-12-29 10:57:00 +0000 | [diff] [blame] | 1062 | .. I don't understand what the next line means. --amk | 
|  | 1063 | .. (inclusive the references on data structures.) | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1064 |  | 
|  | 1065 | :: | 
|  | 1066 |  | 
|  | 1067 | pexports python25.dll >python25.def | 
|  | 1068 |  | 
|  | 1069 | The location of an installed :file:`python25.dll` will depend on the | 
|  | 1070 | installation options and the version and language of Windows.  In a "just for | 
|  | 1071 | me" installation, it will appear in the root of the installation directory.  In | 
|  | 1072 | a shared installation, it will be located in the system directory. | 
|  | 1073 |  | 
|  | 1074 | Then you can create from these information an import library for gcc. :: | 
|  | 1075 |  | 
|  | 1076 | /cygwin/bin/dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a | 
|  | 1077 |  | 
|  | 1078 | The resulting library has to be placed in the same directory as | 
|  | 1079 | :file:`python25.lib`. (Should be the :file:`libs` directory under your Python | 
|  | 1080 | installation directory.) | 
|  | 1081 |  | 
|  | 1082 | If your extension uses other libraries (zlib,...) you might  have to convert | 
|  | 1083 | them too. The converted files have to reside in the same directories as the | 
|  | 1084 | normal libraries do. | 
|  | 1085 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1086 |  | 
|  | 1087 | .. seealso:: | 
|  | 1088 |  | 
| Georg Brandl | 97ae466 | 2014-10-29 10:26:56 +0100 | [diff] [blame] | 1089 | `Building Python modules on MS Windows platform with MinGW <http://old.zope.org/Members/als/tips/win32_mingw_modules>`_ | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1090 | Information about building the required libraries for the MinGW environment. | 
|  | 1091 |  | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1092 |  | 
|  | 1093 | .. rubric:: Footnotes | 
|  | 1094 |  | 
|  | 1095 | .. [#] This also means you could replace all existing COFF-libraries with OMF-libraries | 
|  | 1096 | of the same name. | 
|  | 1097 |  | 
| Serhiy Storchaka | b4905ef | 2016-05-07 10:50:12 +0300 | [diff] [blame] | 1098 | .. [#] Check https://www.sourceware.org/cygwin/ and http://www.mingw.org/ for more | 
| Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1099 | information | 
|  | 1100 |  | 
|  | 1101 | .. [#] Then you have no POSIX emulation available, but you also don't need | 
|  | 1102 | :file:`cygwin1.dll`. |