1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#!python 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# This file was obtained from: 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# http://peak.telecommunity.com/dist/ez_setup.py 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# on 2009/4/17. 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Bootstrap setuptools installation 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleIf you want to use setuptools in your package's setup.py, just include this 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefile in the same directory with it, and add this to the top of your setup.py:: 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from ez_setup import use_setuptools 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville use_setuptools() 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleIf you want to require a specific version of setuptools, set a download 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillemirror, or use an alternate download directory, you can do so by supplying 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillethe appropriate options to ``use_setuptools()``. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleThis file can also be run as a script to install or upgrade setuptools. 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville""" 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport sys 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleDEFAULT_VERSION = "0.6c9" 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleDEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillemd5_data = { 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport sys, os 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletry: from hashlib import md5 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleexcept ImportError: from md5 import md5 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef _validate_md5(egg_name, data): 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if egg_name in md5_data: 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville digest = md5(data).hexdigest() 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if digest != md5_data[egg_name]: 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville print >>sys.stderr, ( 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "md5 validation of %s failed! (Possible download problem?)" 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville % egg_name 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ) 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.exit(2) 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return data 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef use_setuptools( 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville download_delay=15 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville): 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Automatically find/download setuptools and make it available on sys.path 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville `version` should be a valid setuptools version number that is available 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville as an egg for download under the `download_base` URL (which should end with 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville a '/'). `to_dir` is the directory where setuptools will be downloaded, if 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville it is not already available. If `download_delay` is specified, it should 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville be the number of seconds that will be paused before initiating a download, 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville should one be required. If an older version of setuptools is installed, 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville this routine will print a message to ``sys.stderr`` and raise SystemExit in 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville an attempt to abort the calling script. 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def do_download(): 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville egg = download_setuptools(version, download_base, to_dir, download_delay) 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.path.insert(0, egg) 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import setuptools; setuptools.bootstrap_install_from = egg 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import pkg_resources 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except ImportError: 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return do_download() 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville pkg_resources.require("setuptools>="+version); return 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except pkg_resources.VersionConflict, e: 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if was_imported: 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville print >>sys.stderr, ( 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "The required version of setuptools (>=%s) is not available, and\n" 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "can't be installed while this script is running. Please install\n" 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " a more recent version first, using 'easy_install -U setuptools'." 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "\n\n(Currently using %r)" 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ) % (version, e.args[0]) 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.exit(2) 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del pkg_resources, sys.modules['pkg_resources'] # reload ok 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return do_download() 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except pkg_resources.DistributionNotFound: 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return do_download() 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef download_setuptools( 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville delay = 15 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville): 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Download setuptools from a specified location and return its filename 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville `version` should be a valid setuptools version number that is available 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville as an egg for download under the `download_base` URL (which should end 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville with a '/'). `to_dir` is the directory where the egg will be downloaded. 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville `delay` is the number of seconds to pause before an actual download attempt. 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """ 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import urllib2, shutil 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville url = download_base + egg_name 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville saveto = os.path.join(to_dir, egg_name) 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville src = dst = None 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if not os.path.exists(saveto): # Avoid repeated downloads 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from distutils import log 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if delay: 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville log.warn(""" 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville--------------------------------------------------------------------------- 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleThis script requires setuptools version %s to run (even to display 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillehelp). I will attempt to download it for you (from 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville%s), but 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleyou may need to enable firewall access for this script first. 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleI will start the download in %d seconds. 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville(Note: if this machine does not have network access, please obtain the file 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville %s 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleand place it in this directory before rerunning this script.) 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville---------------------------------------------------------------------------""", 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville version, download_base, delay, url 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ); from time import sleep; sleep(delay) 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville log.warn("Downloading %s", url) 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville src = urllib2.urlopen(url) 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Read/write all in one block, so we don't create a corrupt file 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # if the download is interrupted. 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville data = _validate_md5(egg_name, src.read()) 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville dst = open(saveto,"wb"); dst.write(data) 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville finally: 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if src: src.close() 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if dst: dst.close() 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return os.path.realpath(saveto) 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef main(argv, version=DEFAULT_VERSION): 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Install or upgrade setuptools and EasyInstall""" 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import setuptools 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except ImportError: 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville egg = None 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville egg = download_setuptools(version, delay=0) 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.path.insert(0,egg) 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from setuptools.command.easy_install import main 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return main(list(argv)+[egg]) # we're done here 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville finally: 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if egg and os.path.exists(egg): 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville os.unlink(egg) 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if setuptools.__version__ == '0.0.1': 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville print >>sys.stderr, ( 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "You have an obsolete version of setuptools installed. Please\n" 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "remove it from your system entirely before rerunning this script." 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ) 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.exit(2) 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville req = "setuptools>="+version 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import pkg_resources 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville pkg_resources.require(req) 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except pkg_resources.VersionConflict: 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from setuptools.command.easy_install import main 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except ImportError: 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from easy_install import main 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville main(list(argv)+[download_setuptools(delay=0)]) 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.exit(0) # try to force an exit 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if argv: 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville from setuptools.command.easy_install import main 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville main(argv) 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville print "Setuptools version",version,"or greater has been installed." 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef update_md5(filenames): 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Update our built-in md5 registry""" 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import re 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for name in filenames: 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville base = os.path.basename(name) 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville f = open(name,'rb') 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville md5_data[base] = md5(f.read()).hexdigest() 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville f.close() 251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville data = [" %r: %r,\n" % it for it in md5_data.items()] 253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville data.sort() 254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville repl = "".join(data) 255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville import inspect 257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville srcfile = inspect.getsourcefile(sys.modules[__name__]) 258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville f = open(srcfile, 'rb'); src = f.read(); f.close() 259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville match = re.search("\nmd5_data = {\n([^}]+)}", src) 261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if not match: 262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville print >>sys.stderr, "Internal error!" 263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville sys.exit(2) 264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville src = src[:match.start(1)] + repl + src[match.end(1):] 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville f = open(srcfile,'w') 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville f.write(src) 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville f.close() 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__=='__main__': 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if len(sys.argv)>2 and sys.argv[1]=='--md5update': 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville update_md5(sys.argv[2:]) 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville main(sys.argv[1:]) 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 282