Home | History | Annotate | Download | only in docs
      1 =====================================
      2 The Internal Structure of Python Eggs
      3 =====================================
      4 
      5 STOP! This is not the first document you should read!
      6 
      7 
      8 
      9 .. contents:: **Table of Contents**
     10 
     11 
     12 ----------------------
     13 Eggs and their Formats
     14 ----------------------
     15 
     16 A "Python egg" is a logical structure embodying the release of a
     17 specific version of a Python project, comprising its code, resources,
     18 and metadata. There are multiple formats that can be used to physically
     19 encode a Python egg, and others can be developed. However, a key
     20 principle of Python eggs is that they should be discoverable and
     21 importable. That is, it should be possible for a Python application to
     22 easily and efficiently find out what eggs are present on a system, and
     23 to ensure that the desired eggs' contents are importable.
     24 
     25 There are two basic formats currently implemented for Python eggs:
     26 
     27 1. ``.egg`` format: a directory or zipfile *containing* the project's
     28    code and resources, along with an ``EGG-INFO`` subdirectory that
     29    contains the project's metadata
     30 
     31 2. ``.egg-info`` format: a file or directory placed *adjacent* to the
     32    project's code and resources, that directly contains the project's
     33    metadata.
     34 
     35 Both formats can include arbitrary Python code and resources, including
     36 static data files, package and non-package directories, Python
     37 modules, C extension modules, and so on.  But each format is optimized
     38 for different purposes.
     39 
     40 The ``.egg`` format is well-suited to distribution and the easy
     41 uninstallation or upgrades of code, since the project is essentially
     42 self-contained within a single directory or file, unmingled with any
     43 other projects' code or resources.  It also makes it possible to have
     44 multiple versions of a project simultaneously installed, such that
     45 individual programs can select the versions they wish to use.
     46 
     47 The ``.egg-info`` format, on the other hand, was created to support
     48 backward-compatibility, performance, and ease of installation for system
     49 packaging tools that expect to install all projects' code and resources
     50 to a single directory (e.g. ``site-packages``).  Placing the metadata
     51 in that same directory simplifies the installation process, since it
     52 isn't necessary to create ``.pth`` files or otherwise modify
     53 ``sys.path`` to include each installed egg.
     54 
     55 Its disadvantage, however, is that it provides no support for clean
     56 uninstallation or upgrades, and of course only a single version of a
     57 project can be installed to a given directory. Thus, support from a
     58 package management tool is required. (This is why setuptools' "install"
     59 command refers to this type of egg installation as "single-version,
     60 externally managed".)  Also, they lack sufficient data to allow them to
     61 be copied from their installation source.  easy_install can "ship" an
     62 application by copying ``.egg`` files or directories to a target
     63 location, but it cannot do this for ``.egg-info`` installs, because
     64 there is no way to tell what code and resources belong to a particular
     65 egg -- there may be several eggs "scrambled" together in a single
     66 installation location, and the ``.egg-info`` format does not currently
     67 include a way to list the files that were installed.  (This may change
     68 in a future version.)
     69 
     70 
     71 Code and Resources
     72 ==================
     73 
     74 The layout of the code and resources is dictated by Python's normal
     75 import layout, relative to the egg's "base location".
     76 
     77 For the ``.egg`` format, the base location is the ``.egg`` itself. That
     78 is, adding the ``.egg`` filename or directory name to ``sys.path``
     79 makes its contents importable.
     80 
     81 For the ``.egg-info`` format, however, the base location is the
     82 directory that *contains* the ``.egg-info``, and thus it is the
     83 directory that must be added to ``sys.path`` to make the egg importable.
     84 (Note that this means that the "normal" installation of a package to a
     85 ``sys.path`` directory is sufficient to make it an "egg" if it has an
     86 ``.egg-info`` file or directory installed alongside of it.)
     87 
     88 
     89 Project Metadata
     90 =================
     91 
     92 If eggs contained only code and resources, there would of course be
     93 no difference between them and any other directory or zip file on
     94 ``sys.path``.  Thus, metadata must also be included, using a metadata
     95 file or directory.
     96 
     97 For the ``.egg`` format, the metadata is placed in an ``EGG-INFO``
     98 subdirectory, directly within the ``.egg`` file or directory.  For the
     99 ``.egg-info`` format, metadata is stored directly within the
    100 ``.egg-info`` directory itself.
    101 
    102 The minimum project metadata that all eggs must have is a standard
    103 Python ``PKG-INFO`` file, named ``PKG-INFO`` and placed within the
    104 metadata directory appropriate to the format.  Because it's possible for
    105 this to be the only metadata file included, ``.egg-info`` format eggs
    106 are not required to be a directory; they can just be a ``.egg-info``
    107 file that directly contains the ``PKG-INFO`` metadata.  This eliminates
    108 the need to create a directory just to store one file.  This option is
    109 *not* available for ``.egg`` formats, since setuptools always includes
    110 other metadata.  (In fact, setuptools itself never generates
    111 ``.egg-info`` files, either; the support for using files was added so
    112 that the requirement could easily be satisfied by other tools, such
    113 as distutils).
    114 
    115 In addition to the ``PKG-INFO`` file, an egg's metadata directory may
    116 also include files and directories representing various forms of
    117 optional standard metadata (see the section on `Standard Metadata`_,
    118 below) or user-defined metadata required by the project.  For example,
    119 some projects may define a metadata format to describe their application
    120 plugins, and metadata in this format would then be included by plugin
    121 creators in their projects' metadata directories.
    122 
    123 
    124 Filename-Embedded Metadata
    125 ==========================
    126 
    127 To allow introspection of installed projects and runtime resolution of
    128 inter-project dependencies, a certain amount of information is embedded
    129 in egg filenames.  At a minimum, this includes the project name, and
    130 ideally will also include the project version number.  Optionally, it
    131 can also include the target Python version and required runtime
    132 platform if platform-specific C code is included.  The syntax of an
    133 egg filename is as follows::
    134 
    135     name ["-" version ["-py" pyver ["-" required_platform]]] "." ext
    136 
    137 The "name" and "version" should be escaped using the ``to_filename()``
    138 function provided by ``pkg_resources``, after first processing them with
    139 ``safe_name()`` and ``safe_version()`` respectively.  These latter two
    140 functions can also be used to later "unescape" these parts of the
    141 filename.  (For a detailed description of these transformations, please
    142 see the "Parsing Utilities" section of the ``pkg_resources`` manual.)
    143 
    144 The "pyver" string is the Python major version, as found in the first
    145 3 characters of ``sys.version``.  "required_platform" is essentially
    146 a distutils ``get_platform()`` string, but with enhancements to properly
    147 distinguish Mac OS versions.  (See the ``get_build_platform()``
    148 documentation in the "Platform Utilities" section of the
    149 ``pkg_resources`` manual for more details.)
    150 
    151 Finally, the "ext" is either ``.egg`` or ``.egg-info``, as appropriate
    152 for the egg's format.
    153 
    154 Normally, an egg's filename should include at least the project name and
    155 version, as this allows the runtime system to find desired project
    156 versions without having to read the egg's PKG-INFO to determine its
    157 version number.
    158 
    159 Setuptools, however, only includes the version number in the filename
    160 when an ``.egg`` file is built using the ``bdist_egg`` command, or when
    161 an ``.egg-info`` directory is being installed by the
    162 ``install_egg_info`` command. When generating metadata for use with the
    163 original source tree, it only includes the project name, so that the
    164 directory will not have to be renamed each time the project's version
    165 changes.
    166 
    167 This is especially important when version numbers change frequently, and
    168 the source metadata directory is kept under version control with the
    169 rest of the project.  (As would be the case when the project's source
    170 includes project-defined metadata that is not generated from by
    171 setuptools from data in the setup script.)
    172 
    173 
    174 Egg Links
    175 =========
    176 
    177 In addition to the ``.egg`` and ``.egg-info`` formats, there is a third
    178 egg-related extension that you may encounter on occasion: ``.egg-link``
    179 files.
    180 
    181 These files are not eggs, strictly speaking. They simply provide a way
    182 to reference an egg that is not physically installed in the desired
    183 location. They exist primarily as a cross-platform alternative to
    184 symbolic links, to support "installing" code that is being developed in
    185 a different location than the desired installation location. For
    186 example, if a user is developing an application plugin in their home
    187 directory, but the plugin needs to be "installed" in an application
    188 plugin directory, running "setup.py develop -md /path/to/app/plugins"
    189 will install an ``.egg-link`` file in ``/path/to/app/plugins``, that
    190 tells the egg runtime system where to find the actual egg (the user's
    191 project source directory and its ``.egg-info`` subdirectory).
    192 
    193 ``.egg-link`` files are named following the format for ``.egg`` and
    194 ``.egg-info`` names, but only the project name is included; no version,
    195 Python version, or platform information is included.  When the runtime
    196 searches for available eggs, ``.egg-link`` files are opened and the
    197 actual egg file/directory name is read from them.
    198 
    199 Each ``.egg-link`` file should contain a single file or directory name,
    200 with no newlines.  This filename should be the base location of one or
    201 more eggs.  That is, the name must either end in ``.egg``, or else it
    202 should be the parent directory of one or more ``.egg-info`` format eggs.
    203 
    204 As of setuptools 0.6c6, the path may be specified as a platform-independent
    205 (i.e. ``/``-separated) relative path from the directory containing the
    206 ``.egg-link`` file, and a second line may appear in the file, specifying a
    207 platform-independent relative path from the egg's base directory to its
    208 setup script directory.  This allows installation tools such as EasyInstall
    209 to find the project's setup directory and build eggs or perform other setup
    210 commands on it.
    211 
    212 
    213 -----------------
    214 Standard Metadata
    215 -----------------
    216 
    217 In addition to the minimum required ``PKG-INFO`` metadata, projects can
    218 include a variety of standard metadata files or directories, as
    219 described below.  Except as otherwise noted, these files and directories
    220 are automatically generated by setuptools, based on information supplied
    221 in the setup script or through analysis of the project's code and
    222 resources.
    223 
    224 Most of these files and directories are generated via "egg-info
    225 writers" during execution of the setuptools ``egg_info`` command, and
    226 are listed in the ``egg_info.writers`` entry point group defined by
    227 setuptools' own ``setup.py`` file.
    228 
    229 Project authors can register their own metadata writers as entry points
    230 in this group (as described in the setuptools manual under "Adding new
    231 EGG-INFO Files") to cause setuptools to generate project-specific
    232 metadata files or directories during execution of the ``egg_info``
    233 command.  It is up to project authors to document these new metadata
    234 formats, if they create any.
    235 
    236 
    237 ``.txt`` File Formats
    238 =====================
    239 
    240 Files described in this section that have ``.txt`` extensions have a
    241 simple lexical format consisting of a sequence of text lines, each line
    242 terminated by a linefeed character (regardless of platform).  Leading
    243 and trailing whitespace on each line is ignored, as are blank lines and
    244 lines whose first nonblank character is a ``#`` (comment symbol).  (This
    245 is the parsing format defined by the ``yield_lines()`` function of
    246 the ``pkg_resources`` module.)
    247 
    248 All ``.txt`` files defined by this section follow this format, but some
    249 are also "sectioned" files, meaning that their contents are divided into
    250 sections, using square-bracketed section headers akin to Windows
    251 ``.ini`` format.  Note that this does *not* imply that the lines within
    252 the sections follow an ``.ini`` format, however.  Please see an
    253 individual metadata file's documentation for a description of what the
    254 lines and section names mean in that particular file.
    255 
    256 Sectioned files can be parsed using the ``split_sections()`` function;
    257 see the "Parsing Utilities" section of the ``pkg_resources`` manual for
    258 for details.
    259 
    260 
    261 Dependency Metadata
    262 ===================
    263 
    264 
    265 ``requires.txt``
    266 ----------------
    267 
    268 This is a "sectioned" text file.  Each section is a sequence of
    269 "requirements", as parsed by the ``parse_requirements()`` function;
    270 please see the ``pkg_resources`` manual for the complete requirement
    271 parsing syntax.
    272 
    273 The first, unnamed section (i.e., before the first section header) in
    274 this file is the project's core requirements, which must be installed
    275 for the project to function.  (Specified using the ``install_requires``
    276 keyword to ``setup()``).
    277 
    278 The remaining (named) sections describe the project's "extra"
    279 requirements, as specified using the ``extras_require`` keyword to
    280 ``setup()``.  The section name is the name of the optional feature, and
    281 the section body lists that feature's dependencies.
    282 
    283 Note that it is not normally necessary to inspect this file directly;
    284 ``pkg_resources.Distribution`` objects have a ``requires()`` method
    285 that can be used to obtain ``Requirement`` objects describing the
    286 project's core and optional dependencies.
    287 
    288 
    289 ``setup_requires.txt``
    290 ----------------------
    291 
    292 Much like ``requires.txt`` except represents the requirements
    293 specified by the ``setup_requires`` parameter to the Distribution.
    294 
    295 
    296 ``dependency_links.txt``
    297 ------------------------
    298 
    299 A list of dependency URLs, one per line, as specified using the
    300 ``dependency_links`` keyword to ``setup()``.  These may be direct
    301 download URLs, or the URLs of web pages containing direct download
    302 links, and will be used by EasyInstall to find dependencies, as though
    303 the user had manually provided them via the ``--find-links`` command
    304 line option.  Please see the setuptools manual and EasyInstall manual
    305 for more information on specifying this option, and for information on
    306 how EasyInstall processes ``--find-links`` URLs.
    307 
    308 
    309 ``depends.txt`` -- Obsolete, do not create!
    310 -------------------------------------------
    311 
    312 This file follows an identical format to ``requires.txt``, but is
    313 obsolete and should not be used.  The earliest versions of setuptools
    314 required users to manually create and maintain this file, so the runtime
    315 still supports reading it, if it exists.  The new filename was created
    316 so that it could be automatically generated from ``setup()`` information
    317 without overwriting an existing hand-created ``depends.txt``, if one
    318 was already present in the project's source ``.egg-info`` directory.
    319 
    320 
    321 ``namespace_packages.txt`` -- Namespace Package Metadata
    322 ========================================================
    323 
    324 A list of namespace package names, one per line, as supplied to the
    325 ``namespace_packages`` keyword to ``setup()``.  Please see the manuals
    326 for setuptools and ``pkg_resources`` for more information about
    327 namespace packages.
    328 
    329 
    330 ``entry_points.txt`` -- "Entry Point"/Plugin Metadata
    331 =====================================================
    332 
    333 This is a "sectioned" text file, whose contents encode the
    334 ``entry_points`` keyword supplied to ``setup()``.  All sections are
    335 named, as the section names specify the entry point groups in which the
    336 corresponding section's entry points are registered.
    337 
    338 Each section is a sequence of "entry point" lines, each parseable using
    339 the ``EntryPoint.parse`` classmethod; please see the ``pkg_resources``
    340 manual for the complete entry point parsing syntax.
    341 
    342 Note that it is not necessary to parse this file directly; the
    343 ``pkg_resources`` module provides a variety of APIs to locate and load
    344 entry points automatically.  Please see the setuptools and
    345 ``pkg_resources`` manuals for details on the nature and uses of entry
    346 points.
    347 
    348 
    349 The ``scripts`` Subdirectory
    350 ============================
    351 
    352 This directory is currently only created for ``.egg`` files built by
    353 the setuptools ``bdist_egg`` command.  It will contain copies of all
    354 of the project's "traditional" scripts (i.e., those specified using the
    355 ``scripts`` keyword to ``setup()``).  This is so that they can be
    356 reconstituted when an ``.egg`` file is installed.
    357 
    358 The scripts are placed here using the distutils' standard
    359 ``install_scripts`` command, so any ``#!`` lines reflect the Python
    360 installation where the egg was built.  But instead of copying the
    361 scripts to the local script installation directory, EasyInstall writes
    362 short wrapper scripts that invoke the original scripts from inside the
    363 egg, after ensuring that sys.path includes the egg and any eggs it
    364 depends on.  For more about `script wrappers`_, see the section below on
    365 `Installation and Path Management Issues`_.
    366 
    367 
    368 Zip Support Metadata
    369 ====================
    370 
    371 
    372 ``native_libs.txt``
    373 -------------------
    374 
    375 A list of C extensions and other dynamic link libraries contained in
    376 the egg, one per line.  Paths are ``/``-separated and relative to the
    377 egg's base location.
    378 
    379 This file is generated as part of ``bdist_egg`` processing, and as such
    380 only appears in ``.egg`` files (and ``.egg`` directories created by
    381 unpacking them).  It is used to ensure that all libraries are extracted
    382 from a zipped egg at the same time, in case there is any direct linkage
    383 between them.  Please see the `Zip File Issues`_ section below for more
    384 information on library and resource extraction from ``.egg`` files.
    385 
    386 
    387 ``eager_resources.txt``
    388 -----------------------
    389 
    390 A list of resource files and/or directories, one per line, as specified
    391 via the ``eager_resources`` keyword to ``setup()``.  Paths are
    392 ``/``-separated and relative to the egg's base location.
    393 
    394 Resource files or directories listed here will be extracted
    395 simultaneously, if any of the named resources are extracted, or if any
    396 native libraries listed in ``native_libs.txt`` are extracted.  Please
    397 see the setuptools manual for details on what this feature is used for
    398 and how it works, as well as the `Zip File Issues`_ section below.
    399 
    400 
    401 ``zip-safe`` and ``not-zip-safe``
    402 ---------------------------------
    403 
    404 These are zero-length files, and either one or the other should exist.
    405 If ``zip-safe`` exists, it means that the project will work properly
    406 when installed as an ``.egg`` zipfile, and conversely the existence of
    407 ``not-zip-safe`` means the project should not be installed as an
    408 ``.egg`` file.  The ``zip_safe`` option to setuptools' ``setup()``
    409 determines which file will be written. If the option isn't provided,
    410 setuptools attempts to make its own assessment of whether the package
    411 can work, based on code and content analysis.
    412 
    413 If neither file is present at installation time, EasyInstall defaults
    414 to assuming that the project should be unzipped.  (Command-line options
    415 to EasyInstall, however, take precedence even over an existing
    416 ``zip-safe`` or ``not-zip-safe`` file.)
    417 
    418 Note that these flag files appear only in ``.egg`` files generated by
    419 ``bdist_egg``, and in ``.egg`` directories created by unpacking such an
    420 ``.egg`` file.
    421 
    422 
    423 
    424 ``top_level.txt`` -- Conflict Management Metadata
    425 =================================================
    426 
    427 This file is a list of the top-level module or package names provided
    428 by the project, one Python identifier per line.
    429 
    430 Subpackages are not included; a project containing both a ``foo.bar``
    431 and a ``foo.baz`` would include only one line, ``foo``, in its
    432 ``top_level.txt``.
    433 
    434 This data is used by ``pkg_resources`` at runtime to issue a warning if
    435 an egg is added to ``sys.path`` when its contained packages may have
    436 already been imported.
    437 
    438 (It was also once used to detect conflicts with non-egg packages at
    439 installation time, but in more recent versions, setuptools installs eggs
    440 in such a way that they always override non-egg packages, thus
    441 preventing a problem from arising.)
    442 
    443 
    444 ``SOURCES.txt`` -- Source Files Manifest
    445 ========================================
    446 
    447 This file is roughly equivalent to the distutils' ``MANIFEST`` file.
    448 The differences are as follows:
    449 
    450 * The filenames always use ``/`` as a path separator, which must be
    451   converted back to a platform-specific path whenever they are read.
    452 
    453 * The file is automatically generated by setuptools whenever the
    454   ``egg_info`` or ``sdist`` commands are run, and it is *not*
    455   user-editable.
    456 
    457 Although this metadata is included with distributed eggs, it is not
    458 actually used at runtime for any purpose.  Its function is to ensure
    459 that setuptools-built *source* distributions can correctly discover
    460 what files are part of the project's source, even if the list had been
    461 generated using revision control metadata on the original author's
    462 system.
    463 
    464 In other words, ``SOURCES.txt`` has little or no runtime value for being
    465 included in distributed eggs, and it is possible that future versions of
    466 the ``bdist_egg`` and ``install_egg_info`` commands will strip it before
    467 installation or distribution.  Therefore, do not rely on its being
    468 available outside of an original source directory or source
    469 distribution.
    470 
    471 
    472 ------------------------------
    473 Other Technical Considerations
    474 ------------------------------
    475 
    476 
    477 Zip File Issues
    478 ===============
    479 
    480 Although zip files resemble directories, they are not fully
    481 substitutable for them.  Most platforms do not support loading dynamic
    482 link libraries contained in zipfiles, so it is not possible to directly
    483 import C extensions from ``.egg`` zipfiles.  Similarly, there are many
    484 existing libraries -- whether in Python or C -- that require actual
    485 operating system filenames, and do not work with arbitrary "file-like"
    486 objects or in-memory strings, and thus cannot operate directly on the
    487 contents of zip files.
    488 
    489 To address these issues, the ``pkg_resources`` module provides a
    490 "resource API" to support obtaining either the contents of a resource,
    491 or a true operating system filename for the resource.  If the egg
    492 containing the resource is a directory, the resource's real filename
    493 is simply returned.  However, if the egg is a zipfile, then the
    494 resource is first extracted to a cache directory, and the filename
    495 within the cache is returned.
    496 
    497 The cache directory is determined by the ``pkg_resources`` API; please
    498 see the ``set_cache_path()`` and ``get_default_cache()`` documentation
    499 for details.
    500 
    501 
    502 The Extraction Process
    503 ----------------------
    504 
    505 Resources are extracted to a cache subdirectory whose name is based
    506 on the enclosing ``.egg`` filename and the path to the resource.  If
    507 there is already a file of the correct name, size, and timestamp, its
    508 filename is returned to the requester.  Otherwise, the desired file is
    509 extracted first to a temporary name generated using
    510 ``mkstemp(".$extract",target_dir)``, and then its timestamp is set to
    511 match the one in the zip file, before renaming it to its final name.
    512 (Some collision detection and resolution code is used to handle the
    513 fact that Windows doesn't overwrite files when renaming.)
    514 
    515 If a resource directory is requested, all of its contents are
    516 recursively extracted in this fashion, to ensure that the directory
    517 name can be used as if it were valid all along.
    518 
    519 If the resource requested for extraction is listed in the
    520 ``native_libs.txt`` or ``eager_resources.txt`` metadata files, then
    521 *all* resources listed in *either* file will be extracted before the
    522 requested resource's filename is returned, thus ensuring that all
    523 C extensions and data used by them will be simultaneously available.
    524 
    525 
    526 Extension Import Wrappers
    527 -------------------------
    528 
    529 Since Python's built-in zip import feature does not support loading
    530 C extension modules from zipfiles, the setuptools ``bdist_egg`` command
    531 generates special import wrappers to make it work.
    532 
    533 The wrappers are ``.py`` files (along with corresponding ``.pyc``
    534 and/or ``.pyo`` files) that have the same module name as the
    535 corresponding C extension.  These wrappers are located in the same
    536 package directory (or top-level directory) within the zipfile, so that
    537 say, ``foomodule.so`` will get a corresponding ``foo.py``, while
    538 ``bar/baz.pyd`` will get a corresponding ``bar/baz.py``.
    539 
    540 These wrapper files contain a short stanza of Python code that asks
    541 ``pkg_resources`` for the filename of the corresponding C extension,
    542 then reloads the module using the obtained filename.  This will cause
    543 ``pkg_resources`` to first ensure that all of the egg's C extensions
    544 (and any accompanying "eager resources") are extracted to the cache
    545 before attempting to link to the C library.
    546 
    547 Note, by the way, that ``.egg`` directories will also contain these
    548 wrapper files.  However, Python's default import priority is such that
    549 C extensions take precedence over same-named Python modules, so the
    550 import wrappers are ignored unless the egg is a zipfile.
    551 
    552 
    553 Installation and Path Management Issues
    554 =======================================
    555 
    556 Python's initial setup of ``sys.path`` is very dependent on the Python
    557 version and installation platform, as well as how Python was started
    558 (i.e., script vs. ``-c`` vs. ``-m`` vs. interactive interpreter).
    559 In fact, Python also provides only two relatively robust ways to affect
    560 ``sys.path`` outside of direct manipulation in code: the ``PYTHONPATH``
    561 environment variable, and ``.pth`` files.
    562 
    563 However, with no cross-platform way to safely and persistently change
    564 environment variables, this leaves ``.pth`` files as EasyInstall's only
    565 real option for persistent configuration of ``sys.path``.
    566 
    567 But ``.pth`` files are rather strictly limited in what they are allowed
    568 to do normally.  They add directories only to the *end* of ``sys.path``,
    569 after any locally-installed ``site-packages`` directory, and they are
    570 only processed *in* the ``site-packages`` directory to start with.
    571 
    572 This is a double whammy for users who lack write access to that
    573 directory, because they can't create a ``.pth`` file that Python will
    574 read, and even if a sympathetic system administrator adds one for them
    575 that calls ``site.addsitedir()`` to allow some other directory to
    576 contain ``.pth`` files, they won't be able to install newer versions of
    577 anything that's installed in the systemwide ``site-packages``, because
    578 their paths will still be added *after* ``site-packages``.
    579 
    580 So EasyInstall applies two workarounds to solve these problems.
    581 
    582 The first is that EasyInstall leverages ``.pth`` files' "import" feature
    583 to manipulate ``sys.path`` and ensure that anything EasyInstall adds
    584 to a ``.pth`` file will always appear before both the standard library
    585 and the local ``site-packages`` directories.  Thus, it is always
    586 possible for a user who can write a Python-read ``.pth`` file to ensure
    587 that their packages come first in their own environment.
    588 
    589 Second, when installing to a ``PYTHONPATH`` directory (as opposed to
    590 a "site" directory like ``site-packages``) EasyInstall will also install
    591 a special version of the ``site`` module.  Because it's in a
    592 ``PYTHONPATH`` directory, this module will get control before the
    593 standard library version of ``site`` does.  It will record the state of
    594 ``sys.path`` before invoking the "real" ``site`` module, and then
    595 afterwards it processes any ``.pth`` files found in ``PYTHONPATH``
    596 directories, including all the fixups needed to ensure that eggs always
    597 appear before the standard library in sys.path, but are in a relative
    598 order to one another that is defined by their ``PYTHONPATH`` and
    599 ``.pth``-prescribed sequence.
    600 
    601 The net result of these changes is that ``sys.path`` order will be
    602 as follows at runtime:
    603 
    604 1. The ``sys.argv[0]`` directory, or an empty string if no script
    605    is being executed.
    606 
    607 2. All eggs installed by EasyInstall in any ``.pth`` file in each
    608    ``PYTHONPATH`` directory, in order first by ``PYTHONPATH`` order,
    609    then normal ``.pth`` processing order (which is to say alphabetical
    610    by ``.pth`` filename, then by the order of listing within each
    611    ``.pth`` file).
    612 
    613 3. All eggs installed by EasyInstall in any ``.pth`` file in each "site"
    614    directory (such as ``site-packages``), following the same ordering
    615    rules as for the ones on ``PYTHONPATH``.
    616 
    617 4. The ``PYTHONPATH`` directories themselves, in their original order
    618 
    619 5. Any paths from ``.pth`` files found on ``PYTHONPATH`` that were *not*
    620    eggs installed by EasyInstall, again following the same relative
    621    ordering rules.
    622 
    623 6. The standard library and "site" directories, along with the contents
    624    of any ``.pth`` files found in the "site" directories.
    625 
    626 Notice that sections 1, 4, and 6 comprise the "normal" Python setup for
    627 ``sys.path``.  Sections 2 and 3 are inserted to support eggs, and
    628 section 5 emulates what the "normal" semantics of ``.pth`` files on
    629 ``PYTHONPATH`` would be if Python natively supported them.
    630 
    631 For further discussion of the tradeoffs that went into this design, as
    632 well as notes on the actual magic inserted into ``.pth`` files to make
    633 them do these things, please see also the following messages to the
    634 distutils-SIG mailing list:
    635 
    636 * http://mail.python.org/pipermail/distutils-sig/2006-February/006026.html
    637 * http://mail.python.org/pipermail/distutils-sig/2006-March/006123.html
    638 
    639 
    640 Script Wrappers
    641 ---------------
    642 
    643 EasyInstall never directly installs a project's original scripts to
    644 a script installation directory.  Instead, it writes short wrapper
    645 scripts that first ensure that the project's dependencies are active
    646 on sys.path, before invoking the original script.  These wrappers
    647 have a #! line that points to the version of Python that was used to
    648 install them, and their second line is always a comment that indicates
    649 the type of script wrapper, the project version required for the script
    650 to run, and information identifying the script to be invoked.
    651 
    652 The format of this marker line is::
    653 
    654     "# EASY-INSTALL-" script_type ": " tuple_of_strings "\n"
    655 
    656 The ``script_type`` is one of ``SCRIPT``, ``DEV-SCRIPT``, or
    657 ``ENTRY-SCRIPT``.  The ``tuple_of_strings`` is a comma-separated
    658 sequence of Python string constants.  For ``SCRIPT`` and ``DEV-SCRIPT``
    659 wrappers, there are two strings: the project version requirement, and
    660 the script name (as a filename within the ``scripts`` metadata
    661 directory).  For ``ENTRY-SCRIPT`` wrappers, there are three:
    662 the project version requirement, the entry point group name, and the
    663 entry point name.  (See the "Automatic Script Creation" section in the
    664 setuptools manual for more information about entry point scripts.)
    665 
    666 In each case, the project version requirement string will be a string
    667 parseable with the ``pkg_resources`` modules' ``Requirement.parse()``
    668 classmethod.  The only difference between a ``SCRIPT`` wrapper and a
    669 ``DEV-SCRIPT`` is that a ``DEV-SCRIPT`` actually executes the original
    670 source script in the project's source tree, and is created when the
    671 "setup.py develop" command is run.  A ``SCRIPT`` wrapper, on the other
    672 hand, uses the "installed" script written to the ``EGG-INFO/scripts``
    673 subdirectory of the corresponding ``.egg`` zipfile or directory.
    674 (``.egg-info`` eggs do not have script wrappers associated with them,
    675 except in the "setup.py develop" case.)
    676 
    677 The purpose of including the marker line in generated script wrappers is
    678 to facilitate introspection of installed scripts, and their relationship
    679 to installed eggs.  For example, an uninstallation tool could use this
    680 data to identify what scripts can safely be removed, and/or identify
    681 what scripts would stop working if a particular egg is uninstalled.
    682 
    683