Sat Jul 31 10:00:14 GMT Daylight Time 2010 david-sarah@jacaranda.org * Changes to handling of scripts on Windows: get rid of .exe wrappers and use .pyscript/.pyw files instead. New patches: [Changes to handling of scripts on Windows: get rid of .exe wrappers and use .pyscript/.pyw files instead. david-sarah@jacaranda.org**20100731090014 Ignore-this: 388569f1be1002641bb928a812ebe28a ] hunk ./README.txt 1 -=============================== -Installing and Using Setuptools -=============================== +====================== +This is not Setuptools +====================== hunk ./README.txt 5 -.. contents:: **Table of Contents** +This is the ``zetuptoolz`` fork of setuptools, which is used to install +`Tahoe-LAFS`_. It has a `darcs source repository`_ and `issue tracker`_. hunk ./README.txt 8 +For a list of differences between this fork and setuptools, see zetuptoolz.txt. hunk ./README.txt 10 -------------------------- -Installation Instructions -------------------------- +Note that, to avoid interfering with any setuptools installation, zetuptoolz +does not install a script called ``easy_install``. There is an ``easy_install_z`` +script, but that is intended only for developers to test differences between +setuptools and zetuptoolz. hunk ./README.txt 15 -Windows -======= +.. _Tahoe-LAFS: http://tahoe-lafs.org/ +.. _darcs source repository: http://tahoe-lafs.org/source/zetuptoolz/trunk +.. _issue tracker: http://tahoe-lafs.org/trac/zetuptoolz hunk ./README.txt 19 -Install setuptools using the provided ``.exe`` installer. If you've previously -installed older versions of setuptools, please delete all ``setuptools*.egg`` -and ``setuptools.pth`` files from your system's ``site-packages`` directory -(and any other ``sys.path`` directories) FIRST. - -If you are upgrading a previous version of setuptools that was installed using -an ``.exe`` installer, please be sure to also *uninstall that older version* -via your system's "Add/Remove Programs" feature, BEFORE installing the newer -version. - -Once installation is complete, you will find an ``easy_install.exe`` program in -your Python ``Scripts`` subdirectory. Be sure to add this directory to your -``PATH`` environment variable, if you haven't already done so. - - -RPM-Based Systems -================= - -Install setuptools using the provided source RPM. The included ``.spec`` file -assumes you are installing using the default ``python`` executable, and is not -specific to a particular Python version. The ``easy_install`` executable will -be installed to a system ``bin`` directory such as ``/usr/bin``. - -If you wish to install to a location other than the default Python -installation's default ``site-packages`` directory (and ``$prefix/bin`` for -scripts), please use the ``.egg``-based installation approach described in the -following section. - - -Cygwin, Mac OS X, Linux, Other -============================== - -1. Download the appropriate egg for your version of Python (e.g. - ``setuptools-0.6c9-py2.4.egg``). Do NOT rename it. - -2. Run it as if it were a shell script, e.g. ``sh setuptools-0.6c9-py2.4.egg``. - Setuptools will install itself using the matching version of Python (e.g. - ``python2.4``), and will place the ``easy_install`` executable in the - default location for installing Python scripts (as determined by the - standard distutils configuration files, or by the Python installation). - -If you want to install setuptools to somewhere other than ``site-packages`` or -your default distutils installation locations for libraries and scripts, you -may include EasyInstall command-line options such as ``--prefix``, -``--install-dir``, and so on, following the ``.egg`` filename on the same -command line. For example:: - - sh setuptools-0.6c9-py2.4.egg --prefix=~ - -You can use ``--help`` to get a full options list, but we recommend consulting -the `EasyInstall manual`_ for detailed instructions, especially `the section -on custom installation locations`_. - -.. _EasyInstall manual: http://peak.telecommunity.com/DevCenter/EasyInstall -.. _the section on custom installation locations: http://peak.telecommunity.com/DevCenter/EasyInstall#custom-installation-locations - - -Cygwin Note ------------ - -If you are trying to install setuptools for the **Windows** version of Python -(as opposed to the Cygwin version that lives in ``/usr/bin``), you must make -sure that an appropriate executable (``python2.3``, ``python2.4``, or -``python2.5``) is on your **Cygwin** ``PATH`` when invoking the egg. For -example, doing the following at a Cygwin bash prompt will install setuptools -for the **Windows** Python found at ``C:\\Python24``:: - - ln -s /cygdrive/c/Python24/python.exe python2.4 - PATH=.:$PATH sh setuptools-0.6c9-py2.4.egg - rm python2.4 - - -Downloads -========= - -All setuptools downloads can be found at `the project's home page in the Python -Package Index`_. Scroll to the very bottom of the page to find the links. - -.. _the project's home page in the Python Package Index: http://pypi.python.org/pypi/setuptools#files - -In addition to the PyPI downloads, the development version of ``setuptools`` -is available from the `Python SVN sandbox`_, and in-development versions of the -`0.6 branch`_ are available as well. - -.. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 - -.. _Python SVN sandbox: http://svn.python.org/projects/sandbox/trunk/setuptools/#egg=setuptools-dev -------------------------------- Using Setuptools and EasyInstall binary ./cli.exe oldhex *4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000 *000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21 *546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e *0d0d0a2400000000000000504500004c01050049c7b7450000000000000000e0000f030b010238 *000e00000008000000020000701200000010000000200000000040000010000000020000040000 *000100000004000000000000000060000000040000ef6c00000300000000002000001000000000 *1000001000000000000010000000000000000000000000500000d4030000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000002e74657874000000f00c00000010 *0000000e000000040000000000000000000000000000200000602e646174610000003000000000 *2000000002000000120000000000000000000000000000400000c02e7264617461000050000000 *003000000002000000140000000000000000000000000000400000402e62737300000000600000 *00004000000000000000000000000000000000000000000000800000c02e69646174610000d403 *0000005000000004000000160000000000000000000000000000400000c0000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000005589e583ec18895df88b450831db8975fc8b0031f68b003d910000c077 *433d8d0000c0725bbe01000000c704240800000031d289542404e8740b000083f801747a85c074 *0ec7042408000000ffd0bbffffffff89d88b75fc8b5df889ec5dc204003d940000c074c2774a3d *930000c074b489d88b75fc8b5df889ec5dc20400903d050000c0745b3d1d0000c075c5c7042404 *00000031f689742404e8100b000083f801746a85c074aac7042404000000ffd0eb9a3d960000c0 *ebd1c7042408000000b80100000089442404e8e00a000085f60f8476ffffffe863090000e96cff *ffffc704240b00000031c089442404e8bc0a000083f801743085c00f8452ffffffc704240b0000 *00ffd0e93fffffffc7042404000000b901000000894c2404e88c0a0000e925ffffffc704240b00 *0000b80100000089442404e8720a0000e90bffffff8db6000000008dbc27000000005589e55383 *ec24c7042400104000e8fd0a000083ec04e8d5080000c745f8000000008d45f889442410a10020 *4000c70424044040008944240c8d45f489442408b80040400089442404e8420a0000a110404000 *85c07459a3102040008b151c51400085d20f858b00000083fae0741fa11040400089442404a11c *5140008b4030890424e8f80900008b151c51400083fac0741da11040400089442404a11c514000 *8b4050890424e8d40900008d742600e8bb0900008b15102040008910e8fe07000083e4f0e88609 *00008b0089442408a10040400089442404a104404000890424e8ba06000089c3e853090000891c *24e82b0a000089442404a11c5140008b4010890424e8770900008b151c514000e956ffffff8db6 *000000008dbf000000005589e583ec08c7042401000000ff1514514000e8c8feffff908db42600 *0000005589e583ec08c7042402000000ff1514514000e8a8feffff908db42600000000558b0d30 *51400089e55dffe18d742600558b0d2451400089e55dffe1909090905589e583ec188b450c8944 *24088b450889442404a11c51400083c040890424e85c090000b802000000c9c35589e557565383 *ec0c8b750889f7fcb9ffffffffb000f2aef7d18d79ffc7442404010000008d443f03890424e814 *0900008945f0c6002289c242b900000000bb0000000039f97d33803c1e5c750341eb1e803c1e22 *751385c97e09c6025c424985c97ff7c6025c42eb05b9000000000fb6041e8802424339fb7ccd85 *c97e09c6025c424985c97ff7c60222c64201008b45f083c40c5b5e5f5dc35589e5565383ec10c7 *44240808000000c7442404000000008b4508890424e8c808000083ec0c89c6b80000000085f674 *3ec744240401000000c7042404010000e86608000089c385c07417c74424080401000089442404 *893424e89c08000083ec0c893424e8a108000083ec0489d88d65f85b5e5dc35589e557565381ec *4c0400008b75088d5e010fb61684d2741380fa2f7504c643ff5c0fb6034388c284c075ed8d85d8 *fcffff894424108d85d8fdffff8944240c8d85d8feffff894424088d45d889442404893424e8cc *070000807dd800750980bdd8feffff5c750d893424e81affffffe9990000008d85d8fcffff8944 *24108d85d8fdffff8944240c8d9dd8feffff895c24088d45d8894424048b450c890424e8800700 *0089dffcb9ffffffffb000f2aef7d18d5c19fe803b5c75064b803b5c74198d85d8feffff89c239 *d8770dc603004b803b5c740439da76f3c7442410000000008974240c8d85d8feffff894424088d *45d8894424048d9dc8fbffff891c24e80f070000891c24e87cfeffff81c44c0400005b5e5f5dc3 *5589e557565383ec1c8b5d0889dffcb9ffffffffb000f2aef7d149c744240404000000890c24e8 *f10600008945f089debf00000000c745e8000000008b450cc700000000008b55f0891aeb01430f *be03890424e89406000085c075f00fb603438845ef84c074150fbec0890424e87a06000085c074 *47837de800754185ff7407c6065c464f75f9c60600468b550c8b024089028b55f0893482807def *00750589d0eb65430fbe03890424e83d06000085c075f0803b0075a48b45f0eb4b807def5c7503 *47eb96807def22751bf7c7010000007511837de8000f94c00fb6c08945e8c645ef00d1ff85ff74 *07c6065c464f75f9807def000f8460ffffff0fb645ef880646e954ffffff83c41c5b5e5f5dc355 *89e557565381ec2c020000c7442408000100008d9de8fdffff895c2404c7042400000000e83206 *000083ec0c89dffcb9ffffffffb000f2aef7d18d7419ff39f37314803e2e740f89d8c606004e39 *f07305803e2e75f3c606008db5e8fdffff89f7fcb9ffffffffb000f2aef7d149c7040e2d736372 *c7440e046970742e66c7440e087079c6440e0a00c744240400000000893424e8a204000089c383 *f8ff751589742404c7042400304000e8ebfbffffe9c50100008db5e8feffffc744240800010000 *89742404890424e85c04000001c6891c24e8420400008dbde7feffff4739f7730f803f00740a80 *3f0a7405803f0d75ecc607008db5e8feffffbf10304000b902000000fcf3a60f97c20f92c038c2 *7425c785e8feffff23217079c785ecfeffff74686f6ec785f0feffff2e657865c685f4feffff00 *8d85e4fdffff894424048d85eafeffff890424e89ffdffff8985dcfdffff8d85e8fdffff894424 *048b95dcfdffff8b02890424e866fcffff89c785c0751d8b95dcfdffff8b0289442404c7042414 *304000e80dfbffffe9e7000000c7442404040000008b45080385e4fdffff40890424e85e040000 *8985e0fdffff893c24e80bfbffff8b95e0fdffff890289d383c304be010000003bb5e4fdffff7d *1f8b95dcfdffff8b04b2890424e8e0faffff890383c304463bb5e4fdffff7ce18d85e8fdffff89 *0424e8c4faffff890383c304be010000003b75087d198b550c8b04b2890424e8a7faffff890383 *c304463b75087ce7c70300000000837d1000742a8b85e0fdffff894424048d9de8feffff891c24 *e8bd020000895c2404c7042436304000e83dfaffffeb1a8b95e0fdffff89542408897c2404c704 *2400000000e8810200008d65f45b5e5f5dc35589e55383ec14e82d03000089c3e836030000c744 *2408000000008b13895424048b00890424e852fdffff83c4145b5dc2100090909090909055b810 *00000089e55383ec6483e4f0e8fc010000e8d7010000e8a203000089c38d45a8890424e8a50300 *0083ec0485db7506e99d000000430fb60b80f9200f94c080f9090f94c209d0a80175ea80f92274 *3e80f9200f95c031d280f9090f95c285d0744c8db6000000008dbf0000000084c9743c430fb60b *80f9200f95c031d280f9090f95c285d075e6eb248d742600430fb60b80f9220f95c031d284c90f *95c285d075eb80f92274668db60000000080f9200f94c080f9090f94c2eb1089f6430fb6033c20 *0f94c23c090f94c009d0a80175ecc7042400000000e80003000083ec04f645d401ba0a00000074 *040fb755d88954240c31d2895c240889542404890424e8bffeffff83ec108b5dfcc9c3430fb60b *eb9a9090909090909090909055b95030400089e5eb148db6000000008b51048b0183c108018200 *00400081f95030400072ea5dc390909090909090905589e5dbe35dc39090909090909090905589 *e583ec08a1202040008338007417ff108b15202040008d42048b5204a32020400085d275e9c9c3 *8db426000000005589e55383ec04a1e01c400083f8ff742985c089c3741389f68dbc2700000000 *ff149de01c40004b75f6c70424501a4000e8faf7ffff595b5dc331c0833de41c400000eb0a408b *1c85e41c400085db75f4ebbe8db6000000008dbc270000000055a12040400089e585c074045dc3 *89f65db801000000a320404000eb839090905189e183c1083d00100000721081e9001000008309 *002d00100000ebe929c183090089e089cc8b088b4004ffe0909090ff25f4504000909000000000 *00000000ff25e850400090900000000000000000ff25e450400090900000000000000000ff25f0 *50400090900000000000000000ff25ec50400090900000000000000000ff251451400090900000 *000000000000ff251851400090900000000000000000ff250c51400090900000000000000000ff *254051400090900000000000000000ff251051400090900000000000000000ff25285140009090 *0000000000000000ff250051400090900000000000000000ff2508514000909000000000000000 *00ff250451400090900000000000000000ff253c51400090900000000000000000ff2520514000 *90900000000000000000ff252c51400090900000000000000000ff253451400090900000000000 *000000ff253851400090900000000000000000ff256851400090900000000000000000ff254c51 *400090900000000000000000ff256451400090900000000000000000ff25585140009090000000 *0000000000ff255051400090900000000000000000ff255451400090900000000000000000ff25 *6051400090900000000000000000ff255c51400090900000000000000000ffffffff00000000ff *ffffff000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000ffffffff00000000000000000000000000400000000000000000000000000000ec *1c4000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000043616e6e6f74206f70656e2025730a002321000043616e6e6f742066 *696e6420507974686f6e2065786563757461626c652025730a00436f756c64206e6f7420657865 *632025730000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0000000000000000000000000000000054500000000000000000000048530000e4500000705000 *0000000000000000009853000000510000bc5000000000000000000000c45300004c5100000000 *00000000000000000000000000000000000000000000705100007c510000885100009051000098 *5100000000000000000000a4510000b4510000c4510000d4510000e4510000f451000008520000 *145200001c520000285200003452000040520000505200005c5200006852000074520000805200 *0000000000000000008c5200009c520000ac520000c0520000d8520000ec520000005300001453 *00000000000000000000705100007c5100008851000090510000985100000000000000000000a4 *510000b4510000c4510000d4510000e4510000f451000008520000145200001c52000028520000 *3452000040520000505200005c52000068520000745200008052000000000000000000008c5200 *009c520000ac520000c0520000d8520000ec52000000530000145300000000000006005f636c6f *73650000000012005f6578656376000000003a005f6f70656e0040005f72656164004b005f7370 *61776e7600000027005f5f6765746d61696e617267730031005f5f705f5f5f6172676300000000 *32005f5f705f5f5f61726776000000003c005f5f705f5f656e7669726f6e00003e005f5f705f5f *666d6f64650000000050005f5f7365745f6170705f747970650000000079005f63657869740000 *0000e9005f696f6200001f015f6d616b6570617468005e015f6f6e6578697400000084015f7365 *746d6f6465000092015f73706c697470617468000000001c026174657869740000000021026361 *6c6c6f63000000003902667072696e74660000005a026973737061636500000090027369676e61 *6c000000009b004578697450726f63657373000000d500467265654c696272617279000000ec00 *476574436f6d6d616e644c696e65410000004d014765744d6f64756c6546696c654e616d654100 *0000004f014765744d6f64756c6548616e646c65410000800147657453746172747570496e666f *410000000b024c6f61644c69627261727945784100000000df02536574556e68616e646c656445 *7863657074696f6e46696c74657200000000500000005000000050000000500000005000006d73 *766372742e646c6c00001450000014500000145000001450000014500000145000001450000014 *500000145000001450000014500000145000001450000014500000145000001450000014500000 *6d73766372742e646c6c0000285000002850000028500000285000002850000028500000285000 *00285000004b45524e454c33322e646c6c00000000000000000000000000000000000000000000 *0000000000000000000000000000000000000000000000000000 newhex * rmfile ./cli.exe hunk ./ez_setup.py 17 This file can also be run as a script to install or upgrade setuptools. """ import sys -DEFAULT_VERSION = "0.6c14dev" + +print >>sys.stderr, """ +Warning: This script is unmaintained in the zetuptoolz fork. +It uses a default download location from which zetuptoolz is not actually available. +""" + +DEFAULT_VERSION = "0.6c16dev" DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] md5_data = { binary ./gui.exe oldhex *4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000 *000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21 *546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e *0d0d0a2400000000000000504500004c0105002e737d470000000000000000e0000f030b010238 *001000000008000000020000801200000010000000200000000040000010000000020000040000 *00010000000400000000000000006000000004000010cd00000200000000002000001000000000 *1000001000000000000010000000000000000000000000500000d4030000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000002e74657874000000400e00000010 *00000010000000040000000000000000000000000000200000602e646174610000003000000000 *2000000002000000140000000000000000000000000000400000c02e7264617461000050000000 *003000000002000000160000000000000000000000000000400000402e62737300000000700000 *00004000000000000000000000000000000000000000000000800000c02e69646174610000d403 *0000005000000004000000180000000000000000000000000000400000c0000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000005589e583ec18895df88b550831db8975fc8b0231f68b003d910000c077 *433d8d0000c0725bbe01000000c704240800000031d289542404e8c40c000083f801747a85c074 *0ec7042408000000ffd0bbffffffff89d88b75fc8b5df889ec5dc204003d940000c074c2774a3d *930000c074b489d88b75fc8b5df889ec5dc20400903d050000c0745b3d1d0000c075c5c7042404 *00000031f689742404e8600c000083f801746a85c074aac7042404000000ffd0eb9a3d960000c0 *ebd1c7042408000000b901000000894c2404e8300c000085f60f8476ffffffe8630a0000e96cff *ffffc704240b00000031c9894c2404e80c0c000083f801743085c00f8452ffffffc704240b0000 *00ffd0e93fffffffc7042404000000b80100000089442404e8dc0b0000e925ffffffc704240b00 *0000bb01000000895c2404e8c20b0000e90bffffff8db6000000008dbc27000000005589e55383 *ec248d5df8c7042400104000e84a0c000083ec04e8d2080000e8cd090000c745f800000000b800 *4040008d55f4895c24108b0d002040008944240489542408894c240cc7042404404000e88c0b00 *00a11040400085c07463a3102040008b151c51400085d20f859600000083fae07420a110404000 *894424048b1d1c5140008b4b30890c24e8410b00008b151c51400083fac074268b1d1040400089 *5c24048b0d1c5140008b5150891424e81b0b00008d7426008dbc2700000000e8fb0a00008b1d10 *2040008918e8ee07000083e4f0e8c60a00008b08894c24088b150040400089542404a104404000 *890424e8a906000089c3e8920a0000891c24e86a0b0000894424048b151c5140008b4210890424 *e8b50a00008b151c514000e94affffff8d76008dbc27000000005589e583ec08c7042401000000 *ff1514514000e8b8feffff908db426000000005589e583ec08c7042402000000ff1514514000e8 *98feffff908db42600000000558b0d3051400089e55dffe18d742600558b0d2451400089e55dff *e1909090905589e583ec188b450c894424088b450889442404a11c51400083c040890424e89c0a *0000b802000000c9c35589e557565383ec0c8b750889f7fcb9ffffffffb000f2aef7d18d79ffc7 *442404010000008d443f03890424e8540a00008945f0c6002289c242b900000000bb0000000039 *f97d33803c1e5c750341eb1e803c1e22751385c97e09c6025c424985c97ff7c6025c42eb05b900 *0000000fb6041e8802424339fb7ccd85c97e09c6025c424985c97ff7c60222c64201008b45f083 *c40c5b5e5f5dc35589e5565383ec10c744240808000000c7442404000000008b4508890424e808 *0a000083ec0c89c6b80000000085f6743ec744240401000000c7042404010000e8a609000089c3 *85c07417c74424080401000089442404893424e8dc09000083ec0c893424e8e109000083ec0489 *d88d65f85b5e5dc35589e557565381ec4c0400008b75088d5e010fb61684d2741380fa2f7504c6 *43ff5c0fb6034388c284c075ed8d85d8fcffff894424108d85d8fdffff8944240c8d85d8feffff *894424088d45d889442404893424e80c090000807dd800750980bdd8feffff5c750d893424e81a *ffffffe9990000008d85d8fcffff894424108d85d8fdffff8944240c8d9dd8feffff895c24088d *45d8894424048b450c890424e8c008000089dffcb9ffffffffb000f2aef7d18d5c19fe803b5c75 *064b803b5c74198d85d8feffff89c239d8770dc603004b803b5c740439da76f3c7442410000000 *008974240c8d85d8feffff894424088d45d8894424048d9dc8fbffff891c24e84f080000891c24 *e87cfeffff81c44c0400005b5e5f5dc35589e557565383ec1c8b5d0889dffcb9ffffffffb000f2 *aef7d149c744240404000000890c24e8310800008945f089debf00000000c745e8000000008b45 *0cc700000000008b55f0891aeb01430fbe03890424e8d407000085c075f00fb603438845ef84c0 *74150fbec0890424e8ba07000085c07447837de800754185ff7407c6065c464f75f9c60600468b *550c8b024089028b55f0893482807def00750589d0eb65430fbe03890424e87d07000085c075f0 *803b0075a48b45f0eb4b807def5c750347eb96807def22751bf7c7010000007511837de8000f94 *c00fb6c08945e8c645ef00d1ff85ff7407c6065c464f75f9807def000f8460ffffff0fb645ef88 *0646e954ffffff83c41c5b5e5f5dc35589e557565381ec2c020000c7442408000100008d9de8fd *ffff895c2404c7042400000000e87207000083ec0c89dffcb9ffffffffb000f2aef7d18d7419ff *39f37314803e2e740f89d8c606004e39f07305803e2e75f3c606008db5e8fdffff89f7fcb9ffff *ffffb000f2aef7d149c7040e2d736372c7440e046970742ec7440e0870797700c7442404000000 *00893424e8e605000089c383f8ff751589742404c7042400304000e8effbffffe9bf0100008db5 *e8feffffc74424080001000089742404890424e8a005000001c6891c24e8860500008dbde7feff *ff4739f7730f803f00740a803f0a7405803f0d75ecc607008db5e8feffffbf10304000b9020000 *00fcf3a60f97c20f92c038c27425c785e8feffff23217079c785ecfeffff74686f6ec785f0feff *ff2e657865c685f4feffff008d85e4fdffff894424048d85eafeffff890424e8a3fdffff8985dc *fdffff8d85e8fdffff894424048b95dcfdffff8b02890424e86afcffff89c785c0751d8b95dcfd *ffff8b0289442404c7042414304000e811fbffffe9e1000000c7442404040000008b45080385e4 *fdffff40890424e8a20500008985e0fdffff893c24e80ffbffff8b95e0fdffff890289d383c304 *be010000003bb5e4fdffff7d1f8b95dcfdffff8b04b2890424e8e4faffff890383c304463bb5e4 *fdffff7ce18d85e8fdffff890424e8c8faffff890383c304be010000003b75087d198b550c8b04 *b2890424e8abfaffff890383c304463b75087ce7c70300000000837d100074248b85e0fdffff89 *442404893c24e807040000897c2404c7042436304000e847faffffeb1a8b95e0fdffff89542408 *897c2404c7042400000000e8cb0300008d65f45b5e5f5dc35589e55383ec14e87704000089c3e8 *80040000c7442408010000008b13895424048b00890424e85cfdffff83c4145b5dc2100055b810 *00000089e55383ec6483e4f0e84c030000e8d7020000e8f204000089c38d45a8890424e8f50400 *0083ec0485db7506e99f000000430fb60b80f9200f94c080f9090f94c209d0a80175ea80f92274 *3e80f9200f95c031d280f9090f95c285d0744c8db6000000008dbf0000000084c9743c430fb60b *80f9200f95c031d280f9090f95c285d075e6eb248d742600430fb60b80f9220f95c031d284c90f *95c285d075eb80f92274688db60000000080f9200f94c080f9090f94c2eb126690430fb60b80f9 *200f94c280f9090f94c009d0a80175eac7042400000000e84e04000083ec04f645d401ba0a0000 *0074040fb755d8895c240831db895c24048954240c890424e8c3feffff83ec108b5dfcc9c3430f *b60beb98909090909090909055b95030400089e5eb148db6000000008b51048b0183c108018200 *00400081f95030400072ea5dc390909090909090905589e5539c9c5889c23500002000509d9c58 *9d31d0a9000020000f84c000000031c00fa285c00f84b4000000b8010000000fa2f6c6010f85a7 *00000089d381e3008000006685db7407830d2040400002f7c2000080007407830d2040400004f7 *c2000000017407830d2040400008f7c2000000027407830d204040001081e2000000047407830d *2040400020f6c1017407830d2040400040f6c520740a810d2040400080000000b8000000800fa2 *3d00000080762bb8010000800fa2a12040400089c181c90001000081e200000040741e0d000300 *00a320404000908d7426005b5dc3830d2040400001e94dffffff5b890d204040005dc390909090 *909090905589e5dbe35dc39090909090909090905589e583ec08a1202040008338007417ff108b *0d202040008b51048d4104a32020400085d275e9c9c38db426000000005589e55383ec04a1301e *400083f8ff742985c089c3741389f68dbc2700000000ff149d301e40004b75f6c70424501b4000 *e80af7ffff595b5dc331c0833d341e400000eb0a408b1c85341e400085db75f4ebbe8db6000000 *008dbc27000000005589e55383ec048b1d3040400085db7535a1301e4000b901000000890d3040 *400083f8ff742485c089c3740e8d742600ff149d301e40004b75f6c70424501b4000e89af6ffff *585b5dc331c0833d341e400000eb0a408b1485341e400085d275f4ebc390909090909090909090 *9090905189e183c1083d00100000721081e9001000008309002d00100000ebe929c183090089e0 *89cc8b088b4004ffe0909090ff25f450400090900000000000000000ff25e85040009090000000 *0000000000ff25e450400090900000000000000000ff25f050400090900000000000000000ff25 *ec50400090900000000000000000ff251451400090900000000000000000ff2518514000909000 *00000000000000ff250c51400090900000000000000000ff254051400090900000000000000000 *ff251051400090900000000000000000ff252851400090900000000000000000ff250051400090 *900000000000000000ff250851400090900000000000000000ff25045140009090000000000000 *0000ff253c51400090900000000000000000ff252051400090900000000000000000ff252c5140 *0090900000000000000000ff253451400090900000000000000000ff2538514000909000000000 *00000000ff256851400090900000000000000000ff254c51400090900000000000000000ff2564 *51400090900000000000000000ff255851400090900000000000000000ff255051400090900000 *000000000000ff255451400090900000000000000000ff256051400090900000000000000000ff *255c51400090900000000000000000ffffffff00000000ffffffff000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0000000000000000000000ffffffff000000000000000000000000004000000000000000000000 *000000003c1e400000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0000000000000000000000000000000043616e6e6f74206f70656e2025730a002321000043616e *6e6f742066696e6420507974686f6e2065786563757461626c652025730a00436f756c64206e6f *742065786563202573000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *00000000000000000000000000000000000000000054500000000000000000000048530000e450 *00007050000000000000000000009853000000510000bc5000000000000000000000c45300004c *510000000000000000000000000000000000000000000000000000705100007c51000088510000 *90510000985100000000000000000000a4510000b4510000c4510000d4510000e4510000f45100 *0008520000145200001c520000285200003452000040520000505200005c520000685200007452 *00008052000000000000000000008c5200009c520000ac520000c0520000d8520000ec52000000 *530000145300000000000000000000705100007c51000088510000905100009851000000000000 *00000000a4510000b4510000c4510000d4510000e4510000f451000008520000145200001c5200 *00285200003452000040520000505200005c520000685200007452000080520000000000000000 *00008c5200009c520000ac520000c0520000d8520000ec52000000530000145300000000000006 *005f636c6f73650000000012005f6578656376000000003a005f6f70656e0040005f7265616400 *4b005f737061776e7600000027005f5f6765746d61696e617267730031005f5f705f5f5f617267 *630000000032005f5f705f5f5f61726776000000003c005f5f705f5f656e7669726f6e00003e00 *5f5f705f5f666d6f64650000000050005f5f7365745f6170705f747970650000000079005f6365 *78697400000000e9005f696f6200001f015f6d616b6570617468005e015f6f6e65786974000000 *84015f7365746d6f6465000092015f73706c697470617468000000001c02617465786974000000 *00210263616c6c6f63000000003902667072696e74660000005a02697373706163650000009002 *7369676e616c000000009b004578697450726f63657373000000d500467265654c696272617279 *000000ec00476574436f6d6d616e644c696e65410000004d014765744d6f64756c6546696c654e *616d6541000000004f014765744d6f64756c6548616e646c654100008001476574537461727475 *70496e666f410000000b024c6f61644c69627261727945784100000000e002536574556e68616e *646c6564457863657074696f6e46696c7465720000000050000000500000005000000050000000 *5000006d73766372742e646c6c0000145000001450000014500000145000001450000014500000 *145000001450000014500000145000001450000014500000145000001450000014500000145000 *00145000006d73766372742e646c6c000028500000285000002850000028500000285000002850 *000028500000285000004b45524e454c33322e646c6c0000000000000000000000000000000000 *00000000000000000000000000000000000000000000000000000000000000 newhex * rmfile ./gui.exe hunk ./launcher.c 1 -/* Setuptools Script Launcher for Windows - - This is a stub executable for Windows that functions somewhat like - Effbot's "exemaker", in that it runs a script with the same name but - a .py extension, using information from a #! line. It differs in that - it spawns the actual Python executable, rather than attempting to - hook into the Python DLL. This means that the script will run with - sys.executable set to the Python executable, where exemaker ends up with - sys.executable pointing to itself. (Which means it won't work if you try - to run another Python process using sys.executable.) - - To build/rebuild with mingw32, do this in the setuptools project directory: - - gcc -DGUI=0 -mno-cygwin -O -s -o setuptools/cli.exe launcher.c - gcc -DGUI=1 -mwindows -mno-cygwin -O -s -o setuptools/gui.exe launcher.c - - It links to msvcrt.dll, but this shouldn't be a problem since it doesn't - actually run Python in the same process. Note that using 'exec' instead - of 'spawn' doesn't work, because on Windows this leads to the Python - executable running in the *background*, attached to the same console - window, meaning you get a command prompt back *before* Python even finishes - starting. So, we have to use spawnv() and wait for Python to exit before - continuing. :( -*/ - -#include -#include -#include -#include -#include "windows.h" - -int fail(char *format, char *data) { - /* Print error message to stderr and return 2 */ - fprintf(stderr, format, data); - return 2; -} - - - - - -char *quoted(char *data) { - int i, ln = strlen(data), nb; - - /* We allocate twice as much space as needed to deal with worse-case - of having to escape everything. */ - char *result = calloc(ln*2+3, sizeof(char)); - char *presult = result; - - *presult++ = '"'; - for (nb=0, i=0; i < ln; i++) - { - if (data[i] == '\\') - nb += 1; - else if (data[i] == '"') - { - for (; nb > 0; nb--) - *presult++ = '\\'; - *presult++ = '\\'; - } - else - nb = 0; - *presult++ = data[i]; - } - - for (; nb > 0; nb--) /* Deal w trailing slashes */ - *presult++ = '\\'; - - *presult++ = '"'; - *presult++ = 0; - return result; -} - - - - - - - - - - -char *loadable_exe(char *exename) { - /* HINSTANCE hPython; DLL handle for python executable */ - char *result; - - /* hPython = LoadLibraryEx(exename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - if (!hPython) return NULL; */ - - /* Return the absolute filename for spawnv */ - result = calloc(MAX_PATH, sizeof(char)); - strncpy(result, exename, MAX_PATH); - /*if (result) GetModuleFileName(hPython, result, MAX_PATH); - - FreeLibrary(hPython); */ - return result; -} - - -char *find_exe(char *exename, char *script) { - char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT]; - char path[_MAX_PATH], c, *result; - - /* convert slashes to backslashes for uniform search below */ - result = exename; - while (c = *result++) if (c=='/') result[-1] = '\\'; - - _splitpath(exename, drive, dir, fname, ext); - if (drive[0] || dir[0]=='\\') { - return loadable_exe(exename); /* absolute path, use directly */ - } - /* Use the script's parent directory, which should be the Python home - (This should only be used for bdist_wininst-installed scripts, because - easy_install-ed scripts use the absolute path to python[w].exe - */ - _splitpath(script, drive, dir, fname, ext); - result = dir + strlen(dir) -1; - if (*result == '\\') result--; - while (*result != '\\' && result>=dir) *result-- = 0; - _makepath(path, drive, dir, exename, NULL); - return loadable_exe(path); -} - - -char **parse_argv(char *cmdline, int *argc) -{ - /* Parse a command line in-place using MS C rules */ - - char **result = calloc(strlen(cmdline), sizeof(char *)); - char *output = cmdline; - char c; - int nb = 0; - int iq = 0; - *argc = 0; - - result[0] = output; - while (isspace(*cmdline)) cmdline++; /* skip leading spaces */ - - do { - c = *cmdline++; - if (!c || (isspace(c) && !iq)) { - while (nb) {*output++ = '\\'; nb--; } - *output++ = 0; - result[++*argc] = output; - if (!c) return result; - while (isspace(*cmdline)) cmdline++; /* skip leading spaces */ - if (!*cmdline) return result; /* avoid empty arg if trailing ws */ - continue; - } - if (c == '\\') - ++nb; /* count \'s */ - else { - if (c == '"') { - if (!(nb & 1)) { iq = !iq; c = 0; } /* skip " unless odd # of \ */ - nb = nb >> 1; /* cut \'s in half */ - } - while (nb) {*output++ = '\\'; nb--; } - if (c) *output++ = c; - } - } while (1); -} - - - - -int run(int argc, char **argv, int is_gui) { - - char python[256]; /* python executable's filename*/ - char *pyopt; /* Python option */ - char script[256]; /* the script's filename */ - - int scriptf; /* file descriptor for script file */ - - char **newargs, **newargsp, **parsedargs; /* argument array for exec */ - char *ptr, *end; /* working pointers for string manipulation */ - int i, parsedargc; /* loop counter */ - - /* compute script name from our .exe name*/ - GetModuleFileName(NULL, script, sizeof(script)); - end = script + strlen(script); - while( end>script && *end != '.') - *end-- = '\0'; - *end-- = '\0'; - strcat(script, (GUI ? "-script.pyw" : "-script.py")); - - /* figure out the target python executable */ - - scriptf = open(script, O_RDONLY); - if (scriptf == -1) { - return fail("Cannot open %s\n", script); - } - end = python + read(scriptf, python, sizeof(python)); - close(scriptf); - - ptr = python-1; - while(++ptr < end && *ptr && *ptr!='\n' && *ptr!='\r') {;} - - *ptr-- = '\0'; - - if (strncmp(python, "#!", 2)) { - /* default to python.exe if no #! header */ - strcpy(python, "#!python.exe"); - } - - parsedargs = parse_argv(python+2, &parsedargc); - - /* Using spawnv() can fail strangely if you e.g. find the Cygwin - Python, so we'll make sure Windows can find and load it */ - - ptr = find_exe(parsedargs[0], script); - if (!ptr) { - return fail("Cannot find Python executable %s\n", parsedargs[0]); - } - - /* printf("Python executable: %s\n", ptr); */ - - /* Argument array needs to be - parsedargc + argc, plus 1 for null sentinel */ - - newargs = (char **)calloc(parsedargc + argc + 1, sizeof(char *)); - newargsp = newargs; - - *newargsp++ = quoted(ptr); - for (i = 1; i="2.5"), # <2.5 needs unzipped for -m to work hunk ./setup.py 66 "dependency_links.txt = setuptools.command.egg_info:overwrite_arg", ], "console_scripts": [ - "easy_install = setuptools.command.easy_install:main", - "easy_install-%s = setuptools.command.easy_install:main" + "easy_install_z = setuptools.command.easy_install:main", + "easy_install_z-%s = setuptools.command.easy_install:main" % sys.version[:3] ], "setuptools.file_finders": hunk ./setuptools.egg-info/entry_points.txt 7 develop = setuptools.command.develop:develop setopt = setuptools.command.setopt:setopt build_py = setuptools.command.build_py:build_py +scriptsetup = setuptools.command.scriptsetup:scriptsetup saveopts = setuptools.command.saveopts:saveopts egg_info = setuptools.command.egg_info:egg_info register = setuptools.command.register:register hunk ./setuptools.egg-info/entry_points.txt 34 depends.txt = setuptools.command.egg_info:warn_depends_obsolete [console_scripts] -easy_install = setuptools.command.easy_install:main -easy_install-2.5 = setuptools.command.easy_install:main +easy_install_z-2.6 = setuptools.command.easy_install:main +easy_install_z = setuptools.command.easy_install:main [setuptools.file_finders] svn_cvs = setuptools.command.sdist:_default_revctrl hunk ./setuptools/__init__.py 10 from distutils.util import convert_path import os.path -__version__ = '0.7a1' +__version__ = '0.6c16dev' __all__ = [ 'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require', 'find_packages' hunk ./setuptools/command/__init__.py 5 'alias', 'bdist_egg', 'bdist_rpm', 'build_ext', 'build_py', 'develop', 'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts', 'sdist', 'setopt', 'test', 'upload', 'install_egg_info', 'install_scripts', - 'register', 'bdist_wininst', + 'register', 'bdist_wininst', 'scriptsetup', ] import sys hunk ./setuptools/command/build_py.py 22 if 'data_files' in self.__dict__: del self.__dict__['data_files'] def run(self): + self.old_run() + if sys.platform == "win32": + from setuptools.command.scriptsetup import do_scriptsetup + do_scriptsetup() + + def old_run(self): """Build modules, packages, and copy data files to build directory""" if not self.py_modules and not self.packages: return hunk ./setuptools/command/easy_install.py 15 import sys, os.path, zipimport, shutil, tempfile, zipfile, re, stat, random from glob import glob from setuptools import Command +from setuptools import __version__ as setuptools_version from setuptools.sandbox import run_setup from distutils import log, dir_util from distutils.sysconfig import get_python_lib hunk ./setuptools/command/easy_install.py 577 def install_wrapper_scripts(self, dist): if not self.exclude_scripts: - for args in get_script_args(dist): + for args in get_script_args(dist, script_dir=self.script_dir): self.write_script(*args) hunk ./setuptools/command/easy_install.py 1568 return executable -def get_script_args(dist, executable=sys_executable, wininst=False): +def get_script_args(dist, executable=sys_executable, wininst=False, script_dir=None): """Yield write_script() argument tuples for a distribution's entrypoints""" spec = str(dist.as_requirement()) header = get_script_header("", executable, wininst) hunk ./setuptools/command/easy_install.py 1572 + generated_by = "# generated by zetuptoolz %s" % (setuptools_version,) + for group in 'console_scripts', 'gui_scripts': hunk ./setuptools/command/easy_install.py 1575 - for name,ep in dist.get_entry_map(group).items(): - script_text = ( + for name, ep in dist.get_entry_map(group).items(): + script_head, script_tail = (( "# EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r\n" hunk ./setuptools/command/easy_install.py 1578 + "%(generated_by)s\n" "__requires__ = %(spec)r\n" "import sys\n" "from pkg_resources import load_entry_point\n" hunk ./setuptools/command/easy_install.py 1583 "\n" + ) % locals(), ( "sys.exit(\n" " load_entry_point(%(spec)r, %(group)r, %(name)r)()\n" ")\n" hunk ./setuptools/command/easy_install.py 1587 - ) % locals() - if sys.platform=='win32' or wininst: - # On Windows/wininst, add a .py extension and an .exe launcher + ) % locals()) + + if wininst or sys.platform == "win32": + # On Windows/wininst, add a .py[w] extension. Delete any existing + # -script.py[w], .exe, and .exe.manifest. if group=='gui_scripts': hunk ./setuptools/command/easy_install.py 1593 - ext, launcher = '-script.pyw', 'gui.exe' - old = ['.pyw'] - new_header = re.sub('(?i)python.exe','pythonw.exe',header) + ext = '.pyw' + old = ['','.pyw','-script.pyw','.exe','.exe.manifest'] + which_python = 'pythonw.exe' + new_header = re.sub('(?i)python.exe', which_python, header) else: hunk ./setuptools/command/easy_install.py 1598 - ext, launcher = '-script.py', 'cli.exe' - old = ['.py','.pyc','.pyo'] - new_header = re.sub('(?i)pythonw.exe','python.exe',header) + ext = '.pyscript' + old = ['','.pyscript','.py','.pyc','.pyo','-script.py','.exe','.exe.manifest'] + which_python = 'python.exe' + new_header = re.sub('(?i)pythonw.exe', which_python, header) hunk ./setuptools/command/easy_install.py 1603 - if os.path.exists(new_header[2:-1]) or sys.platform!='win32': + len_ext = len(ext) + script_head += ( + "# If this script doesn't work for you, make sure that the %(ext)s\n" + "# extension is included in the PATHEXT environment variable, and is\n" + "# associated with %(which_python)s in the registry.\n" + "\n" + "if sys.argv[0].endswith(%(ext)r):\n" + " sys.argv[0] = sys.argv[0][:-%(len_ext)r]\n" + "\n" + ) % locals() + + if os.path.exists(new_header[2:-1]) or sys.platform != 'win32': hdr = new_header else: hdr = header hunk ./setuptools/command/easy_install.py 1618 - yield (name+ext, hdr+script_text, 't', [name+x for x in old]) - yield ( - name+'.exe', resource_string('setuptools', launcher), - 'b') # write in binary mode - yield (name+'.exe.manifest', _launcher_manifest % (name,), 't') - else: - # On other platforms, we assume the right thing to do is to - # just write the stub with no extension. - yield (name, header+script_text) - -_launcher_manifest = """ - - - - - - - - - - - - -""" - - - - - - - - - - - - - - - - - - - + yield (name+ext, hdr + script_head + script_tail, 't', [name+x for x in old]) hunk ./setuptools/command/easy_install.py 1620 + # Also write a shell script that runs the .pyscript, for cygwin. + # + # We can't use a Python script, because the Python interpreter that we want + # to use is the native Windows one, which won't understand a cygwin path. + # Windows paths written with forward slashes are universally understood + # (by native Python, cygwin Python, and bash), so we'll use 'cygpath -m' to + # get the directory from which the script was run in that form. This makes + # the cygwin script and .pyscript position-independent, provided they are + # in the same directory. hunk ./setuptools/command/easy_install.py 1630 + def quote_path(s): + return "\\'".join("'" + p.replace('\\', '/') + "'" for p in s.split("'")) hunk ./setuptools/command/easy_install.py 1633 + pyscript = quote_path("/"+name+ext) + python_path = quote_path(sys.executable) + shell_script_text = ( + '#!/bin/sh\n' + '%(generated_by)s\n' + '\n' + 'ScriptDir=`cygpath -m "$0/.."`\n' + '%(python_path)s "${ScriptDir}"%(pyscript)s "$@"\n' + ) % locals() + yield (name, shell_script_text, 'b') + else: + # On other platforms, we assume the right thing to do is to + # just write the stub with no extension. + yield (name, header + script_head + script_tail) def rmtree(path, ignore_errors=False, onerror=auto_chmod): hunk ./setuptools/command/install.py 52 self.path_file = None self.extra_dirs = '' - def run(self): hunk ./setuptools/command/install.py 53 + self.old_run() + if sys.platform == "win32": + from setuptools.command.scriptsetup import do_scriptsetup + do_scriptsetup() + + def old_run(self): # Explicit request for old-style install? Just do it if self.old_and_unmanageable or self.single_version_externally_managed: return _install.run(self) hunk ./setuptools/command/install.py 83 else: self.do_egg_install() - - - - - def do_egg_install(self): easy_install = self.distribution.get_command_class('easy_install') hunk ./setuptools/tests/win_script_wrapper.txt 1 -Python Script Wrapper for Windows -================================= +Python Scripts on Windows +========================= hunk ./setuptools/tests/win_script_wrapper.txt 4 -setuptools includes wrappers for Python scripts that allows them to be -executed like regular windows programs. There are 2 wrappers, once -for command-line programs, cli.exe, and one for graphica programs, -gui.exe. These programs are almost identical, function pretty much -the same way, and are generated from the same source file. The -wrapper programs are used by copying them to the directory containing -the script they are to wrap and with the same name as the script they -are to wrap. In the rest of this document, we'll give an example that -will illustrate this. +zetuptoolz can install Python scripts in such a way that they can be +run from a Windows Command Prompt, a Cygwin shell, or a Windows shortcut. +It implements this in a different way to setuptools (which used .exe +wrappers as described at +). hunk ./setuptools/tests/win_script_wrapper.txt 10 -Let's create a simple script, foo-script.py: +There are two kinds of scripts -- command-line and graphical. +Command-line scripts have a .pyscript extension, which should be +associated with python.exe. Graphical scripts have a .pyw extension, +which should be associated with pythonw.exe. The .pyscript and .pyw +extensions should be listed in the PATHEXT environment variable. hunk ./setuptools/tests/win_script_wrapper.txt 16 - >>> import os, sys, tempfile - >>> from setuptools.command.easy_install import nt_quote_arg - >>> sample_directory = tempfile.mkdtemp() - >>> open(os.path.join(sample_directory, 'foo-script.py'), 'w').write( - ... """#!%(python_exe)s - ... import sys - ... input = repr(sys.stdin.read()) - ... print sys.argv[0][-14:] - ... print sys.argv[1:] - ... print input - ... if __debug__: - ... print 'non-optimized' - ... """ % dict(python_exe=nt_quote_arg(sys.executable))) +The reason for introducing a new .pyscript extension is to work around +a problem with naming conflicts between modules and scripts. When Python +runs a script file, it adds the parent directory of that file to the +start of the sys.path. So any scripts in that directory that have the +same name as a module, will shadow the module and be imported in +preference to it. This would particularly be a problem when running scripts +installed to \Scripts. Using a .pyscript extension still +allows the script to be run, but prevents it from being unintentionally +imported. hunk ./setuptools/tests/win_script_wrapper.txt 26 -Note that the script starts with a Unix-style '#!' line saying which -Python executable to run. The wrapper will use this to find the -correct Python executable. +First let's install zetuptoolz (we could also just build it): hunk ./setuptools/tests/win_script_wrapper.txt 28 -We'll also copy cli.exe to the sample-directory with the name foo.exe: + C:\> cd path\to\zetuptoolz hunk ./setuptools/tests/win_script_wrapper.txt 30 - >>> import pkg_resources - >>> open(os.path.join(sample_directory, 'foo.exe'), 'wb').write( - ... pkg_resources.resource_string('setuptools', 'cli.exe') - ... ) + C:\path\to\zetuptoolz> python setup.py install + ... + Setting up environment to run scripts... + Done: associate the .pyscript extension with Python.File. + Done: add .pyscript to the user environment variable PATHEXT. + Done: add .pyw to the user environment variable PATHEXT. hunk ./setuptools/tests/win_script_wrapper.txt 37 -When the copy of cli.exe, foo.exe in this example, runs, it examines -the path name it was run with and computes a Python script path name -by removing the '.exe' suffic and adding the '-script.py' suffix. (For -GUI programs, the suffix '-script-pyw' is added.) This is why we -named out script the way we did. Now we can run out script by running -the wrapper: + Changes have been made to the persistent environment, but not + in this Command Prompt. Running installed Python scripts will + only work from new Command Prompts opened from now on. hunk ./setuptools/tests/win_script_wrapper.txt 41 - >>> import os - >>> input, output = os.popen4('"'+nt_quote_arg(os.path.join(sample_directory, 'foo.exe')) - ... + r' arg1 "arg 2" "arg \"2\\\"" "arg 4\\" "arg5 a\\b"') - >>> input.write('hello\nworld\n') - >>> input.close() - >>> print output.read(), - \foo-script.py - ['arg1', 'arg 2', 'arg "2\\"', 'arg 4\\', 'arg5 a\\\\b'] - 'hello\nworld\n' - non-optimized +If you had built or installed it or a previous version (since 0.6c16dev) +before, this would have said something like: hunk ./setuptools/tests/win_script_wrapper.txt 44 -This example was a little pathological in that it exercised windows -(MS C runtime) quoting rules: + Setting up environment to run scripts... + Already done: associate the .pyscript extension with Python.File. + Already done: add .pyscript to the user environment variable PATHEXT. + Already done: add .pyw to the user environment variable PATHEXT. hunk ./setuptools/tests/win_script_wrapper.txt 49 -- Strings containing spaces are surrounded by double quotes. +(In fact zetuptoolz will re-check that the .pyscript association and +PATHEXT variable are set up correctly when you build or install *any* +distribution with it.) hunk ./setuptools/tests/win_script_wrapper.txt 53 -- Double quotes in strings need to be escaped by preceding them with - back slashes. +A zetuptoolz-created command-line script -- say mycmd.pyscript -- typically +looks something like this: hunk ./setuptools/tests/win_script_wrapper.txt 56 -- One or more backslashes preceding double quotes quotes need to be - escaped by preceding each of them them with back slashes. + #!c:\Python26\python.exe + # EASY-INSTALL-ENTRY-SCRIPT: 'application==1.0','console_scripts','mycmd' + # generated by zetuptoolz 0.6c16dev + __requires__ = 'application==1.0' + import sys, site + from pkg_resources import load_entry_point hunk ./setuptools/tests/win_script_wrapper.txt 63 + # If this script doesn't work for you, make sure that the .pyscript + # extension is included in the PATHEXT environment variable, and is + # associated with python.exe in the registry. hunk ./setuptools/tests/win_script_wrapper.txt 67 -Specifying Python Command-line Options --------------------------------------- + if sys.argv[0].endswith('.pyscript'): + sys.argv[0] = sys.argv[0][:-9] hunk ./setuptools/tests/win_script_wrapper.txt 70 -You can specify a single argument on the '#!' line. This can be used -to specify Python options like -O, to run in optimized mode or -i -to start the interactive interpreter. You can combine multiple -options as usual. For example, to run in optimized mode and -enter the interpreter after running the script, you could use -Oi: + sys.exit( + load_entry_point('application==1.0', 'console_scripts', 'mycmd')() + ) hunk ./setuptools/tests/win_script_wrapper.txt 74 - >>> open(os.path.join(sample_directory, 'foo-script.py'), 'w').write( - ... """#!%(python_exe)s -Oi - ... import sys - ... input = repr(sys.stdin.read()) - ... print sys.argv[0][-14:] - ... print sys.argv[1:] - ... print input - ... if __debug__: - ... print 'non-optimized' - ... sys.ps1 = '---' - ... """ % dict(python_exe=nt_quote_arg(sys.executable))) +(The Unix-style '#!' line isn't really necessary; in fact it will be +ignored if we run this from a Command Prompt, although it may help if the +user is using a Unix-style shell.) hunk ./setuptools/tests/win_script_wrapper.txt 78 - >>> input, output = os.popen4(nt_quote_arg(os.path.join(sample_directory, 'foo.exe'))) - >>> input.close() - >>> print output.read(), - \foo-script.py - [] - '' - --- +Suppose that 'mycmd' just prints out sys.argv. In that case, if we run it +we'll get: hunk ./setuptools/tests/win_script_wrapper.txt 81 -Testing the GUI Version ------------------------ + C:\> mycmd.pyscript arg1 "arg 2" "arg \"2\\\"" "arg 4\" "still4 arg5\b" + ['arg1', 'arg 2', 'arg "2\\"', 'arg 4" still4', 'arg5\\b'] hunk ./setuptools/tests/win_script_wrapper.txt 84 -Now let's test the GUI version with the simple scipt, bar-script.py: +Omitting the .pyscript extension has the same effect: hunk ./setuptools/tests/win_script_wrapper.txt 86 - >>> import os, sys, tempfile - >>> from setuptools.command.easy_install import nt_quote_arg - >>> sample_directory = tempfile.mkdtemp() - >>> open(os.path.join(sample_directory, 'bar-script.pyw'), 'w').write( - ... """#!%(python_exe)s - ... import sys - ... open(sys.argv[1], 'wb').write(repr(sys.argv[2])) - ... """ % dict(python_exe=nt_quote_arg(sys.executable))) + C:\> mycmd arg1 "arg 2" "arg \"2\\\"" "arg 4\" "still4 arg5\b" + ['arg1', 'arg 2', 'arg "2\\"', 'arg 4" still4', 'arg5\\b'] hunk ./setuptools/tests/win_script_wrapper.txt 89 -We'll also copy gui.exe to the sample-directory with the name bar.exe: +Note that the arguments are parsed only by cmd.exe, ensuring exact +compatibility with Windows quoting conventions. hunk ./setuptools/tests/win_script_wrapper.txt 92 - >>> import pkg_resources - >>> open(os.path.join(sample_directory, 'bar.exe'), 'wb').write( - ... pkg_resources.resource_string('setuptools', 'gui.exe') - ... ) +Unicode arguments to the script are preserved. However, they cannot be read +from sys.argv due to (a workaround is +given there). hunk ./setuptools/tests/win_script_wrapper.txt 96 -Finally, we'll run the script and check the result: +GUI scripts work in an identical way, but use the .pyw extension and are +associated with pythonw.exe. hunk ./setuptools/tests/win_script_wrapper.txt 99 - >>> import os - >>> input, output = os.popen4('"'+nt_quote_arg(os.path.join(sample_directory, 'bar.exe')) - ... + r' "%s" "Test Argument"' % os.path.join(sample_directory, 'test_output.txt')) - >>> input.close() - >>> print output.read() - - >>> print open(os.path.join(sample_directory, 'test_output.txt'), 'rb').read() - 'Test Argument' hunk ./setuptools/tests/win_script_wrapper.txt 100 +Cygwin shell +------------ hunk ./setuptools/tests/win_script_wrapper.txt 103 -We're done with the sample_directory: - - >>> import shutil - >>> shutil.rmtree(sample_directory) +When running a script from the Windows Command Prompt, or other Windows +shells that honour PATHEXT, the .pyscript wrapper is sufficient. However, +the Cygwin bash shell does not honour PATHEXT. hunk ./setuptools/tests/win_script_wrapper.txt 107 +So that Cygwin shell users do not have to type the .pyscript extension, +we also write a shell script (with no extension and a "#!/bin/sh" shebang +line) alongside the .pyscript file. This script invokes the Python interpreter +(normally the one that ran easy_install, or "python.exe" in the case of a +cross-installation for a Windows target), giving the .pyscript name and +passing on its own arguments. Context: [setuptools/sandbox.py: Fix a problem with sandbox swapping 'open' and 'file' builtins. Support sandbox access to os.devnull. Equivalent to change in setuptools svn revision 80621 (2010-04-29). david-sarah@jacaranda.org**20100731025037 Ignore-this: 36c0c6788fd65bf87e681c15072c721f ] [merge changes and remove unused import zooko@zooko.com**20100523175508 Ignore-this: adbcb7e313eb9d9bdcae2fe7f3dbbe6f ] [Fix wrong keyword argument for specifying test tunner to unittest phillip.eby**20100312184011 Ignore-this: fbdaecd6c31ed8ee9dc809ecfffdc5ac ] [Yet another Sourceforge download fix phillip.eby**20100201163817 Ignore-this: 2ffaaf67be7073140918fc7b8a291015 ] [Fix incorrect error message/traceback when no download phillip.eby**20091105155809 Ignore-this: 3311bc52a624fe9b71144e9ade5152d3 is found. ] [Fix for issue 88 phillip.eby**20091028170953 Ignore-this: 2869fb03fe37ee5c67f93304ea4ece74 ] [Fix the elusive "double upload bdist_wininst" bug phillip.eby**20091019214636 Ignore-this: c659bd76108f664448892933a0854376 ] [Fix lost launcher changes, string.split(). phillip.eby**20091019210206 Ignore-this: a232501033c73ebabb57920e21ce26a3 ] [Add a better link to the files phillip.eby**20091014025059 Ignore-this: 3a11d77458ee07d65fcc89be710a7246 ] [Fixes for Windwos 64 and Vista UAC errors phillip.eby**20091012202033 Ignore-this: 8075132bffa551a7b104790b174306b8 ] [Major updates and fixes include: phillip.eby**20091012195846 Ignore-this: 221fc598c157bb09110610c61606e477 * Fix for the Python 2.6.3 build_ext API change * Support for the most recent Sourceforge download link insanity * Support for SVN 1.6 * Stop crashing on certain types of HTTP error * Stop re-trying URLs that already failed retrieval once * Fixes for various dependency management problems such as looping builds, re-downloading packages already present on sys.path (but not in a registered "site" directory), and randomly preferring local -f packages over local installed packages * Prevent lots of spurious "already imported from another path" warnings (e.g. when pkg_resources is imported late) * Ensure C libraries (as opposed to extensions) are also built when doing bdist_egg * Fixed running the "test" command under Python 2.6+ Other changes: * Misc. documentation fixes * Improved Jython support * Fewer warnings under Python 2.6+ * Warn when 'packages' uses paths instead of package names (because it causes other problems, like spurious "already imported" warnings) * Stop using /usr/bin/sw_vers on Mac OS (replaced w/'platform' module calls) Note: This is NOT a merge from Distribute; upon review, many of the tracker-submitted patches used as a basis for forking were incorrect, incomplete, introduced new bugs, or were not addressing the root causes. (E.g., one of the changes in this patch fixes three superficially unrelated issues in the setuptools bug tracker.) Careful review will be required if you want to merge this work back into Distribute. ] [Fixes for Windwos 64 and Vista UAC errors phillip.eby**20091012202033 Ignore-this: d09ca72d9c23a001579fb5bf84a28f9f ] [VERSION=0.6c14dev zooko@zooko.com**20090724121405 Ignore-this: 412b004941e16aceb5a343bdb9099f62 ] [add cli.exe and gui.exe zooko@zooko.com**20090724121235 Ignore-this: 1eccf7f75a87956daed9668c5481aaa0 ] [setup: VERSION=0.6c13 zooko@zooko.com**20090703214638 Ignore-this: ee8d7e9c97e932f271fd65bd5a9274b8 ] [manually undo the patch "Backport pkgutil, pydoc, and doctest from the 2.5 trunk to setuptools." zooko@zooko.com**20090703214517 Ignore-this: 993ea673533b35a6967682667d87e46d ] [Automatically add instdir to all_site_dirs, and go ahead and write a site.py even if it isn't on the PYTHONPATH. zooko@zooko.com**20090205150048 Ignore-this: 7717d45de7ea00d11ec3752507d7135a This is to support the use case of installing with --prefix into a directory that isn't on the PYTHONPATH, and then adding it to the PYTHONPATH and running. Some people who are in the habit of using PYTHONPATH like this prefer to pass the PYTHONPATH explicitly at the beginning of each command-line, like this: $ PYTHONPATH=./support/lib/python2.5/site-packages python ./docoolthing.py instead of by setting a persistent environment variable in their shell, like this: $ export PYTHONPATH=./support/lib/python2.5/site-packages $ python ./docoolthing.py This is the topic of http://bugs.python.org/setuptools/issue54 ] [add sys.path to the index to search for easy_install zooko@zooko.com**20090203004109 Ignore-this: eac7b84940c5c290ec5f1a8931576606 ] [hand built egg, renamed to not specify py2.5, added cli.exe and gui.exe, and about to add _pkgutil.py zooko@zooko.com**20081025151204 Ignore-this: a4b1837fa6429dcffa4996b129a19352 ] [change exception into warning when target install dir isn't pth-capable zooko@zooko.com**20081115190501 Ignore-this: 5965276b28210180712c5370954cd550 This eases the common use case of "./setup.py install --prefix=foo" followed by some other mechanism to make sure that ./foo/... is importable, and makes setuptools behave more like distutils in this regard. ] [try to mkdir the install directory zooko@zooko.com**20081115190420 Ignore-this: 4454e4a559e4114de0d96ac5b351e2ad This eases the common use case of "./setup.py install --prefix=somedir" and makes setuptools behave more like distutils in this case. ] [leave the PYTHONPATH dirs at the front of the sys.path zooko@zooko.com**20081115185932 Ignore-this: 494791a9f73bdf3ebf08657e6d7d98fb This is in accordance with http://www.python.org/doc/2.5.2/inst/search-path.html , which says "The PYTHONPATH variable can be set to a list of paths that will be added to the beginning of sys.path.", and it resolves an objection many people have which impels them to ban setuptools from systems they administrate. ] [call it 0.6c10dev zooko@zooko.com**20081025122705 Ignore-this: 48835c56f9a7015c829480e160b74e01 ] [Keep site directories (e.g. site-packages) from being included in phillip.eby**20080924172009 .pth files. ] [Fix for http://bugs.python.org/setuptools/issue39 phillip.eby**20080924170535] [Doc typo fix phillip.eby**20080924165637] [Fix for http://bugs.python.org/setuptools/issue47 - more md5 usage phillip.eby**20080924165229] [Fix for http://bugs.python.org/setuptools/issue27 (Jython shebang phillip.eby**20080924164220 lines) ] [Fix for http://bugs.python.org/setuptools/issue37 - missing phillip.eby**20080911154326 __loader__ running under Google App Engine. ] [Added 'test_runner'. (Note: this is a new feature and should not phillip.eby**20080821215416 be backported to the 0.6 branch.) ] [Ensure that _full_name is set on all shared libs before extensions phillip.eby**20080821213758 are checked for shared lib usage. (problem reported by Andi Vajda) ] [Fix for http://bugs.python.org/setuptools/issue34 phillip.eby**20080821192547] [Fix for http://bugs.python.org/setuptools/issue9 phillip.eby**20080821191924] [Fix for http://bugs.python.org/setuptools/issue29 phillip.eby**20080821190929] [Fix for http://bugs.python.org/setuptools/issue11 phillip.eby**20080821185402] [Candidate fix for http://bugs.python.org/setuptools/issue20 phillip.eby**20080821184159] [Fix for http://bugs.python.org/setuptools/issue31 phillip.eby**20080821183437] [Fix for http://bugs.python.org/setuptools/issue16 phillip.eby**20080821181703] [Fix for http://bugs.python.org/setuptools/issue5 phillip.eby**20080821175952] [Fix for http://bugs.python.org/setuptools/issue7 phillip.eby**20080821175532] [Enhanced error message per http://bugs.python.org/setuptools/issue28 phillip.eby**20080821174725] [Fix for http://bugs.python.org/setuptools/issue23 phillip.eby**20080821174205] [Misc. documentation updates/fixes phillip.eby**20080821172042] [More SVN 1.5 fixing phillip.eby**20080724211623] [Support subversion 1.5 phillip.eby**20080716135651] [Support installing pywin32 as an egg, albeit without registering phillip.eby**20080310162225 COM support, shortcuts, etc. ] [Fixed issues with empty resource names for resource_listdir et al. phillip.eby**20080215234944] [Fixed missing import phillip.eby**20080215234919] [Warn if a namespace package is declared, but its parent phillip.eby**20080214211714 package is not. ] [Support upgrading existing setuptools when run from a setup.py phillip.eby**20080214193528 script (but not during easy_install, unfortunately). ] [Fix interactions between the various "require" options, phillip.eby**20080119024651 so that downloads aren't repeated and needed eggs are always installed, even if they were downloaded to the setup directory already. ] [chmod/test cleanups and Jython support. phillip.eby**20080118214709] [Update Pyrex/swig_sources workaround for newer Pyrex versions phillip.eby**20080115175223] [Fix not picking up dependency links from recursive dependencies. phillip.eby**20080115174417] [Fix gui.exe launcher issue reported by Alexander Michael and Robin Dunn. phillip.eby**20080103234438] [Fix dependency on Python 2.5 phillip.eby**20071026022031] [Prevent --help-commands and other junk from showing under phillip.eby**20071008114807 Python 2.5 when running "easy_install" directly. ] [Fix cross-platform line-end problem with SOURCES.txt: distutils phillip.eby**20070926170339 doesn't expect manifest files to be shipped across platforms. ] [Remove all references to the Cheese Shop, and switch to using phillip.eby**20070904155318 the new PyPI "/simple" REST API. ] [Fix import problems with system-installed nested namespace packages, phillip.eby**20070904040757 due to the parent package not having the child package as an attribute. ] [Fix precedence issue between .egg and .egg-info packages phillip.eby**20070904035125 when both are installed in site-packages. ] [Fix downloading from ftp: URLs (which don't have a content-type). phillip.eby**20070824031432] [Fix a problem with the findall() fix. :( phillip.eby**20070712173106] [Fix distutils.filelist.findall() crashing on broken symlinks. Fix phillip.eby**20070711173402 egg_info failures on new, uncommitted SVN directories. ] [Misc. fixes: phillip.eby**20070531172056 * Don't treat directories with a '.' in the name as packages * Don't include ez_setup in find_packages() * HTML-decode URLs scraped from web pages (d'oh!) * Fix cache dir defaults on Windows when multiple env vars used * Doc updates ] [Setting svn:eol properties everywhere where they weren't set yet. guido.van.rossum**20070425195151] [Changed setuptools.package_index.PackageIndex.open_url to include the jim.fulton**20070309161241 url in the exception. ] [Fix problem activating dependencies for tests phillip.eby**20070302012227] [Fix "test" command possibly failing if an older version of the project phillip.eby**20070224220920 being tested is installed on sys.path ahead of the test source directory. ] [Add --local-snapshots-ok flag, to allow building eggs from projects phillip.eby**20070223202729 installed using "setup.py develop". ] [Get rid of 'sets' module usage under Python 2.4+, so that no warnings phillip.eby**20070223192457 are issued by Python 2.6. ] [Indicate when dependency processing is finished, so that you can tell phillip.eby**20070223192254 which dependencies go with what. (Suggested by Ian Bicking) ] [Respect possible entry point override of 'easy_install' command. phillip.eby**20070220224540] [Fix error if script contains null byte. phillip.eby**20070217175345] [Internals updated for relative .egg-link support phillip.eby**20070215193702] [Support .egg-link paths being relative phillip.eby**20070215193508] [Add --egg-path option to force .egg-link files to use relative paths phillip.eby**20070215191941 (allowing them to be shared across platforms on a networked drive). ] [Ensure extracted libraries have correct permissions on Posix systems phillip.eby**20070208200816 (e.g. Cygwin, which is where I found the problem.) ] [Match Python 2.5 pydoc phillip.eby**20070206125526] [Fix script language detection so that scripts built on Windows are phillip.eby**20070201195949 correctly identified as still being Python code! ] [Fixed mangling line endings when an old-style source script came from phillip.eby**20070201185706 Windows. ] [Fix #! parsing problems w/whitespace in quoted strings or at the end phillip.eby**20070124205726 of the #! line. ] [If a page can't be spidered, warn and ignore rather than aborting. phillip.eby**20070124153900] [Fix "bashism" in eggsecutable header. phillip.eby**20070124152212] [Incorporate README fix from 0.6 branch. phillip.eby**20070124152148] [Workaround for Python 2.5 distutils bug: when bdist_wininst files are phillip.eby**20070109192242 uploaded, they are marked as suitable for "any" Python version, even if an explicit --target-version was specified. (This needs to be fixed in the distutils too.) ] [Fix not making Cygwin .dll's executable when installing in non-zip-safe phillip.eby**20070109185723 mode. ] [Argh, again. phillip.eby**20070109182136] [Backport from branch. phillip.eby**20070109181432] [Don't double-upload .exe files under Python 2.5. :( phillip.eby**20070109180831] [Formatting fixes for README phillip.eby**20070109175934] [Fix not generating correct .pth for parent namespace packages when phillip.eby**20070105181531 installing --single-version-externally-managed. ] [Add Basic Auth support for http URLs with embedded credentials. If an phillip.eby**20061230160314 authenticated page contains links to the same protocol and host, those links should inherit the same credentials. ] [Fix os.open() sandboxing code that refused anything but read-only access. phillip.eby**20061230030609] [Switch default package-index to cheeseshop.python.org, and make phillip.eby**20061229175025 setuptools' home page its cheeseshop page. ] [Whoops; dupes were already taken care of elsewhere. phillip.eby**20061229174103] [Overhaul Windows script wrappers to support bdist_wininst better. phillip.eby**20061229173314 Scripts installed with bdist_wininst will always use #!python.exe or #!pythonw.exe as the executable name, and the wrappers will look for the executable in the script's parent directory. Since bdist_wininst scripts are installed to Python2X/Scripts, this will look for Python2X/python.exe. Scripts installed by easy_install, however, will still use an absolute executable path. Also fixed: some egg<->exe roundtripping issues, and script #! lines on Windows can now have an arbitrary number of arguments following the Python exe name, and the exe name is quoted if necessary, following the MS command line parsing rules. ] [Partial support for cross-platform generation of bdist_wininst .exe's. phillip.eby**20061229012949 Unfortunately, bdist_wininst doesn't fix up #! lines, so python.exe or pythonw.exe have to be on PATH for generated scripts to work. This could probably be fixed up with a post-install script, but that's a job for another day. ] [Work around a distutils bdist_wininst bug: if the user has specified an phillip.eby**20061229005834 --install-lib via a configuration file, the path is hardcoded into the .exe file in place of PLATLIB/ or PURELIB/. (This bug should also be fixed in distutils' bdist_wininst!) ] [Fix import problem for bdist_rpm w/Python<2.5 phillip.eby**20061229004032] [Removed all special support for Sourceforge mirrors, since SF finally phillip.eby**20061229003104 replaced their crazy mirror system with something sane. ] [New installation instructions and credits phillip.eby**20061229000623] [Fix problem w/' ' in sys.executable on Windows. phillip.eby**20061201033900] [Fixed not allowing os.open() of paths outside the sandbox, even if they phillip.eby**20061024182935 are opened read-only (e.g. /dev/urandom). ] [Use cross-platform relative paths in .pth if target is anywhere inside the phillip.eby**20060929192410 .pth file's directory. ] [Fix problem generating "eggsecutable" header if dist/ dir doesn't exst yet. phillip.eby**20060928044752] [Allow explicit selection of Sourceforge mirror(s) with --sf-mirror, and phillip.eby**20060927015648 further refine download/retry algorithm. ] [Should've used distutils.log.warn instead of warnings.warn phillip.eby**20060926201505] [Handle empty revision numbers in SVN 1.4 "entries" format phillip.eby**20060926161741] [Fix SF download problems when server returns HTML instead of a 404. Use phillip.eby**20060925212419 sf-mirrors.telecommunity.com as a fallback to get SF mirror info if the first dl.sourceforge.net attempt doesn't work. ] [Fix "dev" versions being considered newer than release candidates. :( phillip.eby**20060925175846] [Add support for "eggsecutable" headers: a /bin/sh script that is prepended phillip.eby**20060922000356 to an .egg file to allow it to be run as a script on Unix-ish platforms. (This is mainly so that setuptools itself can have a single-file installer on Unix, without doing multiple downloads, dealing with firewalls, etc.) ] [Fix broken imports. phillip.eby**20060921222831] [Fix bdist_wininst files not being uploaded by "upload" phillip.eby**20060921221340] [Support uploading bdist_rpm files on older Python versions (2.3/2.4) phillip.eby**20060921215859] [Fix easy_install not recognizing win32.exe files that include a custom bitmap. phillip.eby**20060921205907] [Retain 2.3/2.4 compatibility as well... phillip.eby**20060920202057] [Python 2.5 compatibility fix phillip.eby**20060920201100] [Support svn 1.4 working copy format phillip.eby**20060917161854] [Prevent deprecation warnings coming from generated scripts when phillip.eby**20060906205428 sys.executable contains non-ASCII characters. ] [Make "setup.py develop" of a setuptools-using project install phillip.eby**20060906195435 setuptools, if needed, instead of only downloading the egg. ] [Don't check installation directory writability and site/.pth setup when phillip.eby**20060906194339 using --editable. ] [Support setuptools .egg being in current directory when bootstrapping on phillip.eby**20060906181013 an offline machine. Output what version/location is conflicting when a newer version of setuptools is requested. ] [Added quoting of script arguments and extended the quoting logic to jim.fulton**20060822194248 handle embedded quotes. Added support for passing a single argument on the shebang line to pass things like -O and -i. Fixed bug in handling trailing whitespace in Python command. ] [Fix wrong Mac OS X installation paths. phillip.eby**20060813174259] [Sync pkgutil from trunk phillip.eby**20060728235814] [Fix a problem with eggs specified directly on PYTHONPATH on phillip.eby**20060721165418 case-insensitive filesystems possibly not showing up in the default working set. ] [Update MD5 matching for current PyPI code. :( phillip.eby**20060720204649] [Identify the setuptools version as part of the User-Agent string when phillip.eby**20060720203727 spidering pages or downloading files. ] [Make sdist-from-sdist builds keep the exact same version number, even if phillip.eby**20060718164942 --tag-date was used to build the original sdist. ] [Edit an sdist's setup.cfg to include any egg_info options that were used phillip.eby**20060718163207 to build it. ] [Restored support for extra_path when using backward compatibility mode. phillip.eby**20060718155946] [Fix three problems reported by Bob Ippolito and Jim Fulton phillip.eby**20060714233215] [Fix doubled --tag-build option. phillip.eby**20060711194919] [Fix doc typo phillip.eby**20060711194829] [Don't warn about possible misspelling if we know that a project with phillip.eby**20060711182341 that name does in fact exist. ] [Crosslink "Creating your own package index" to the new docs. phillip.eby**20060711011451] [Add documentation for package index "API" (layout/content rules) phillip.eby**20060711011215] [Reduce screenscraping required for a package index. Homepage and phillip.eby**20060711000616 download URLs can now be marked with 'rel="download"' and 'rel="homepage"' respectively, and the 'Index of Packages' string is no longer required. Since PyPI doesn't yet support rel="" attributes, the old ""-matching code remains, as does the MD5 scraping. ] [Allow use of file:// URLs for --index-url. phillip.eby**20060710225403] [Fix not recognizing HTML 404 pages from package indexes. phillip.eby**20060710215412] [Ensure that sys.path_importer_cache is updated when an existing zipfile phillip.eby**20060710212514 or directory is deleted. ] [Don't warn about missing README(.txt) unless creating an sdist phillip.eby**20060710211427] [Tweak docs for subversion release stuff to make better use of new phillip.eby**20060710204533 options. ] [Update aliases for easier release using new options phillip.eby**20060710203858] [Add --no-date and --no-svn-revision options to make creating release phillip.eby**20060710203345 snapshots easier. ] [Fix "register" command not necessarily reflecting build tags. phillip.eby**20060710200448] [Include more detailed version ranges spec, and make Requirement.specs a phillip.eby**20060710195406 public/documented attribute. ] [Fix broken error message for socket error during upload. phillip.eby**20060710194835] [Fix ftp:// directory listing URLs from causing a crash when used in the phillip.eby**20060620211924 URL or Download URL slot on PyPI. ] [Implement detection of non-Python scripts, as described in phillip.eby**20060615201616 http://mail.python.org/pipermail/distutils-sig/2006-June/006359.html ] [Allow .py files found by the include_package_data option to be phillip.eby**20060609182428 automatically included. Remove duplicate data file matches if both include_package_data and package_data are used to refer to the same files. ] [Fix mysterious errors during initial setuptools install, caused by phillip.eby**20060609175510 ez_setup trying to run easy_install twice, due to a code fallthru after deleting the egg from which it's running. ] [Fix sometimes not detecting local packages installed outside of "site" phillip.eby**20060609164203 directories. ] [Fix local --find-links eggs not being copied except with --always-copy. phillip.eby**20060607200552] [Fix bdist_egg not including files in .egg-info subdirectories. phillip.eby**20060607193220] [Clarify the limitations of get_provider(packagename) phillip.eby**20060607183701] [Fix a duplicate path insertion bug on case-insensitive filesystems, phillip.eby**20060607182702 found by Markku Mielityinen. ] [Fix a problem w/relative path generation if you install an egg whose phillip.eby**20060530175627 name begins with 'import'. ] [Don't make things warnings that aren't; update info text for phillip.eby**20060526190328 --multi-version. ] [Don't install or update a ``site.py`` patch when installing to a phillip.eby**20060523190927 ``PYTHONPATH`` directory with ``--multi-version``, unless an ``easy-install.pth`` file is already in use there. ] [Merge doc update from 0.6b1 phillip.eby**20060523190645] [Remove outdated MD5 signatures phillip.eby**20060523190613] [Better ambiguity management: accept #egg name/version even if processing phillip.eby**20060512221619 what appears to be a correctly-named distutils file, and ignore .egg files with no '-', since valid Python .egg files always have a version number (but Scheme eggs often don't). ] [Python 2.5 supports -m w/zipped modules, and Python 2.3 has no -m, so phillip.eby**20060428181218 there's no need to treat script modules as zip-unsafe unless we're running 2.4 exactly. ] [Remove out-of-date info about zipfile analysis phillip.eby**20060428180407] [Fix entry point parsing when a standalone module name has whitespace phillip.eby**20060427180244 between it and the extras. ] [Forgot to document script wrappers phillip.eby**20060426001053] [Add "internals" documentation describing file formats, sys.path phillip.eby**20060425223207 manipulation, zip file issues, file naming, etc., mostly by reference to other documentation and a few distutils-sig posts. ] [Catch 'module' names in internal module name list as well. phillip.eby**20060424205018] [Strip 'module' from the end of compiled extension modules when computing phillip.eby**20060424202232 the name of a .py loader/wrapper. Python's import machinery ignores this suffix when searching for an extension module. ] [Recognize 'U' as a valid read-only mode for open() phillip.eby**20060421173855] [Ignore bdist_dumb distributions when looking for downloads. phillip.eby**20060421170643] [Support file:// links to directories in --find-links, so that phillip.eby**20060419001858 easy_install can build packages from local source checkouts. ] [Backport whitespace normalization from 2.5 trunk. phillip.eby**20060419001321] [Split ``get_platform()`` into ``get_supported_platform()`` and phillip.eby**20060418152706 ``get_build_platform()`` to work around a Mac versioning problem that caused the behavior of ``compatible_platforms()`` to be platform specific. ] [Handle being run via -m with no __file__ if done from a zipfile in phillip.eby**20060418042518 Python 2.5. ] [Changes to the experimental 'Feature' feature to be compatible with phillip.eby**20060418034051 Python 2.5 distutils, so the tests don't bomb under 2.5 ] [Make errors __repr__ the same as the default exception repr in Python phillip.eby**20060418032910 2.5, so doctests will work right. :( ] [Move api_tests.txt file to tests subpackage for easier integration phillip.eby**20060418030838 w/stdlib test suites. ] [Backport pkgutil, pydoc, and doctest from the 2.5 trunk to setuptools phillip.eby**20060418030316 0.7 trunk. (Sideport?) Setuptools 0.7 will install these in place of the 2.3/2.4 versions (at least of pydoc and doctest) to let them work properly with eggs. pkg_resources now depends on the 2.5 pkgutil, which is included here as _pkgutil, to work around the fact that some system packagers will install setuptools without overriding the stdlib modules. But users who install their own setuptools will get them, and the system packaged people probably don't need them. ] [Trap absolute paths given as package_dirs, which foul up things terribly. phillip.eby**20060415053216] [First round of prepping setuptools for inclusion in Python 2.5: move phillip.eby**20060414193838 site.py to setuptools/site-patch.py; reinstate 'python -m easy_install' support; use distutils' "upload" command when running under 2.5. ] [Namespace package doc tweaks. phillip.eby**20060414191737] [Don't eagerly import namespace packages. This was the big reason for phillip.eby**20060414191324 branching to 0.7 now, as I wanted this wart gone before anything went into Python 2.5. But it's gone now, yay! ] [Bump trunk version # to 0.7a1.dev, and clear out old version history phillip.eby**20060414181050 from release notes. ] [Added automatic retry for Sourceforge mirrors. The new download process is phillip.eby**20060409202549 to first just try dl.sourceforge.net, then randomly select mirror IPs and remove ones that fail, until something works. The removed IPs stay removed for the remainder of the run. ] [Bump version to 0.6a12dev... but hopefully it will in fact be 0.6b1. phillip.eby**20060330003843] [Misc. doc formatting/phrasing corrections phillip.eby**20060330000010] [0.6a11 release phillip.eby**20060329235925] [Fix typo phillip.eby**20060329234035] [Added ``test_loader`` keyword to support custom test loaders. phillip.eby**20060329233241] [More docs for .py#egg and ``dependency_links`` phillip.eby**20060329230916] [Added ``setuptools.file_finders`` entry point group to allow implementing phillip.eby**20060329222338 revision control plugins. ] [Added ``--identity`` option to ``upload`` command. phillip.eby**20060329214501] [Added ``ExtractionError`` and ``ResourceManager.extraction_error()`` so that phillip.eby**20060329211122 cache permission problems get a more user-friendly explanation of the problem, and so that programs can catch and handle extraction errors if they need to. ] [Fix a problem with the test loader finding the bundled doctest's phillip.eby**20060329210943 TestCase subclasses and trying to run them, too. ] [Implement dependency_links feature, courtesy of Tres Seaver's rough phillip.eby**20060329192355 draft of a patch. ] [Support complex .pth files in win32.exe->.egg conversion; this addition phillip.eby**20060329054140 lets easy_install handle pywin32... well, almost. You still have to deal with the "system" DLLs yourself. ] [Fall back to a reasonable default Sourceforge address if the machine is phillip.eby**20060328230658 unable to obtain the mirror IP list via DNS. ] [Enhanced test loader to scan packages as well as modules, and call phillip.eby**20060328224057 ``additional_tests()`` if present to get non-unittest tests. ] [Support Python 2.5, which now includes its own install_egg_info command. phillip.eby**20060328190752] [Eliminate spurious warnings due to case-insensitive file systems phillip.eby**20060328170706] [Fix ZipImportError when overwriting a zipfile with the same name/version phillip.eby**20060324174902 but different contents. ] [Remove use of obsolete --ignore-conflicts-at-my-risk option phillip.eby**20060324174817] [Ensure SOURCES.txt references itself even the first time it is generated phillip.eby**20060324173452 (i.e., when it didn't exist prior to egg_info being run). ] [Don't generate a loader .py file in .egg file for extensions that aren't phillip.eby**20060321190455 actually built. This prevents problems w/customized setups that make some extensions optional (e.g. scipy.distutils). ] [Use relative paths in ``.pth`` files when eggs are being installed to the phillip.eby**20060320230622 same directory as the ``.pth`` file. This maximizes portability of the target directory when building applications that contain eggs. ] [Added ``easy_install-N.N`` script(s) for convenience when using multiple phillip.eby**20060320222838 Python versions. ] [Fix a problem with fetch() method backward compatibility. phillip.eby**20060317180554] [Tweak the nspkg.pth hack to avoid creating a module if there *is* an phillip.eby**20060317171619 __init__.py installed. It may be that this should check for .pyc/.pyo, but system packagers don't normally remove them. ] [Support namespace packages in conjunction with system packagers, by omitting phillip.eby**20060317165723 the installation of any ``__init__.py`` files for namespace packages, and adding a special ``.pth`` file to create a working package in ``sys.modules``. ] [Preserve timestamps and permissions when "unpacking" (copying) a phillip.eby**20060317155205 directory tree. ] [Added automatic handling of installation conflicts. Eggs are now shifted to phillip.eby**20060311003909 the front of sys.path, in an order consistent with where they came from, making EasyInstall seamlessly co-operate with system package managers. The ``--delete-conflicting`` and ``--ignore-conflicts-at-my-risk`` options are now no longer necessary, and will generate warnings at the end of a run if you use them. ] [Record recent changes in the release notes. phillip.eby**20060304000222] [Made ``--single-version-externally-managed`` automatic when ``--root`` is phillip.eby**20060304000020 used, so that most system packagers won't require special support for setuptools. ] [Don't recurse into subdirectories when scanning --find-links phillip.eby**20060303235100] [Fix setup_requires/tests_require/etc. not using setup.cfg or other phillip.eby**20060228212253 config files for option defaults. ] [When installing setup_requires/tests_require packages, use phillip.eby**20060228205927 --multi-version so that '.' doesn't have to support .pth files. ] [Prevent failed attempts at removing MANIFEST.in from masking errors that phillip.eby**20060221224458 occur while reading it. ] [bump version # phillip.eby**20060221224416] [Misc. doc fixes phillip.eby**20060215151028] [0.6a10 release phillip.eby**20060214210108] [Minor tweak to installation report, and add in a hook for later phillip.eby**20060214205434 displaying the "extras" that can be added to a package. ] [Fix a Windows problem when the Python executable is in a directory with phillip.eby**20060214190756 a ' ' in its name. ] [Added the ``extras`` attribute to ``Distribution``, the ``find_plugins()`` phillip.eby**20060214190504 method to ``WorkingSet``, and the ``__add__()`` and ``__iadd__()`` methods to ``Environment``. ] [Don't compress eggs on Python 2.3, as a possible workaround for 64-bit phillip.eby**20060213213550 zipimport bug. ] [Added exhaustive testing of the install directory, including a spawn test phillip.eby**20060213180947 for ``.pth`` file support, and directory writability/existence checks. This should virtually eliminate the need to set or configure ``--site-dirs``. ] [Fixed duplication of scripts inside .egg files phillip.eby**20060213173242] [Expanded download message so people know what file to get, if they're phillip.eby**20060212233908 going to have to fetch it by hand due to restricted or nonexistent network access. ] [Workaround for packages that think 'version' is a number. phillip.eby**20060212193217] [Misc. doc additions: callback exception handling, and an assortment of phillip.eby**20060212192029 tips and techniques for using easy_install. ] [Fixed the annoying ``--help-commands`` wart, albeit in a most phillip.eby**20060210222348 unfortunately kludgy fashion. ] [--prefix support for even more do-what-I-meanishness. :) phillip.eby**20060210220427] [Implemented DWIM for PYTHONPATH. That is, ez_setup and easy_install phillip.eby**20060210210912 should now "just work" if you're using a PYTHONPATH target, and if it can't "just work", you get helpful instructions and doc links. ] [New version of site.py hack, for better compatibility with distros that phillip.eby**20060210014904 patch the stdlib site.py. This version runs the stdlib site.py, then tries to hack sys.path back to something resembling what the old version did. Unfortunately, this is complex since site.py and .pth files can munge the path in rather arbitrary ways, and the initial setup of sys.path is dependent on the platform and Python version. This code has been tested on Linux, cygwin, and Windows Python, versions 2.2, 2.3, and 2.4 (although not all versions on all platforms), and appears to perform as intended. ] [Ugh. Rereading the Fedora patch shows my previous hack won't actually phillip.eby**20060210013424 accomplish anything useful. This one should, but it needs testing by someone who actually has a Fedora 64-bit x86 setup. ] [Oops, bad indentation. phillip.eby**20060210012622] [Tweak site_dirs detection so that distros with weird layouts (e.g. phillip.eby**20060210012520 /usr/lib64 patches on 64-bit Fedora) will have a better chance of working "out of the box". ] [The ``--find-links`` option previously scanned all supplied URLs and phillip.eby**20060208054654 directories as early as possible, but now only directories and direct archive links are scanned immediately. URLs are not retrieved unless a package search was already going to go online due to a package not being available locally, or due to the use of the ``--update`` or ``-U`` option. Also, fixed the ``develop`` command ignoring ``--find-links``. ] [The ``--always-copy`` option now skips "system" and "development" eggs phillip.eby**20060207164341 since they can't be reliably copied. Note that this may cause EasyInstall to choose an older version of a package than what you expected, or it may cause downloading and installation of a fresh version of what's already installed. ] [Added ``Distribution.clone()`` method, and keyword argument support to phillip.eby**20060207164055 other ``Distribution`` constructors. Added the ``DEVELOP_DIST`` precedence, and automatically assign it to eggs using ``.egg-info`` format. ] [Implement more Mac OS X version handling stuff requested by Bob phillip.eby**20060207133650 Ippolito. ] [Honor get_platform() for Mac OS X if it starts with 'macosx-' phillip.eby**20060204000325] [Fix missing import. phillip.eby**20060127164759] [Expand ``$variables`` used in the ``--site-dirs``, ``--build-directory``, phillip.eby**20060126220807 ``--install-dir``, and ``--script-dir`` options, whether on the command line or in configuration files. ] [Randomly select a SourceForge mirror IP for each download, to work phillip.eby**20060123162916 around too-aggressive DNS caches on some platforms, that could otherwise result in a stuck bad IP. ] [Fix typo. phillip.eby**20060122222244] [Scrape-proof Sourceforge mirror processing! phillip.eby**20060117195659] [Fix editing error (reported by Ian Bicking). phillip.eby**20060117184756] [More sourceforge changes. :( phillip.eby**20060117184446] [Tweak build configuration for OS X, based on suggestions from Michael phillip.eby**20060114193455 Twomey on the distutils-sig. (It looks like we may also need to add an '-install_name' or some such to the library link step.) ] [Attempt to define some reasonable flags for OS X linker. phillip.eby**20060114013413] [Fix broken import phillip.eby**20060114001318] [Don't keep the stub .py file around, just the .pyc/.pyo. Don't write phillip.eby**20060114001203 a stub to the source tree if it would overwrite an existing .py file. ] [Ensure installed stubs get compiled, even if there are no "pure" modules phillip.eby**20060113235242 present. Also, don't bother compiling the stub prior to installation. ] [Write stub files correctly for build_ext --inplace phillip.eby**20060113233255] [Implement LD_LIBRARY_PATH workaround stub loader phillip.eby**20060113231656] [Don't write .py stubs except for actual extensions that don't already phillip.eby**20060113223257 have them. ] [Oops. phillip.eby**20060113215905] [Add experimental code for wrapping relocatable shared libraries on phillip.eby**20060113215712 platforms that support the 'dl' module. ] [EasyInstall can now download bare ``.py`` files and wrap them in an egg, phillip.eby**20060110040054 as long as you include an ``#egg=name-version`` suffix on the URL, or if the ``.py`` file is listed as the "Download URL" on the project's PyPI page. This allows third parties to "package" trivial Python modules just by linking to them (e.g. from within their own PyPI page or download links page). ] [``safe_name()`` now allows dots in project names, and there is a new phillip.eby**20060110034922 ``to_filename()`` function that escapes project names and versions for safe use in constructing egg filenames from a Distribution object's metadata. Note that allowing dots may now cause problems for projects with '.' in the name that were previously installed, since such projects had to be spelled with a '-' before. The '-' name will no longer match the '.' project, and there is no real room for backward compatibility here. :( ] [PyPI searches now use the exact spelling of requirements specified on phillip.eby**20060107001958 the command line or in a project's ``install_requires``. Previously, a normalized form of the name was used, which could lead to unnecessary full-index searches when a project's name had an underscore (``_``) in it. ] [SharedLibrary -> Library. For now, Windows libs get built as shared, phillip.eby**20060106195736 and other platforms get static. :( ] [Remove debug print left in by mistake. phillip.eby**20060105233042] [First draft of shared library build support. See tests/shlib_test phillip.eby**20060105231421 for a trivial example. This has only been tested on Windows with a MinGW compiler, and the Mac OS support isn't finished. Testing w/other platforms+compilers would be helpful. ] [Bump version number to start the 0.6a10dev cycle. phillip.eby**20060105000157] [0.6a9 release phillip.eby**20060104175552] [Make it clearer that Requirement.parse() is the only way for users phillip.eby**20060103231020 to create correct Requirement instances. ] [Tweak windows environment variable doc, per user feedback. phillip.eby**20060103213522] [Allow most commands to work with an existing .egg-info directory w/a '-' phillip.eby**20051230163542 in it, but warn about it and refuse to run "develop" until the existing directory is renamed. This should allow older source distributions and checkouts to keep working with 0.6a9. ] [Fix unescaped '-' in .egg-info directory names. Note that this means phillip.eby**20051230161135 you must rename any existing .egg-info directory inside a project that has a '-' in it! ] [Make the install_scripts command respect the "build_scripts -e" phillip.eby**20051226192141 option when installing generated scripts using the --single-version-externally-managed option. ] [Fix typo. :( phillip.eby**20051220171831] [Fix "legacy mode" trying to install scripts when there are none. phillip.eby**20051220163129] [Changes so that upgrading an existing setuptools to a development phillip.eby**20051220162150 version doesn't lose its entry points by using the already-installed setuptools as a basis for generating them. ] [Incorporate Bob Ippolito's corrections to Mac OS X instructions. phillip.eby**20051218170702] [Add notes about bdist_msi, bdist_nsi, and bdist_deb formats' phillip.eby**20051216204910 compatibility with setuptools. ] [Added "What Your Users Should Know" section, telling package developers phillip.eby**20051216201501 what information they should give to their users about dependencies, network access, system packaging, and other common questions or concerns. ] [Fix bdist_dumb support to use .egg-info instead of .egg format. phillip.eby**20051216193721] [Overhaul installation docs to address frequently asked questions phillip.eby**20051216184656 and problems, and to document additional approaches to dealing with custom install locations. Also, added a note about the parameters of ``use_setuptools()`` so that persons needing to distribute e.g. an in-development version of setuptools can do so. ] [Modify resource extraction to bypass sandbox control so that egg phillip.eby**20051215194903 extraction during setup runs is not restricted. ] [Make install_egg_info track every file it installs, not just the phillip.eby**20051215181112 directory it installs to. ] [Improve startup performance when sys.path contains a lot of eggs, by phillip.eby**20051215181010 caching normalized versions of path entries. It appears that normalizing paths using os.path.realpath is extremely expensive on at least Windows. Caching cuts the overhead by around 30X. ] [Added the ``exclude_package_data`` keyword to ``setup()``, allowing you phillip.eby**20051215024503 to trim back files included via the ``package_data`` and ``include_package_data`` options. ] [Support full roundtrip translation of eggs to and from ``bdist_wininst`` phillip.eby**20051214234722 format. Running ``bdist_wininst`` on a setuptools-based package wraps the egg in an .exe that will safely install it as an egg (i.e., with metadata and entry-point wrapper scripts), and ``easy_install`` can turn the .exe back into an ``.egg`` file or directory and install it as such. At this point, it should also be possible to "system package" any egg, complete with wrapper scripts, and at least bdist_wininst works now. More testing is needed for at least bdist_dumb and bdist_rpm. ] [Refactor script wrapper generation into a separate function so that it phillip.eby**20051214225641 can be used by the future install_scripts command to install entry point scripts in "legacy" mode. ] [Basic roundtripping support between bdist_wininst and eggs. EasyInstall phillip.eby**20051214204936 will now recognize when a bdist_wininst .exe wraps a .egg-info style package, and reconstitute it correctly, maintaining the original zip safety flag, if applicable. This still needs support for entrypoint scripts, though, as does the install_scripts command. ] [Oops. phillip.eby**20051214182628] [Added a ``--single-version-externally-managed`` option to the ``install`` phillip.eby**20051214181011 command so that you can more easily wrap a "flat" egg in a system package. Enhanced ``bdist_rpm`` so that it installs single-version eggs that don't rely on a ``.pth`` file. The ``--no-egg`` option has been removed, since all RPMs are now built in a more backwards-compatible format. Some work is now needed for easy_install to recognize bdist_wininst .exe's that wrap these new flat eggs, as currently the .egg-info will not be recognized. ] [Added an internal ``install_egg_info`` command to use as part of old-style phillip.eby**20051214173730 ``install`` operations, that installs an ``.egg-info`` directory with the package. This is a preliminary step to implementing "install --single-version-externally-managed" for use with bdist_* commands and Debian. ] [Changed ``parse_version()`` to remove dashes before pre-release tags, so phillip.eby**20051206174136 that ``0.2-rc1`` is considered an *older* version than ``0.2``, and is equal to ``0.2rc1``. The idea that a dash *always* meant a post-release version was highly non-intuitive to setuptools users and Python developers, who seem to want to use ``-rc`` version numbers a lot. ] [Added an ``unpack_directory()`` driver to ``setuptools.archive_util``, so phillip.eby**20051206031248 that you can process a directory tree through a processing filter as if it were a zipfile or tarfile. ] [Remove unneeded code that slipped into last commit. phillip.eby**20051206031122] [Added support for ``.egg-info`` files or directories with version/platform phillip.eby**20051206010227 information embedded in the filename, so that system packagers have the option of including ``PKG-INFO`` files to indicate the presence of a system-installed egg, without needing to use ``.egg`` directories, zipfiles, or ``.pth`` manipulation. ] [Made all commands that use ``easy_install`` respect its configuration phillip.eby**20051201014539 options, as this was causing some problems with ``setup.py install`` ignoring global site-dirs settings. ] [Misc. doc enhancements phillip.eby**20051201011803] [If more than one URL appears to describe the exact same distribution, prefer phillip.eby**20051126185935 the shortest one. This helps to avoid "table of contents" CGI URLs like the ones on effbot.org. ] [Added ``tests_require`` keyword to ``setup()``, so that e.g. packages phillip.eby**20051119203840 requiring ``nose`` to run unit tests can make this dependency optional unless the ``test`` command is run. ] [Kludges to make building packages with '-' in their version work with phillip.eby**20051119193629 bdist_rpm. This still doesn't address the issue of building RPMs that don't effectively install as multi-version eggs, but at least now building RPMs for development eggs is possible. ] [Added warning for namespace packages with missing ``declare_namespace()``, phillip.eby**20051118172947 updated docs for new policy/implementation, and explain the reasons for the change and what to do about it. ] [Fixed ``.pth`` file processing picking up nested eggs (i.e. ones inside phillip.eby**20051118150050 "baskets") when they weren't explicitly listed in the ``.pth`` file. ] [Add tutorial section on choosing project version numbers that phillip.eby**20051118143125 will work well with automated tools based on pkg_resources. ] [Fix .svn exclude pattern for non-Windows platforms. phillip.eby**20051118131533] [Fixed ``--tag-svn-revision`` not working when run from a source phillip.eby**20051118112950 distribution. ] [Added the ``include_package_data`` keyword to ``setup()``, allowing you to phillip.eby**20051118043731 automatically include any package data listed in revision control or ``MANIFEST.in``. Now projects can manage their data files and source manifests without having to maintain two ways to express the same file list. Yay! ] [The ``sdist`` command no longer uses the traditional ``MANIFEST`` file to phillip.eby**20051118034516 create source distributions. ``MANIFEST.in`` is still read and processed, as are the standard defaults and pruning. But the manifest is built inside the project's ``.egg-info`` directory as ``SOURCES.txt``, and it is rebuilt every time the ``egg_info`` command is run. ] [Build a SOURCES.txt manifest file in .egg-info, that can then be included in phillip.eby**20051118031307 sdist distributions to support building an sdist from an sdist (which the bdist_rpm command requires). This will also be the basis for enhanced package data support, that will allow optionally using the manifest to identify package data files instead of having separate manual identification of the data files. ] [Bump version number to begin the 0.6a9 developent cycle phillip.eby**20051118022208] [Don't raise an error when an invalid (unfinished) distribution is found phillip.eby**20051118020730 unless absolutely necessary. Warn about skipping invalid/unfinished eggs when building an Environment. ] [Quote arguments to python.exe (including python's path) to avoid phillip.eby**20051117030133 problems when Python (or a script) is installed in a directory whose name contains spaces. :( ] [0.6a8 final. phillip.eby**20051116191808] [Update for SourceForge's changed mirror page formats phillip.eby**20051116184305] [Fixed a problem with nested namespace packages (e.g. ``peak.util``) not phillip.eby**20051113010833 being set as an attribute of their parent package. ] [Record case-insensitivity fix. phillip.eby**20051109033043] [Document shared library autodetection phillip.eby**20051109032857] [Detect .dll, .so, .dylib and .pyd files that might have phillip.eby**20051109032334 been included in a project as data files rather than as Python extensions. ] [Normalize items in sys.path when determining where to insert phillip.eby**20051109030230 a new item. ] [Fix rmtree() brokenness with Python 2.4 by breaking down and copying phillip.eby**20051105163236 shutil.rmtree from 2.4 directly into easy_install.py. ] [Fixed some problems with fresh checkouts of projects that don't include phillip.eby**20051105055026 ``.egg-info/PKG-INFO`` under revision control and put the project's source code directly in the project directory. If such a package had any requirements that get processed before the ``egg_info`` command can be run, the setup scripts would fail with a "Missing 'Version:' header and/or PKG-INFO file" error, because the egg runtime interpreted the unbuilt metadata in a directory on ``sys.path`` (i.e. the current directory) as being a corrupted egg. Setuptools now monkeypatches the distribution metadata cache to pretend that the egg has valid version information, until it has a chance to make it actually be so (via the ``egg_info`` command). ] [Made ``egg_info --tag-svn-revision`` fall back to extracting the phillip.eby**20051104053822 revision number from ``PKG-INFO`` in case it is being run on a source distribution of a snapshot taken from a Subversion-based project. That is, if a project builds an sdist with --tag-svn-revision in setup.cfg, then the built sdist will create binaries with the same version number as the checkout that was used to create the sdist. ] [Reduce the number of redundant host blocking warnings by not phillip.eby**20051104031844 retrying the same previously-blocked URLs. ] [Made ``develop`` command accept all the same options as ``easy_install``, phillip.eby**20051104030830 and use the ``easy_install`` command's configuration settings as defaults. ] [Workaround for broken DISTUTILS_DEBUG output. phillip.eby**20051104030652] [Document best practices for managing continuous releases with phillip.eby**20051104022934 Subversion, #egg links, --tag-svn-revision, etc., to reflect the community experience with the tools to date. ] [* Improved runtime conflict warning message to identify a line in the user's phillip.eby**20051104015325 program, rather than flagging the ``warn()`` call in ``pkg_resources``. * Avoid giving runtime conflict warnings for namespace packages, even if they were declared by a different package than the one currently being activated. ] [Fixed some problems building extensions when Pyrex was installed, especially phillip.eby**20051103035542 with Python 2.4 and/or packages using SWIG. ] [Handle non-requirement installs correctly for dependency processing phillip.eby**20051103035206 (e.g. "setup.py install", or "easy_install somefile/someurl"). ] [Fix some Subversion-related problems reported by John J. Lee: phillip.eby**20051103032844 * Fixed not installing dependencies for some packages fetched via Subversion * Fixed dependency installation with ``--always-copy`` not using the same dependency resolution procedure as other operations. * Fixed not fully removing temporary directories on Windows, if a Subversion checkout left read-only files behind ] [Switch setuptools to use 'dev-rNNNN' version tags by default, and configure phillip.eby**20051103023426 so that people can use 'ez_setup.py setuptools==dev' to fetch the latest in-development version. ] [Fixed a problem with ``WorkingSet.resolve()`` that prevented version phillip.eby**20051103022449 conflicts from being detected at runtime. (As reported by Ian Bicking.) ] [Oops, this was part of 0.6a7 too. phillip.eby**20051102235821] [Fix documentation typos, and note that Python 2.4 is required on 64-bit phillip.eby**20051102235744 platforms (due to a bugfix in zipimport.c that was never backported to the 2.3 branch). ] [0.6a7 bugfix release phillip.eby**20051102235534] [Fixed a problem extracting zipped files on Windows, when the egg in pje**20051022190744 question has had changed contents but still has the same version number. ] [Added "--allow-hosts" option to restrict downloading and spidering to pje**20051019030035 a specified list of server glob patterns. ] [Hurray! Our first dependency processing bug! This is cool because it pje**20051018040846 means that people are finally doing enough things with setuptools to have real-life version conflict scenarios. Luckily, the fix is trivial: use breadth-first instead of depth-first dependency processing, which I thought we were already doing anyway, but weren't. And we were giving precedence to already-installed packages, which means upgrades didn't work so well. ] [Prep for 0.6a6 release. pje**20051017024439] [Fix a typo in patched site.py. pje**20051017023900] [Significantly enhanced support and docs for "non-root" installation, pje**20051017022639 including both "virtual" and PYTHONPATH-based installs. The activation precedence of distributions has also changed so that PYTHONPATH-based non-root installs can include eggs that override system-defined packages (whether managed or unmanaged). This version should eliminate most common installation complaints from non-root Python users. Note: this version includes a hacked 'site.py' to support processing .pth files in directories that come *before* site-packages on sys.path. However, because of its placement, it should only come into play when a user puts the setuptools .egg file *directly* on PYTHONPATH, so it doesn't affect "virtual" or "root" installations. It's strictly to provide support for luddites who refuse to give up their existing non-root PYTHONPATH setup unless you pry it from their cold, dead hands. :) ] [Fix problem with Windows console scripts conflicting with module names, pje**20051016204530 thereby confusing the import process. Scripts are now generated with a suffix of the form '-script.py' to avoid conflicts. (The .exe's are still generated without the '-script' part, so you don't have to type it.) Thanks to Matthew R. Scott for reporting the problem. ] [Implement --no-deps option, add link to Ian Bicking's non-root Python pje**20051016174211 builder script. ] [0.6a5 brown bag bug fix release. pje**20050929170543] [Bugfixes. :( pje**20050929164955] [0.6a4 bugfix release. pje**20050926004600] [Ensure that WorkingSet.resolve() (and therefore require() as well) pje**20050926003535 returns a list of the relevant distributions, even if they are found in the working set rather than the environment. This fixes some problems in the 0.6a3 release. ] [0.6a3 release. pje**20050924214059] [Support generating .pyw/.exe wrappers for Windows GUI scripts, and pje**20050924202957 "normal" #! wrappers for GUI scripts on other platforms. ] [Fix a problem with inconsistent quoting of "extras", reported by Ian pje**20050924194828 Bicking on the distutils-sig. ] [Add release notes for changes made today. pje**20050924194520] [Fix a bug parsing #egg links reported by Ben Bangert on the distutils-sig. pje**20050924194427] [Implement smart version conflict resolution for scripts, so that pje**20050924175822 installed applications will not have their eggs overridden by packages installed locally on sys.path. This should also make things work a bit better for "traditional" non-root Python setups on Unixy operating systems. See: http://mail.python.org/pipermail/distutils-sig/2005-September/005164.html for more details. ] [Improve backward compatibility, so that users running easy_install.py or pje**20050924172856 python -m easy_install get a clearer error message. ] [Fix typo. Add setup for include/python2.X directory in non-root install pje**20050924143043 instructions. ] [setuptools 0.6a2 release pje**20050918040238] [Added support to solve the infamous "we want .py on Windows, no pje**20050917011302 extension elsewhere" problem, while also bypassing the need for PATHEXT on Windows, and in fact the need to even write script files at all, for any platform. Instead, you define "entry points" in your setup script, in this case the names of the scripts you want (without extensions) and the functions that should be imported and run to implement the scripts. Setuptools will then generate platform-appropriate script files at install time, including an .exe wrapper when installing on Windows. ] [Fixed cheeseshop URL. pje**20050917001837] [Fix another typo pje**20050914164507] [Update cheeseshop URL, fix typo. pje**20050914164123] [0.6a1 release of setuptools. pje**20050914033349] [Correctly handle URL fragments in --find-links. pje**20050914032810] [Release 0.6a1c2. pje**20050903050112] [Add release note about bdist_rpm --no-egg option pje**20050903045310] [Added support for old-style RPMs (i.e. non-egg RPMs) pje**20050903045127] [Ensure wrapper scripts are included in output file record; this is pje**20050903045005 especially important for RPMs with scripts. ] [Make sure that script target directory exists. Ordinarily it should, but pje**20050903043718 some bdist_* targets install to a pseudo-root where stuff might not exist. ] [Fix typo in symlink handling code. pje**20050903040403] [Work around a problem with SuSE Linux's patched install_lib command, by pje**20050903032054 figuring out the extension paths without its help. :( ] [More minor doc tweaks. pje**20050823134550] [Minor doc tweaks, and add release note about symlink support. pje**20050823134220] [D'oh! os.path.islink is available on all platforms. Also, ensure that we pje**20050823133452 do directory tree removals only if isdir() and not islink(), and use unlink() in all other cases. ] [Simplify non-root install process and improve Mac OS docs for it. Support pje**20050823132442 .pth files and legacy packages possibly being symlinks, and ensure that overwrites don't follow the symlink. ] [Make easy_install --record strip the RPM root when building RPMs, and have pje**20050822134010 bdist_egg ignore the RPM root when building an egg. This version now can actually run bdist_rpm to completion, although the resulting RPM will install an egg without a corresponding .pth file. ] [Remove broken example. pje**20050822035342] [Bump release version to 0.6a1. Fix a minor cosmetic issue on certain pje**20050822035019 ez_setup installs. ] [Give pkg_resources its own revision history; add some notes on today's pje**20050822034020 fixes and enhancements. ] [More documentation enhancements. pje**20050822032827] [Add detailed instructions for non-root installation using PYTHONHOME. pje**20050822031458] [Add release note about the new MD5 validation feature. pje**20050822011705] [Implemented md5 validation for PyPI and for URLs with a "#md5=..." anchor. pje**20050822011314] [Add hardcoded md5 checking to ez_setup. Also, don't delay and display pje**20050822003547 banner if ez_setup is run as a command-line script, since its whole purpose in that case is to download setuptools. Running "ez_setup.py --md5update FILE [FILE...]" will update the internal md5 checksum dictionary with new or changed distributions. You should only do this if you are a setuptools maintainer, however! ] [Fix a problem running build_ext -i w/no extensions. pje**20050822003248] [Display a download warning in ez_setup, so that people won't be caught pje**20050821235554 off-guard by the setuptools download (which only occurs if setuptools isn't locally available, of course). ] [Fix problem w/bdist_rpm and setuptools, reported by Walter Doerwald. I pje**20050821233340 was trying to have setuptools fix distutils' broken filename handling that assumes people haven't put punctuation in their distribution names, including '-' (which prevents unambiguous parsing of distribution names). However, bdist_rpm's attempt to guess a source distribution's filename isn't compatible with this fix, without making other changes. I decided therefore to drop the fixes for the sake of backward compatibility, but monkeypatch bdist_rpm so that it runs "egg_info" first, to ensure that any --tag-svn-revision or other tagging options take effect. ] [Make "build_ext --inplace" work sanely w/multiple Python versions and pje**20050821225957 platforms, by ensuring that the in-place extensions are the right ones for the currently-running Python, even if they are newer than their sources. (This, like so many other setuptools fixes and enhancements, should probably be backported into the distutils as well, although it would have to be implemented a bit differently.) ] [Thanks to Richard Jones, we no longer need to fake out PyPI with a '.zip' pje**20050821221212 extension for eggs. ] [Parse .svn/entries directly instead of using 'svn info' to obtain a pje**20050821214939 revision number. (Christopher Lenz reported that svn info's output is different in non-English locales.) ] [Fix namespace packages not getting fixed up when the eggs are zipped and pje**20050819010153 loaded late (i.e. via require). Thanks to Walter Doerwald for the bug report. ] [Auto-generate namespace __init__.py files for packages without them. This pje**20050814211745 is a workaround for packages like 'll-color', which are distributed without 'll/__init__.py', to avoid overwriting ll-core's copy of ll/__init__.py. This allows existing packages that use this sort of kludging to be treated as a crude namespace package, as long as the "real" __init__.py also calls declare_namespace(). ] [Minor refactoring of code that checks a distribution's contents. pje**20050814211446] [Add experimental support for merging non-empty namespace packages. This pje**20050814210133 lets you have one distribution containing a non-empty __init__.py for the package, as long as you call 'declare_namespace()' from that __init__.py and all other __init__.py files for the namespace package, and do *not* declare it as a namespace package in setup() (so that it won't be automatically imported if it's on sys.path, the way empty namespace packages are.) ] [Fix a bug introduced by removing the Environment.get() method. pje**20050814204649] [On second thought, don't. :( Walter Doerwald's situation isn't really pje**20050814201856 compatible with namespace packages, even if I do manage to hack up a way to make it work. ] [Allow distributing an empty namespace package. pje**20050814201628] [Fix some reST formatting problems and other issues discovered during a pje**20050814174807 quick review. ] [Document "Distribution" objects. Now the API reference is complete, and I pje**20050814173015 just need to write the Overview and Developer's Guide sections so that most people won't have to actually *read* the API reference. :) ] [Documentation for namespace packages, working sets, and supporting custom pje**20050814060837 PEP 302 importers. Once the "Distribution" class is documented, this will be a complete API reference for pkg_resources. ] [Make "run_script" a method of WorkingSet objects, thereby removing a global pje**20050814060320 coupling. ] [Document the "Environment" class, and simplify its API. pje**20050814014538] [Document "Requirement" objects. pje**20050814003728] [Added docs for main EntryPoint APIs, and cleaned up the API itself a bit. pje**20050813230408 Also fixed a few bugs. ] [Fixed breakage of bdist_* commands that call the 'install' command. pje**20050811145854] [Fix bugs reported by Ian Bicking, Walter Doerwald, and Vincenzo Di Massa. pje**20050811003737] [Fix a bug introduced by making split_sections() not lowercase section pje**20050809155039 headings. ] [Document resource and metadata access APIs. pje**20050807205410] [Add docs for exceptions, and for much of the ResourceManager API. pje**20050807055237] [Document utility routines. Made ``split_sections()`` not lowercase its pje**20050807045044 section headers any more, since e.g. entry point group names are case-sensitive. ] [Renamed AvailableDistributions -> Environment. Add sketch of pkg_resources pje**20050807010336 manual outline. ] [Allow distutils extensions to define new kinds of metadata that can be pje**20050806211750 written to EGG-INFO. Extensible applications and frameworks can thus make it possible for plugin projects to supply setup() metadata that can then be used by the application or framework. ] [Fix WorkingSet yielding the same distribution more than once if more than pje**20050806205401 one path entry points to it. ] [Got rid of the no-longer meaningful "depends" command. Consolidated the pje**20050806192949 replacement of the "install" command so that installation is always via easy_install, but doesn't use the previous kludgy intereception technique. Allow ``extra_path`` to be set, but ignore it, so that when easy_install wraps a package that uses it, there won't be any confusion as to the desired installation location. ] [Enhanced setuptools infrastructure to support distutils extensions that pje**20050806184628 can be plugged in at setup() time to define new setup() arguments or distutils commands. This allows modularization and reuse of distutils extensions in a way that was previously not possible. ] [Allow specifying an environment and/or installer for entry-point loading. pje**20050806175658 This will be used by setuptools to automatically install eggs that may be needed as part of a build process, or to invoke a particular command. ] [Change dependency processing algorithm for less redundancy in the common pje**20050806175455 case, and more thoroughness in the --always-copy case. ] [Fix wrongly including files that Subversion has marked deleted. pje**20050806162644] [Performance boosts: don't create environment during require()/resolve() pje**20050806023052 if all requirements can be met with items already in the working set. Don't eagerly determine whether a path is a directory. Avoid redundant path operations, etc. These changes dropped the test suite runtime from over 3.4 seconds to around .34 seconds. ] [Fix a problem with zip paths reported by Ashley Walsh. pje**20050803131850] [Misc. bugs reported by Ian Bicking and Ashley Walsh. pje**20050731163118] [Misc. bug fixes and doc additions. Add 'iter_entry_points()' API. pje**20050725031251] [Implement "entry points" for dynamic discovery of drivers and plugins. pje**20050724224706 Change setuptools to discover setup commands using an entry point group called "distutils.commands". Thanks to Ian Bicking for the suggestion that led to designing this super-cool feature. ] [Fix eager resource extraction. Add eager_resources setup() argument. Add pje**20050724175927 support for obtaining project-level resources by making get_provider() accept Requirement objects. ] [Fix a regression; this code was changed in order to avoid being fooled by pje**20050724055107 incompatible eggs that might have ended up in the distribution directory, but the "fixed" code was broken. ] [Implement --editable option, which allows you to just download and extract pje**20050724024144 (or check out from Subversion) one or more source distributions, without actually building or installing them (or their dependencies). ] [Fixed the setup script sandbox facility not recognizing certain paths as pje**20050724023820 valid on case-insensitive platforms. ] [Improved backward compatibility of Mac OS platform string changes, thanks pje**20050721161134 to more help from Kevin Dangoor. ] [Tweak Mac OS platform string based on Mac SIG feedback: remove "micro" pje**20050721045050 version number, and map "PowerPC" and "Power_Macintosh" to "ppc". ] [Added support for handling MacOS platform information in ``.egg`` pje**20050721011131 filenames, based on a contribution by Kevin Dangoor. (NOTE: this may make eggs compiled for OS X with older versions of setuptools unusable! If you have eggs whose file/directory names end with ``-darwin-*.egg``, you will probably need to rename them to ``-macosx-*.egg``, substituting your current Mac OS version for the darwin kernel version in the version number. Or, you can just delete and reinstall the problematic eggs.) ] [Make 'test' command work correctly with the 0.6 WorkingSet class. pje**20050721005107] [Fixed installing extra ``.pyc`` or ``.pyo`` files for scripts with ``.py`` pje**20050721004945 extensions. ] [Catch a few missed terminology changes. pje**20050718022814] [Massive API refactoring; see setuptools.txt changelog for details. Also, pje**20050718020630 add ``#egg=project-version`` link support, and docs on how to make your package available for EasyInstall to find. ] [Massive API refactoring; see setuptools.txt changelog for details. Also, pje**20050718013945 add ``#egg=project-version`` link support, and docs on how to make your package available for EasyInstall to find. ] [The ``path`` attribute of ``Distribution`` objects is now ``location``, pje**20050717195438 because it isn't necessarily a filesystem path (and hasn't been for some time now). ``Distribution`` objects now have an ``as_requirement()`` method that returns a ``Requirement`` for the distribution's project name and version. ] [``Distribution`` objects now implement the ``IResourceProvider`` and pje**20050717190115 ``IMetadataProvider`` interfaces, so you don't need to reference the (no longer available) ``metadata`` attribute to get at these interfaces. ] [Renamings for consistent terminology; distributions and requirements now pje**20050717044242 both have 'project_name' attributes, instead of one having 'name' and the other 'distname'. Requirements no longer have 'options', they have 'extras'. This is the beginning of the terminology/architecture refactoring described at: http://mail.python.org/pipermail/distutils-sig/2005-June/004652.html ] [Added ``--site-dirs`` option to allow adding custom "site" directories. pje**20050716215750 Made ``easy-install.pth`` work in platform-specific alternate site directories (e.g. ``~/Library/Python/2.x/site-packages``). ] [Fixed some problems using ``pkg_resources`` w/PEP 302 loaders other than pje**20050716172535 ``zipimport``. Fixed ``pkg_resources.resource_exists()`` not working correctly. ] [Fix only detecting the revision number of the setup directory, not the pje**20050716164302 highest revision number for the project as a whole. ] [prep for 0.5a13 release pje**20050716161729] [Fix a problem extracting resources from nested packages. pje**20050715041137] [Fix formatting error. pje**20050715041012] [Prep for 0.5a12 release; update docs. pje**20050713001000] [Updated extraction/cache mechanism for zipped resources to avoid inter- pje**20050713000925 process and inter-thread races during extraction. The default cache location can now be set via the ``PYTHON_EGGS_CACHE`` environment variable, and the default Windows cache is now a ``Python-Eggs`` subdirectory of the current user's "Application Data" directory, if the ``PYTHON_EGGS_CACHE`` variable isn't set. ] [Update zip-safety scanner to check for modules that might be used as pje**20050712234322 ``python -m`` scripts. Misc. fixes for win32.exe support, including changes to support Python 2.4's changed ``bdist_wininst`` format. ] [Fixed not being able to use python -m easy_install. pje**20050712232232] [Add a message explaining that you can use -U setuptools to reinstall or pje**20050712232206 upgrade setuptools. ] [Fix breakage of the "develop" command that was caused by the addition of pje**20050712160900 ``--always-unzip`` to the ``easy_install`` command. Bump version for bug fix release. ] [Drop links to the Windows installer; it was installing an "unmanaged" pje**20050712053458 version of setuptools! ] [Bump version #. pje**20050712053205] [Fix bugs and implement features reported/requested by folks on the pje**20050712053136 Distutils-SIG. ] [Update to 0.5a9, add zip_safe flag, and fix a doc error. pje**20050711042157] [Enhanced "zip safety" analysis (including scan of win32.exe's) and have pje**20050711041248 EasyInstall act on zip safety flags. Add a lot more docs for setuptools. ] [First-pass implementation of zippability analysis; scans for impure pje**20050710162426 distribution or use of __file__/__path__ and selected 'inspect' operations. Currently, the analysis is a bit overconservative; when the runtime is more robust, it should probably allow extensions to be zipped by default. ] [Implement ``namespace_packages`` keyword to ``setup()``. Added keyword pje**20050710154308 summary to setuptools doc. Begin work on ``zip_safe`` flag. ] [Add an example of using the new "directory w/setup.py" feature pje**20050710152412] [EasyInstall now builds eggs in a temporary directory alongside the setup pje**20050710052944 script it's running. This avoids it getting confused by projects with non-standard distribution locations, and projects that may have various eggs already sitting in their distribution directory. It should probably also do something like this for the build directory to ensure a clean, fresh build, but it seems like overkill, since it only affects local projects, not stuff that EasyInstall downloaded in the first place. ] [Allow EasyInstall to accept a directory containing a setup script as one pje**20050710050631 of its arguments. Fix swapped short option names for --bdist-dir and --dist-dir in bdist_egg. ] [Detect and handle conflicts with "unmanaged" packages when installing pje**20050710044931 packages managed by EasyInstall. Also, add an option to exclude source files from .egg distributions. ] [Added command reference to documentation. pje**20050709162723] [Changed --tag-svn-revision to include an "r" in front of the revision pje**20050709162554 number for better readability. ] [Remove old-style requirements from setup.py, to avoid confusing people who pje**20050709042738 look to it for an example of setuptools use. ] [Add informative comment when uploading eggs, to help distinguish them from pje**20050709042621 source archives. ] [Fix typos in option specs for bdist_egg. pje**20050709042549] [Added ``exclude=patternlist`` option to ``setuptools.find_packages()`` pje**20050709042438] [Include ``svn:externals`` directories in source distributions as well as pje**20050709042122 normal subversion-controlled files and directories. ] [Doc and other updates for 0.5a8 release. Add project aliases for source pje**20050708155205 and binary register+upload. ] [Delete empty sections when their last option is deleted. pje**20050708155032] [Cleaner argument quoting in command aliases. pje**20050708154953] [Partial first draft documentation for setuptools. Split revision history pje**20050708151314 between setuptools and easy_install docs. Pull project's long_description from the documentation, for a more informative PyPI project page. ] [Restructured the 'alias' command to take arguments instead of options, and pje**20050708151119 to display the definition of the named alias or of all aliases. ] [Fix a couple of command descriptions. pje**20050708051120] [Added support for defining command aliases in distutils configuration pje**20050708050923 files, under the "[aliases]" section. To prevent recursion and to allow aliases to call the command of the same name, a given alias can be expanded only once per command-line invocation. You can define new aliases with the "alias" command, either for the local, global, or per-user configuration. ] [* Added "rotate" command to delete old distribution files, given a set of pje**20050708044820 patterns to match and the number of files to keep. (Keeps the most recently-modified distribution files matching each pattern.) * Added "saveopts" command that saves all command-line options for the current invocation to the local, global, or per-user configuration file. Useful for setting defaults without having to hand-edit a configuration file. * Added a "setopt" command that sets a single option in a specified distutils configuration file. ] [The "egg_info" command now always sets the distribution metadata to "safe" pje**20050708044558 forms of the distribution name and version, so that distribution files will be generated with parseable names (i.e., ones that don't include '-' in the name or version). Also, this means that if you use the various ``--tag`` options of "egg_info", any distributions generated will use the tags in the version, not just egg distributions. ] [Fix problems upgrading an already-installed setuptools version. pje**20050707163831] [Add upload support to setuptools, and make default downloads of setuptools pje**20050707162843 come from PyPI/python.org rather than from telecommunity.com. Bump to version 0.5a7. ] [Bump release version pje**20050707021014] [Update revision history. pje**20050707020556] [Beefed up the "sdist" command so that if you don't have a MANIFEST.in, it pje**20050707020325 will include all files under revision control (CVS or Subversion) in the current directory, and it will regenerate the list every time you create a source distribution, not just when you tell it to. This should make the default "do what you mean" more often than the distutils' default behavior did, while still retaining the old behavior in the presence of MANIFEST.in. ] [Slightly changed the format of the generated version when you use pje**20050707020154 ``--tag-build`` on the "egg_info" command, so that you can make tagged revisions compare *lower* than the version specified in setup.py (e.g. by using ``--tag-build=dev``). ] [Don't modify .pth files when in --dry-run/-n mode. pje**20050707015759] [Fix for .py scripts that might be imported (e.g. the "py" library's hideous pje**20050707015357 '_findpy.py' hack.) ] [Backward-compatibility fix, so ez_setup can upgrade older versions of pje**20050707015221 setuptools. ] [Add a note about interaction between exemaker and easy_install pje**20050707015146] [Bump version to 0.5a5. pje**20050706034704] [Added ``develop`` command to ``setuptools``-based packages. This command pje**20050706034616 installs an ``.egg-link`` pointing to the package's source directory, and script wrappers that ``execfile()`` the source versions of the package's scripts. This lets you put your development checkout(s) on sys.path without having to actually install them. (To uninstall the link, use use ``setup.py develop --uninstall``.) ] [Made ``easy_install`` a standard ``setuptools`` command, moving it from pje**20050706021048 the ``easy_install`` module to ``setuptools.command.easy_install``. Note that if you were importing or extending it, you must now change your imports accordingly. ``easy_install.py`` is still installed as a script, but not as a module. ] [Enhanced the ``test`` command so that it doesn't install the package, but pje**20050706015408 instead builds any C extensions in-place, updates the ``.egg-info`` metadata, adds the source directory to ``sys.path``, and runs the tests directly on the source. This avoids an "unmanaged" installation of the package to ``site-packages`` or elsewhere. (Also, fix a breaking test of older dependency support; this should probably be removed altogether, as long as nobody's using it.) ] [Added ``egg_info`` command to ``setuptools``-based packages. This command pje**20050706013741 just creates or updates the "projectname.egg-info" directory, without building an egg. It's used by the ``bdist_egg`` command now, and will be used by the ``test`` and ``develop`` commands later on. ] [Fix a problem using bdist_egg with non-setuptools distributions. pje**20050704184541] [Fix typo pje**20050704184502] [Add missing download links pje**20050704184426] [EasyInstall/setuptools 0.5a4: significant new features, including automatic pje**20050627003103 installation of dependencies, the ability to specify dependencies in a setup script, and several new options to control EasyInstall's behavior. ] [0.5a3 bugfix release pje**20050625193306] [Fix stupid typos. pje**20050615023910] [Add support for installing from .win32.exe's created by distutils (by pje**20050615022348 converting them to eggs). Bump version to 0.5a1. ] [Add bootstrap installation support that "hitches a ride" on other packages pje**20050615021942 being installed via the normal distutils "setup.py install". Also, don't repeatedly download the setuptools egg if it's already in the target location. ] [Fix incorrect sorting of packages by string version instead of parsed pje**20050615021603 version info. Don't set a default Python version for distribution objects. Add enum for binary distributions (like bdist_wininst). ] [Make write_stub() a function, so easy_install can use it too. pje**20050615021249] [Enhance unpack_* utilities to allow on-the-fly redirection of where files pje**20050615021109 are extracted to. ] [Bump version # for release. pje**20050614154844] [Add support for quiet/verbose/dry-run/optimize flags. pje**20050614153032] [Fix more zipped-egg directory resource bugs reported by Ryan Tomayko. pje**20050614152941] [Support downloading packages that were uploaded to PyPI (by scanning all pje**20050614124635 links on package pages, not just the homepage/download links). ] [Fix typos found by Ryan Tomayko. pje**20050614124443] [Oops, forgot to bump a version number. pje**20050614013119] [Update to version 0.4a3 pje**20050614012959] [Fix missing '__file__' when running scripts. pje**20050614012844] [Cosmetic improvements to progress messages. pje**20050614012712] [Add lots of progress messages, so people know what the package search is pje**20050614012626 doing. ] [Fix a bug in resource_isdir(), introduced in 0.4a2. Add str/repr of pje**20050614012548 Distribution objects. ] [Add 'ez_setup' bootstrap installer. Prep for 0.4a2 release. pje**20050612214734] [Add script installation support. Use distutils' exceptions for option pje**20050612192645 errors. Include Python version in setuptools' egg name for compatibility w/installs via easy_install. Add isdir/listdir facilities for metadata, along with support for running scripts from eggs. ] [Restructure easy_install as a distutils "Command" object, so that it can pje**20050612154954 access the distutils configuration and logging infrastructure, and can "inherit" options from a distutils setup script that wants to use it to install its own dependencies. ] [Move package index/downloading stuff to setuptools.package_index module. pje**20050612034407] [Rebalance responsibilities between PackageIndex, Installer, and main() so pje**20050612030753 that PackageIndex handles all downloading of any kind, Installers can be reused for multiple packages, and main() manages temporary directories and all communication between PackageIndex and Installer. Also, change run_setup to take an argument sequence, because later we will probably need other arguments to control other aspects of run_setup's behavior. ] [Split setup-running and archive-extraction utilities into separate modules, pje**20050612011234 for easy use by tools other than EasyInstall. ] [Package scripts under EGG-INFO/scripts. Refactor subcommand invocations pje**20050607044151 for less duplication and greater clarity. ] [Update distribution metadata so 'setup.py register' works; add 'extra_path' pje**20050606033048 so that setuptools can install itself in egg form. ] [Update docs for PyPI support, prep for 0.4a1 release pje**20050605215541] [Implement PyPI screenscraping for EasyInstall. Fix a bug in requirement pje**20050605213351 version checking. Document new options for screen scraping. ] [Add "safe_name" and "safe_version" functions to allow sanitizing of pje**20050605185937 distribution names and versions in arbitrary packages that might be built using EasyInstall. ] [Partial support for autolocation of packages via link harvesting. Still pje**20050605012430 needs a little work to get PyPI support working, and automatic dependency resolution. But for now you can do: easy_install -s http://example.com/download.html SomePackage And easy_install will find the best-looking download link on the page for instaling SomePackage. ] [Make ``AvailableDistributions`` keep track of the desired platform/python. pje**20050605012009 Add a ``can_add()`` method that indicates whether a distribution matches the collection's desired platform and Python version. Fix a bug in ``Distribution.from_filename()`` when the filename has no Python version. ] [Updated for v0.3a4 pje**20050605004811] [Add support for prioritized sorting of distributions by distribution type, pje**20050605004736 to assist easy_install in indexing packages from PyPI. ] [Fix a minor problem with -b option, and prep for 0.3a4 release. pje**20050604213513] [Add support for resource isdir/listdir operations. Support directory pje**20050604211819 extraction and "egg baskets" for .zips. Add import locking for namespace package manipulation routines. ] [Release 0.3a3 pje**20050531003454] [Ditch outdated TODO file, move docs to a new 'EasyInstall.txt' file. Fix pje**20050531002445 installation report for .egg files/directories. ] [Add option to allow specifying a download/extract/build directory, which pje**20050530235233 will be kept after installation completes. Added an "installation report" that tells you how to use 'require()' to activate a particular package version. Installer.install_eggs() now returns a list of Distribution objects for the eggs it found and installed, so that the command-line tool can print an installation report for each one. ] [Ensure that the distribution name written to PKG-INFO is the same as the pje**20050530232210 name you'll use in 'require()' operations for that distribution. ] [Add setup script "sandboxing" -- abort a setup script if it tries to write pje**20050530232034 to the filesystem outside of the installer's temporary directory. This is accomplished by temporarily replacing 'os.*' functions and the 'open' builtin with path-validation wrappers. ] [Reorganize bdist_egg's handling of 'install_data' to better deal with the pje**20050530064601 various kludges legacy packages are using to install data in their package directories. Some use absolute paths in 'distribution.data_files', while others create various subclasses of 'install_data', each with their own way of finding out what directory to use! So 'bdist_egg' now does all its 'install_lib' activity before 'install_data', and pokes the desired build directory into a wide variety of places, so that all of the known kludges so far will work correctly. It also checks for absolute paths in 'data_files' (carefully working around other packages' 'data_files' kludges!) and converts them back to relative ones, if they are subpaths of site-packages. Clearly, we need to get the word out about 'package_files' in Python 2.4 and above, and suggest using 'setuptools' for Python 2.3. ] [Add SourceForge download support, graciously contributed by Ian Bicking. pje**20050530033750 Also, move some more imports to the top. ] [Bump version to 0.3a2 for release pje**20050529221430] [Add subversion support, loosely based on an implementation by Ian Bicking. pje**20050529220846 EasyInstall now recognizes both 'svn' URLs (including 'svn+ssh' et al), and notices when it connects to an HTTP server that's actually a subversion repository. In either case it does a subversion checkout of the package. Also, fixed a bug on platforms with os.samefile(). ] [Added options to alter eggs' version number by tagging with the subversion pje**20050529220539 revision number, date, and/or a custom tag. This should make it easier for people to produce e.g. automated nightly builds of eggs. ] [Add support for using Installer subclasses, especially ones with support pje**20050529071343 for searching a package database. ] [Oddly enough, some setup.py files actually check __name__=='__main__' pje**20050529064114] [Correctly recognize .egg files that are already on sys.path (or whatever pje**20050529052059 path AvailableDistributions is scanning) ] [Handle distributions with ' ' in their names pje**20050529051959] [Add link to Python Eggs page in doc; fix a problem with non-standard source pje**20050529013601 distros (where setup.py is in the archive root). ] [Remove exemaker spew from easy_install.py pje**20050529001825] [Add "easy_install" script that downloads distutils source (or .egg files) pje**20050529001722 and builds and installs them as eggs, with support for managing .pth files. Built distributions are installed in individual subdirectories, so you can either add the directory to a .pth (automatically done by default), or you can use pkg_resources.require() to manage your dependencies explicitly. Because each distribution is in its own directory (or .egg file), uninstallation and clean upgrades are trivial, without the aid of any sort of package manager. ] [Add experimental 'install_data' support to 'bdist_egg'. The most common pje**20050528230559 distutils custom command hack in the field is to make 'install_data' put data in with the target packages by changing the --install-data to match --install-lib, so this should let bdist_egg work with more packages "out of the box". ] [Fix some typos and a missing import pje**20050525032232] [Implement draft support for namespace packages, both declaring them pje**20050525030653 initially and fixing them up when new eggs are added to sys.path. At the moment, all namespace packages are fixed up whenever any new egg is added to sys.path, but this might not scale well if there are lots of eggs and lots of namespace packages. Perhaps we should limit namespace fixups to namespace packages explicitly declared in the egg? ] [Support registering distribution finders for arbitrary PEP 302 importer pje**20050525005039 types, so that the directory scanner isn't a hardcoded case. ] [Implement a draft version of 'find_distributions()' with hardcoded support pje**20050524011524 for packed and unpacked .egg files and .egg-info dirs. This will need to be refactored later to support registering adapters for arbitrary PEP 302 importers, so that it can deal with non-filesystem sys.path entries. In the meantime, however, this means that 'require()' now works and that intrepid souls may now witness the power of this fully operational battle station... ] [Make AvailableDistributions check distributions for Python version pje**20050523021752 compatibility as well as platform compatibility. Rename get_distro_source to 'find_distributions', and get rid of intermediate distro-source objects. ] [Add a rough draft of Distribution.install_on(), to let others experiment pje**20050523020042 with 'require()' before the "official" version is complete. ] [Add tests for AvailableDistributions().resolve(). This effectively pje**20050523015627 completes the core dependency resolution engine; all we need now is a way to turn sys.path entries into "distribution sources" that can list Distribution objects for inclusion in an instance of AvailableDistributions, and the 'require("SomePkg>=2.7")' API will be usable. ] [Added support for specifying options on requirements, so that a package's pje**20050522202847 optional dependencies can be included when processing nested dependencies. Next up: tests for the resolve() algorithm. ] [Distribution metadata parsing: distribution objects can now extract their pje**20050522194022 version from PKG-INFO and their dependencies from depends.txt, including optional dependencies. ] [Refine dependency resolution algorithm so it won't take exponential time, pje**20050522181700 or bomb on cyclic dependencies. (But it's still an untested sketch.) Added list of things that need to be implemented before dependency resolution can actually work. Added tests for lower-level parts of the dependency resolution system, and a hook to support subclasses doing automatic download of needed dependencies. ] [Add basic "Requirement" class that can tell whether a distribution or pje**20050521214257 version meets its version requirements. ] [Added "AvailableDistributions" class that finds and indexes usable pje**20050403185221 distributions; this replaces the previous "iter_distributions()" API. Added basic platform support to Distribution and AvailableDistributions so that platform-independent distros as well as local platform-compatible distros are acceptable. The actual platform scheme is currently delegated to distutils.util.get_platform(), but needs to be replaced with a better scheme of some kind, especially for OS X. ] [Remove setuptools_boot.py, as it can now be trivially replaced by including pje**20050403172338 a setuptools .egg file in your source distribution, and adding it to sys.path in your setup.py. ] [Fix handling of -/_ so that they are canonicalized to '-' when doing name pje**20050403012108 or version comparisons, but rendered as '_' in egg filenames. ] [Add a "Distribution" object that wraps a sys.path entry with metadata, and pje**20050403004658 can extract its name/version/pythonversion/platform if built from a .egg filename. Later, distributions will be able to add themselves to sys.path and request that their dependencies be added as well. Also, added some real-life version test cases supplied by jemfinch. ] [Add a simple version parser that combines the pre-release smarts of pje**20050402233113 distutils' StrictVersion, with the flexibility of LooseVersion. It also deals heuristically with common concepts like alpha/beta/candidate/rc and pre/preview, as well as '-' and 'pl' branching schemes. ] [Rough draft of version requirement parser. Make bdist_egg look for a pje**20050402024321 distname.egg-info directory instead of EGG-INFO.in; this will be used later to support development of egg-distributed packages that an application under development expects to 'require()'. (Thanks to Fred Drake for pointing out this use case, and Bob Ippolito for helping me figure out how to support it, although the runtime support doesn't actually exist yet.) ] [Back out the addition of bogus 'if __name__=="__main__"' block; the One pje**20050401212849 Obvious Way to test setuptools is to run 'setup.py test', because that also provides an integration test for the 'test' command. ] [Specify and implement # comments in get_metadata_lines etrepum**20050324202919 A few more PEP 8 formatting fixes for pkg_resources ] [import StringIO at module level etrepum**20050324192654] [Reformat pkg_resources in PEP 8 style etrepum**20050324192153] [Add a working pkg_resources implementation that handles extraction and pje**20050323004252 basic support for non-egg resources. Still a lot to do, but this version is capable of not only extracting and running C extensions, it can even find its own runtime (pkg_resources) if it's included in the egg. ] [Fix bootstrap loader so extracted files don't have to be on sys.path. pje**20050322185559] [Create stub loaders for C extensions, so that the actual dynamic library pje**20050322001503 can be extracted from the egg. ] [Allow user-supplied metadata from EGG-INFO.in directory (directory name can pje**20050321204157 be overridden with a command-line option). ] [Add python version to egg filename. pje**20050321201233] [Add 'bdist_egg' command/format to allow creating "Python Eggs" (see pje**20050321195046 http://peak.telecommunity.com/DevCenter/PythonEggs for details). This version only supports pure libraries and does not support user-defined metadata. But it's sufficient to make .egg files that can be placed on PYTHONPATH and used. ] [remove blank line pollution fdrake**20040617203744] [fix to make things continue to work when we're *not* running under fdrake**20040615190003 Python 2.4; this was broken by my earlier change to avoid stomping on Python 2.4's build_py command ] [Deal with the distutils on the head; package_data may already be supported. fdrake**20040614141534 In this case, setuptools need not override the build_py command. ] [remove excess blank lines, and apply whitespace more in line with the Python fdrake**20040405202153 style guidelines in PEP 8 ] [- remove trailing blank lines fdrake**20040405200245 - use whitespace according to the Python style guide ] [remove trailing blank line fdrake**20040405195911] [Compute command line that should be passed to child setup scripts. pje**20040322011231 Warn user if unsupported options are supplied, and cancel unless 'depends -i' (aka '--ignore-extra-args') was used. ] [Flesh out 'depends' command to display dependencies' status, and halt if pje**20040320205212 all requirements aren't met. (Also, check planned install location for the dependencies, as well as checking sys.path.) Also: * Allow 'Feature()' objects to include 'Require()' objects, so that dependencies can be optional * 'Require()' objects can set a homepage, whose URL will be displayed by the 'depends' command if the dependency needs to be installed. * Misc. fixes/refactoring of version validation to properly handle "unknown" versions, and to decouple version fetching from version checking. * Updated TODO to remove various completed items. ] [Initial checkin of setuptools 0.0.1. pje**20040319205314] Patch bundle hash: 58c09c213c6e76902e7373cb0a8632c98d612d93