1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!python 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver"""Bootstrap setuptools installation 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIf you want to use setuptools in your package's setup.py, just include this 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfile in the same directory with it, and add this to the top of your setup.py:: 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from ez_setup import use_setuptools 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver use_setuptools() 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIf you want to require a specific version of setuptools, set a download 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermirror, or use an alternate download directory, you can do so by supplying 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverthe appropriate options to ``use_setuptools()``. 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverThis file can also be run as a script to install or upgrade setuptools. 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver""" 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport sys 17324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDEFAULT_VERSION = "0.6c5" 18324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermd5_data = { 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport sys, os 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef _validate_md5(egg_name, data): 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if egg_name in md5_data: 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from md5 import md5 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver digest = md5(data).hexdigest() 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if digest != md5_data[egg_name]: 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print >>sys.stderr, ( 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "md5 validation of %s failed! (Possible download problem?)" 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver % egg_name 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.exit(2) 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return data 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef use_setuptools( 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver download_delay=15 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver): 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Automatically find/download setuptools and make it available on sys.path 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver `version` should be a valid setuptools version number that is available 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver as an egg for download under the `download_base` URL (which should end with 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver a '/'). `to_dir` is the directory where setuptools will be downloaded, if 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver it is not already available. If `download_delay` is specified, it should 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver be the number of seconds that will be paused before initiating a download, 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver should one be required. If an older version of setuptools is installed, 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver this routine will print a message to ``sys.stderr`` and raise SystemExit in 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver an attempt to abort the calling script. 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """ 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import setuptools 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if setuptools.__version__ == '0.0.1': 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print >>sys.stderr, ( 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "You have an obsolete version of setuptools installed. Please\n" 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "remove it from your system entirely before rerunning this script." 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.exit(2) 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ImportError: 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver egg = download_setuptools(version, download_base, to_dir, download_delay) 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.path.insert(0, egg) 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import setuptools; setuptools.bootstrap_install_from = egg 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import pkg_resources 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pkg_resources.require("setuptools>="+version) 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except pkg_resources.VersionConflict, e: 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # XXX could we install in a subprocess here? 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print >>sys.stderr, ( 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "The required version of setuptools (>=%s) is not available, and\n" 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "can't be installed while this script is running. Please install\n" 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver " a more recent version first.\n\n(Currently using %r)" 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) % (version, e.args[0]) 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.exit(2) 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef download_setuptools( 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver delay = 15 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver): 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Download setuptools from a specified location and return its filename 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver `version` should be a valid setuptools version number that is available 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver as an egg for download under the `download_base` URL (which should end 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver with a '/'). `to_dir` is the directory where the egg will be downloaded. 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver `delay` is the number of seconds to pause before an actual download attempt. 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """ 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import urllib2, shutil 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver url = download_base + egg_name 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver saveto = os.path.join(to_dir, egg_name) 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver src = dst = None 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if not os.path.exists(saveto): # Avoid repeated downloads 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from distutils import log 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if delay: 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver log.warn(""" 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver--------------------------------------------------------------------------- 122324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverThis script requires setuptools version %s to run (even to display 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhelp). I will attempt to download it for you (from 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver%s), but 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveryou may need to enable firewall access for this script first. 126324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverI will start the download in %d seconds. 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(Note: if this machine does not have network access, please obtain the file 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver %s 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverand place it in this directory before rerunning this script.) 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver---------------------------------------------------------------------------""", 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver version, download_base, delay, url 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ); from time import sleep; sleep(delay) 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver log.warn("Downloading %s", url) 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver src = urllib2.urlopen(url) 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Read/write all in one block, so we don't create a corrupt file 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # if the download is interrupted. 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data = _validate_md5(egg_name, src.read()) 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver dst = open(saveto,"wb"); dst.write(data) 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver finally: 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if src: src.close() 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if dst: dst.close() 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return os.path.realpath(saveto) 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef main(argv, version=DEFAULT_VERSION): 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Install or upgrade setuptools and EasyInstall""" 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import setuptools 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ImportError: 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver egg = None 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver egg = download_setuptools(version, delay=0) 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.path.insert(0,egg) 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from setuptools.command.easy_install import main 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return main(list(argv)+[egg]) # we're done here 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver finally: 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if egg and os.path.exists(egg): 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver os.unlink(egg) 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else: 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if setuptools.__version__ == '0.0.1': 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # tell the user to uninstall obsolete version 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver use_setuptools(version) 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver req = "setuptools>="+version 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import pkg_resources 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pkg_resources.require(req) 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except pkg_resources.VersionConflict: 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from setuptools.command.easy_install import main 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except ImportError: 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from easy_install import main 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver main(list(argv)+[download_setuptools(delay=0)]) 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.exit(0) # try to force an exit 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else: 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if argv: 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from setuptools.command.easy_install import main 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver main(argv) 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else: 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print "Setuptools version",version,"or greater has been installed." 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef update_md5(filenames): 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver """Update our built-in md5 registry""" 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import re 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver from md5 import md5 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for name in filenames: 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver base = os.path.basename(name) 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver f = open(name,'rb') 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver md5_data[base] = md5(f.read()).hexdigest() 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver f.close() 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data = [" %r: %r,\n" % it for it in md5_data.items()] 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver data.sort() 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver repl = "".join(data) 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver import inspect 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver srcfile = inspect.getsourcefile(sys.modules[__name__]) 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver f = open(srcfile, 'rb'); src = f.read(); f.close() 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver match = re.search("\nmd5_data = {\n([^}]+)}", src) 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if not match: 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver print >>sys.stderr, "Internal error!" 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sys.exit(2) 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver src = src[:match.start(1)] + repl + src[match.end(1):] 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver f = open(srcfile,'w') 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver f.write(src) 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver f.close() 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__=='__main__': 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if len(sys.argv)>2 and sys.argv[1]=='--md5update': 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver update_md5(sys.argv[2:]) 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else: 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver main(sys.argv[1:]) 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 229