Changeset 64aa49e in sasview


Ignore:
Timestamp:
Apr 4, 2014 4:39:53 AM (11 years ago)
Author:
Mathieu Doucet <doucetm@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
97eed48
Parents:
73bc55f1
Message:

Update setuptools

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ez_setup.py

    ra1968c4 r64aa49e  
    1 #!python 
     1#!/usr/bin/env python 
    22"""Bootstrap setuptools installation 
    33 
    4 If you want to use setuptools in your package's setup.py, just include this 
    5 file in the same directory with it, and add this to the top of your setup.py:: 
     4To use setuptools in your package's setup.py, include this 
     5file in the same directory and add this to the top of your setup.py:: 
    66 
    77    from ez_setup import use_setuptools 
    88    use_setuptools() 
    99 
    10 If you want to require a specific version of setuptools, set a download 
    11 mirror, or use an alternate download directory, you can do so by supplying 
     10To require a specific version of setuptools, set a download 
     11mirror, or use an alternate download directory, simply supply 
    1212the appropriate options to ``use_setuptools()``. 
    1313 
    1414This file can also be run as a script to install or upgrade setuptools. 
    1515""" 
     16import os 
     17import shutil 
    1618import sys 
    17 DEFAULT_VERSION = "0.6c11" 
    18 DEFAULT_URL     = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] 
    19  
    20 md5_data = { 
    21     'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', 
    22     'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', 
    23     'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', 
    24     'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', 
    25     'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', 
    26     'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', 
    27     'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', 
    28     'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', 
    29     'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', 
    30     'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', 
    31     'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090', 
    32     'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4', 
    33     'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7', 
    34     'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5', 
    35     'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de', 
    36     'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b', 
    37     'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2', 
    38     'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086', 
    39     'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', 
    40     'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', 
    41     'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', 
    42     'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', 
    43     'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', 
    44     'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', 
    45     'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', 
    46     'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', 
    47     'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', 
    48     'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', 
    49     'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', 
    50     'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', 
    51     'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', 
    52     'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', 
    53     'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', 
    54     'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', 
    55     'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', 
    56     'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', 
    57     'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', 
    58     'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', 
    59     'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', 
    60     'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', 
    61     'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', 
    62     'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', 
    63 } 
    64  
    65 import sys, os 
    66 try: from hashlib import md5 
    67 except ImportError: from md5 import md5 
    68  
    69 def _validate_md5(egg_name, data): 
    70     if egg_name in md5_data: 
    71         digest = md5(data).hexdigest() 
    72         if digest != md5_data[egg_name]: 
    73             print >>sys.stderr, ( 
    74                 "md5 validation of %s failed!  (Possible download problem?)" 
    75                 % egg_name 
    76             ) 
    77             sys.exit(2) 
    78     return data 
    79  
    80 def use_setuptools( 
    81     version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 
    82     download_delay=15 
    83 ): 
    84     """Automatically find/download setuptools and make it available on sys.path 
    85  
    86     `version` should be a valid setuptools version number that is available 
    87     as an egg for download under the `download_base` URL (which should end with 
    88     a '/').  `to_dir` is the directory where setuptools will be downloaded, if 
    89     it is not already available.  If `download_delay` is specified, it should 
    90     be the number of seconds that will be paused before initiating a download, 
    91     should one be required.  If an older version of setuptools is installed, 
    92     this routine will print a message to ``sys.stderr`` and raise SystemExit in 
    93     an attempt to abort the calling script. 
    94     """ 
    95     was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules 
    96     def do_download(): 
    97         egg = download_setuptools(version, download_base, to_dir, download_delay) 
    98         sys.path.insert(0, egg) 
    99         import setuptools; setuptools.bootstrap_install_from = egg 
     19import tempfile 
     20import zipfile 
     21import optparse 
     22import subprocess 
     23import platform 
     24import textwrap 
     25import contextlib 
     26 
     27from distutils import log 
     28 
     29try: 
     30    from site import USER_SITE 
     31except ImportError: 
     32    USER_SITE = None 
     33 
     34DEFAULT_VERSION = "3.4.1" 
     35DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" 
     36 
     37def _python_cmd(*args): 
     38    """ 
     39    Return True if the command succeeded. 
     40    """ 
     41    args = (sys.executable,) + args 
     42    return subprocess.call(args) == 0 
     43 
     44 
     45def _install(archive_filename, install_args=()): 
     46    with archive_context(archive_filename): 
     47        # installing 
     48        log.warn('Installing Setuptools') 
     49        if not _python_cmd('setup.py', 'install', *install_args): 
     50            log.warn('Something went wrong during the installation.') 
     51            log.warn('See the error message above.') 
     52            # exitcode will be 2 
     53            return 2 
     54 
     55 
     56def _build_egg(egg, archive_filename, to_dir): 
     57    with archive_context(archive_filename): 
     58        # building an egg 
     59        log.warn('Building a Setuptools egg in %s', to_dir) 
     60        _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) 
     61    # returning the result 
     62    log.warn(egg) 
     63    if not os.path.exists(egg): 
     64        raise IOError('Could not build the egg.') 
     65 
     66 
     67def get_zip_class(): 
     68    """ 
     69    Supplement ZipFile class to support context manager for Python 2.6 
     70    """ 
     71    class ContextualZipFile(zipfile.ZipFile): 
     72        def __enter__(self): 
     73            return self 
     74        def __exit__(self, type, value, traceback): 
     75            self.close 
     76    return zipfile.ZipFile if hasattr(zipfile.ZipFile, '__exit__') else \ 
     77        ContextualZipFile 
     78 
     79 
     80@contextlib.contextmanager 
     81def archive_context(filename): 
     82    # extracting the archive 
     83    tmpdir = tempfile.mkdtemp() 
     84    log.warn('Extracting in %s', tmpdir) 
     85    old_wd = os.getcwd() 
     86    try: 
     87        os.chdir(tmpdir) 
     88        with get_zip_class()(filename) as archive: 
     89            archive.extractall() 
     90 
     91        # going in the directory 
     92        subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) 
     93        os.chdir(subdir) 
     94        log.warn('Now working in %s', subdir) 
     95        yield 
     96 
     97    finally: 
     98        os.chdir(old_wd) 
     99        shutil.rmtree(tmpdir) 
     100 
     101 
     102def _do_download(version, download_base, to_dir, download_delay): 
     103    egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' 
     104                       % (version, sys.version_info[0], sys.version_info[1])) 
     105    if not os.path.exists(egg): 
     106        archive = download_setuptools(version, download_base, 
     107                                      to_dir, download_delay) 
     108        _build_egg(egg, archive, to_dir) 
     109    sys.path.insert(0, egg) 
     110 
     111    # Remove previously-imported pkg_resources if present (see 
     112    # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). 
     113    if 'pkg_resources' in sys.modules: 
     114        del sys.modules['pkg_resources'] 
     115 
     116    import setuptools 
     117    setuptools.bootstrap_install_from = egg 
     118 
     119 
     120def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, 
     121        to_dir=os.curdir, download_delay=15): 
     122    to_dir = os.path.abspath(to_dir) 
     123    rep_modules = 'pkg_resources', 'setuptools' 
     124    imported = set(sys.modules).intersection(rep_modules) 
    100125    try: 
    101126        import pkg_resources 
    102127    except ImportError: 
    103         return do_download()        
    104     try: 
    105         pkg_resources.require("setuptools>="+version); return 
    106     except pkg_resources.VersionConflict, e: 
    107         if was_imported: 
    108             print >>sys.stderr, ( 
    109             "The required version of setuptools (>=%s) is not available, and\n" 
    110             "can't be installed while this script is running. Please install\n" 
    111             " a more recent version first, using 'easy_install -U setuptools'." 
    112             "\n\n(Currently using %r)" 
    113             ) % (version, e.args[0]) 
     128        return _do_download(version, download_base, to_dir, download_delay) 
     129    try: 
     130        pkg_resources.require("setuptools>=" + version) 
     131        return 
     132    except pkg_resources.DistributionNotFound: 
     133        return _do_download(version, download_base, to_dir, download_delay) 
     134    except pkg_resources.VersionConflict as VC_err: 
     135        if imported: 
     136            msg = textwrap.dedent(""" 
     137                The required version of setuptools (>={version}) is not available, 
     138                and can't be installed while this script is running. Please 
     139                install a more recent version first, using 
     140                'easy_install -U setuptools'. 
     141 
     142                (Currently using {VC_err.args[0]!r}) 
     143                """).format(VC_err=VC_err, version=version) 
     144            sys.stderr.write(msg) 
    114145            sys.exit(2) 
    115     except pkg_resources.DistributionNotFound: 
    116         pass 
    117  
    118     del pkg_resources, sys.modules['pkg_resources']    # reload ok 
    119     return do_download() 
    120  
    121 def download_setuptools( 
    122     version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, 
    123     delay = 15 
    124 ): 
    125     """Download setuptools from a specified location and return its filename 
     146 
     147        # otherwise, reload ok 
     148        del pkg_resources, sys.modules['pkg_resources'] 
     149        return _do_download(version, download_base, to_dir, download_delay) 
     150 
     151def _clean_check(cmd, target): 
     152    """ 
     153    Run the command to download target. If the command fails, clean up before 
     154    re-raising the error. 
     155    """ 
     156    try: 
     157        subprocess.check_call(cmd) 
     158    except subprocess.CalledProcessError: 
     159        if os.access(target, os.F_OK): 
     160            os.unlink(target) 
     161        raise 
     162 
     163def download_file_powershell(url, target): 
     164    """ 
     165    Download the file at url to target using Powershell (which will validate 
     166    trust). Raise an exception if the command cannot complete. 
     167    """ 
     168    target = os.path.abspath(target) 
     169    cmd = [ 
     170        'powershell', 
     171        '-Command', 
     172        "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" % vars(), 
     173    ] 
     174    _clean_check(cmd, target) 
     175 
     176def has_powershell(): 
     177    if platform.system() != 'Windows': 
     178        return False 
     179    cmd = ['powershell', '-Command', 'echo test'] 
     180    devnull = open(os.path.devnull, 'wb') 
     181    try: 
     182        try: 
     183            subprocess.check_call(cmd, stdout=devnull, stderr=devnull) 
     184        except Exception: 
     185            return False 
     186    finally: 
     187        devnull.close() 
     188    return True 
     189 
     190download_file_powershell.viable = has_powershell 
     191 
     192def download_file_curl(url, target): 
     193    cmd = ['curl', url, '--silent', '--output', target] 
     194    _clean_check(cmd, target) 
     195 
     196def has_curl(): 
     197    cmd = ['curl', '--version'] 
     198    devnull = open(os.path.devnull, 'wb') 
     199    try: 
     200        try: 
     201            subprocess.check_call(cmd, stdout=devnull, stderr=devnull) 
     202        except Exception: 
     203            return False 
     204    finally: 
     205        devnull.close() 
     206    return True 
     207 
     208download_file_curl.viable = has_curl 
     209 
     210def download_file_wget(url, target): 
     211    cmd = ['wget', url, '--quiet', '--output-document', target] 
     212    _clean_check(cmd, target) 
     213 
     214def has_wget(): 
     215    cmd = ['wget', '--version'] 
     216    devnull = open(os.path.devnull, 'wb') 
     217    try: 
     218        try: 
     219            subprocess.check_call(cmd, stdout=devnull, stderr=devnull) 
     220        except Exception: 
     221            return False 
     222    finally: 
     223        devnull.close() 
     224    return True 
     225 
     226download_file_wget.viable = has_wget 
     227 
     228def download_file_insecure(url, target): 
     229    """ 
     230    Use Python to download the file, even though it cannot authenticate the 
     231    connection. 
     232    """ 
     233    try: 
     234        from urllib.request import urlopen 
     235    except ImportError: 
     236        from urllib2 import urlopen 
     237    src = dst = None 
     238    try: 
     239        src = urlopen(url) 
     240        # Read/write all in one block, so we don't create a corrupt file 
     241        # if the download is interrupted. 
     242        data = src.read() 
     243        dst = open(target, "wb") 
     244        dst.write(data) 
     245    finally: 
     246        if src: 
     247            src.close() 
     248        if dst: 
     249            dst.close() 
     250 
     251download_file_insecure.viable = lambda: True 
     252 
     253def get_best_downloader(): 
     254    downloaders = [ 
     255        download_file_powershell, 
     256        download_file_curl, 
     257        download_file_wget, 
     258        download_file_insecure, 
     259    ] 
     260 
     261    for dl in downloaders: 
     262        if dl.viable(): 
     263            return dl 
     264 
     265def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, 
     266        to_dir=os.curdir, delay=15, downloader_factory=get_best_downloader): 
     267    """ 
     268    Download setuptools from a specified location and return its filename 
    126269 
    127270    `version` should be a valid setuptools version number that is available 
    128271    as an egg for download under the `download_base` URL (which should end 
    129272    with a '/'). `to_dir` is the directory where the egg will be downloaded. 
    130     `delay` is the number of seconds to pause before an actual download attempt. 
    131     """ 
    132     import urllib2, shutil 
    133     egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) 
    134     url = download_base + egg_name 
    135     saveto = os.path.join(to_dir, egg_name) 
    136     src = dst = None 
     273    `delay` is the number of seconds to pause before an actual download 
     274    attempt. 
     275 
     276    ``downloader_factory`` should be a function taking no arguments and 
     277    returning a function for downloading a URL to a target. 
     278    """ 
     279    # making sure we use the absolute path 
     280    to_dir = os.path.abspath(to_dir) 
     281    zip_name = "setuptools-%s.zip" % version 
     282    url = download_base + zip_name 
     283    saveto = os.path.join(to_dir, zip_name) 
    137284    if not os.path.exists(saveto):  # Avoid repeated downloads 
    138         try: 
    139             from distutils import log 
    140             if delay: 
    141                 log.warn(""" 
    142 --------------------------------------------------------------------------- 
    143 This script requires setuptools version %s to run (even to display 
    144 help).  I will attempt to download it for you (from 
    145 %s), but 
    146 you may need to enable firewall access for this script first. 
    147 I will start the download in %d seconds. 
    148  
    149 (Note: if this machine does not have network access, please obtain the file 
    150  
    151    %s 
    152  
    153 and place it in this directory before rerunning this script.) 
    154 ---------------------------------------------------------------------------""", 
    155                     version, download_base, delay, url 
    156                 ); from time import sleep; sleep(delay) 
    157             log.warn("Downloading %s", url) 
    158             src = urllib2.urlopen(url) 
    159             # Read/write all in one block, so we don't create a corrupt file 
    160             # if the download is interrupted. 
    161             data = _validate_md5(egg_name, src.read()) 
    162             dst = open(saveto,"wb"); dst.write(data) 
    163         finally: 
    164             if src: src.close() 
    165             if dst: dst.close() 
     285        log.warn("Downloading %s", url) 
     286        downloader = downloader_factory() 
     287        downloader(url, saveto) 
    166288    return os.path.realpath(saveto) 
    167289 
    168  
    169  
    170  
    171  
    172  
    173  
    174  
    175  
    176  
    177  
    178  
    179  
    180  
    181  
    182  
    183  
    184  
    185  
    186  
    187  
    188  
    189  
    190  
    191  
    192  
    193  
    194  
    195  
    196  
    197  
    198  
    199  
    200  
    201  
    202  
    203 def main(argv, version=DEFAULT_VERSION): 
     290def _build_install_args(options): 
     291    """ 
     292    Build the arguments to 'python setup.py install' on the setuptools package 
     293    """ 
     294    return ['--user'] if options.user_install else [] 
     295 
     296def _parse_args(): 
     297    """ 
     298    Parse the command line for options 
     299    """ 
     300    parser = optparse.OptionParser() 
     301    parser.add_option( 
     302        '--user', dest='user_install', action='store_true', default=False, 
     303        help='install in user site package (requires Python 2.6 or later)') 
     304    parser.add_option( 
     305        '--download-base', dest='download_base', metavar="URL", 
     306        default=DEFAULT_URL, 
     307        help='alternative URL from where to download the setuptools package') 
     308    parser.add_option( 
     309        '--insecure', dest='downloader_factory', action='store_const', 
     310        const=lambda: download_file_insecure, default=get_best_downloader, 
     311        help='Use internal, non-validating downloader' 
     312    ) 
     313    parser.add_option( 
     314        '--version', help="Specify which version to download", 
     315        default=DEFAULT_VERSION, 
     316    ) 
     317    options, args = parser.parse_args() 
     318    # positional arguments are ignored 
     319    return options 
     320 
     321def main(): 
    204322    """Install or upgrade setuptools and EasyInstall""" 
    205     try: 
    206         import setuptools 
    207     except ImportError: 
    208         egg = None 
    209         try: 
    210             egg = download_setuptools(version, delay=0) 
    211             sys.path.insert(0,egg) 
    212             from setuptools.command.easy_install import main 
    213             return main(list(argv)+[egg])   # we're done here 
    214         finally: 
    215             if egg and os.path.exists(egg): 
    216                 os.unlink(egg) 
    217     else: 
    218         if setuptools.__version__ == '0.0.1': 
    219             print >>sys.stderr, ( 
    220             "You have an obsolete version of setuptools installed.  Please\n" 
    221             "remove it from your system entirely before rerunning this script." 
    222             ) 
    223             sys.exit(2) 
    224  
    225     req = "setuptools>="+version 
    226     import pkg_resources 
    227     try: 
    228         pkg_resources.require(req) 
    229     except pkg_resources.VersionConflict: 
    230         try: 
    231             from setuptools.command.easy_install import main 
    232         except ImportError: 
    233             from easy_install import main 
    234         main(list(argv)+[download_setuptools(delay=0)]) 
    235         sys.exit(0) # try to force an exit 
    236     else: 
    237         if argv: 
    238             from setuptools.command.easy_install import main 
    239             main(argv) 
    240         else: 
    241             print "Setuptools version",version,"or greater has been installed." 
    242             print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' 
    243  
    244 def update_md5(filenames): 
    245     """Update our built-in md5 registry""" 
    246  
    247     import re 
    248  
    249     for name in filenames: 
    250         base = os.path.basename(name) 
    251         f = open(name,'rb') 
    252         md5_data[base] = md5(f.read()).hexdigest() 
    253         f.close() 
    254  
    255     data = ["    %r: %r,\n" % it for it in md5_data.items()] 
    256     data.sort() 
    257     repl = "".join(data) 
    258  
    259     import inspect 
    260     srcfile = inspect.getsourcefile(sys.modules[__name__]) 
    261     f = open(srcfile, 'rb'); src = f.read(); f.close() 
    262  
    263     match = re.search("\nmd5_data = {\n([^}]+)}", src) 
    264     if not match: 
    265         print >>sys.stderr, "Internal error!" 
    266         sys.exit(2) 
    267  
    268     src = src[:match.start(1)] + repl + src[match.end(1):] 
    269     f = open(srcfile,'w') 
    270     f.write(src) 
    271     f.close() 
    272  
    273  
    274 if __name__=='__main__': 
    275     if len(sys.argv)>2 and sys.argv[1]=='--md5update': 
    276         update_md5(sys.argv[2:]) 
    277     else: 
    278         main(sys.argv[1:]) 
    279  
    280  
    281  
    282  
    283  
    284  
     323    options = _parse_args() 
     324    archive = download_setuptools( 
     325        version=options.version, 
     326        download_base=options.download_base, 
     327        downloader_factory=options.downloader_factory, 
     328    ) 
     329    return _install(archive, _build_install_args(options)) 
     330 
     331if __name__ == '__main__': 
     332    sys.exit(main()) 
Note: See TracChangeset for help on using the changeset viewer.