15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This file was obtained from: 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# http://peak.telecommunity.com/dist/ez_setup.py 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# on 2011/1/21. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Bootstrap setuptools installation 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)If you want to use setuptools in your package's setup.py, just include this 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)file in the same directory with it, and add this to the top of your setup.py:: 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from ez_setup import use_setuptools 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) use_setuptools() 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)If you want to require a specific version of setuptools, set a download 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mirror, or use an alternate download directory, you can do so by supplying 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)the appropriate options to ``use_setuptools()``. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This file can also be run as a script to install or upgrade setuptools. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DEFAULT_VERSION = "0.6c11" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)md5_data = { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090', 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4', 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7', 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5', 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de', 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b', 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2', 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086', 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys, os 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)try: from hashlib import md5 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)except ImportError: from md5 import md5 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _validate_md5(egg_name, data): 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if egg_name in md5_data: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) digest = md5(data).hexdigest() 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if digest != md5_data[egg_name]: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print >>sys.stderr, ( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "md5 validation of %s failed! (Possible download problem?)" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) % egg_name 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(2) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def use_setuptools( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_delay=15 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)): 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Automatically find/download setuptools and make it available on sys.path 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) `version` should be a valid setuptools version number that is available 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) as an egg for download under the `download_base` URL (which should end with 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) a '/'). `to_dir` is the directory where setuptools will be downloaded, if 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it is not already available. If `download_delay` is specified, it should 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) be the number of seconds that will be paused before initiating a download, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) should one be required. If an older version of setuptools is installed, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this routine will print a message to ``sys.stderr`` and raise SystemExit in 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) an attempt to abort the calling script. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def do_download(): 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) egg = download_setuptools(version, download_base, to_dir, download_delay) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.path.insert(0, egg) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import setuptools; setuptools.bootstrap_install_from = egg 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import pkg_resources 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except ImportError: 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return do_download() 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pkg_resources.require("setuptools>="+version); return 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except pkg_resources.VersionConflict, e: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if was_imported: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print >>sys.stderr, ( 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "The required version of setuptools (>=%s) is not available, and\n" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "can't be installed while this script is running. Please install\n" 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " a more recent version first, using 'easy_install -U setuptools'." 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\n\n(Currently using %r)" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) % (version, e.args[0]) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(2) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except pkg_resources.DistributionNotFound: 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pass 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) del pkg_resources, sys.modules['pkg_resources'] # reload ok 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return do_download() 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def download_setuptools( 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delay = 15 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)): 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Download setuptools from a specified location and return its filename 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) `version` should be a valid setuptools version number that is available 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) as an egg for download under the `download_base` URL (which should end 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) with a '/'). `to_dir` is the directory where the egg will be downloaded. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) `delay` is the number of seconds to pause before an actual download attempt. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import urllib2, shutil 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = download_base + egg_name 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) saveto = os.path.join(to_dir, egg_name) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src = dst = None 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not os.path.exists(saveto): # Avoid repeated downloads 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from distutils import log 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if delay: 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log.warn(""" 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)--------------------------------------------------------------------------- 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This script requires setuptools version %s to run (even to display 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)help). I will attempt to download it for you (from 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%s), but 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)you may need to enable firewall access for this script first. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)I will start the download in %d seconds. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(Note: if this machine does not have network access, please obtain the file 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) %s 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)and place it in this directory before rerunning this script.) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)---------------------------------------------------------------------------""", 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version, download_base, delay, url 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ); from time import sleep; sleep(delay) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log.warn("Downloading %s", url) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src = urllib2.urlopen(url) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Read/write all in one block, so we don't create a corrupt file 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # if the download is interrupted. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data = _validate_md5(egg_name, src.read()) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dst = open(saveto,"wb"); dst.write(data) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finally: 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if src: src.close() 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if dst: dst.close() 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os.path.realpath(saveto) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main(argv, version=DEFAULT_VERSION): 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Install or upgrade setuptools and EasyInstall""" 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import setuptools 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except ImportError: 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) egg = None 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) egg = download_setuptools(version, delay=0) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.path.insert(0,egg) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from setuptools.command.easy_install import main 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return main(list(argv)+[egg]) # we're done here 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finally: 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if egg and os.path.exists(egg): 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os.unlink(egg) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if setuptools.__version__ == '0.0.1': 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print >>sys.stderr, ( 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "You have an obsolete version of setuptools installed. Please\n" 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "remove it from your system entirely before rerunning this script." 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(2) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req = "setuptools>="+version 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import pkg_resources 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pkg_resources.require(req) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except pkg_resources.VersionConflict: 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from setuptools.command.easy_install import main 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except ImportError: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from easy_install import main 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main(list(argv)+[download_setuptools(delay=0)]) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(0) # try to force an exit 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if argv: 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) from setuptools.command.easy_install import main 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main(argv) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print "Setuptools version",version,"or greater has been installed." 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def update_md5(filenames): 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Update our built-in md5 registry""" 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import re 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for name in filenames: 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = os.path.basename(name) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = open(name,'rb') 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) md5_data[base] = md5(f.read()).hexdigest() 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f.close() 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data = [" %r: %r,\n" % it for it in md5_data.items()] 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.sort() 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repl = "".join(data) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import inspect 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) srcfile = inspect.getsourcefile(sys.modules[__name__]) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = open(srcfile, 'rb'); src = f.read(); f.close() 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match = re.search("\nmd5_data = {\n([^}]+)}", src) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not match: 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print >>sys.stderr, "Internal error!" 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(2) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src = src[:match.start(1)] + repl + src[match.end(1):] 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = open(srcfile,'w') 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f.write(src) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f.close() 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__=='__main__': 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if len(sys.argv)>2 and sys.argv[1]=='--md5update': 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_md5(sys.argv[2:]) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main(sys.argv[1:]) 284