<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_-_ez_setup.py</id>
	<title>Python - ez setup.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_-_ez_setup.py"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;action=history"/>
	<updated>2026-05-18T10:25:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;diff=4429&amp;oldid=prev</id>
		<title>PeterHarding at 03:32, 15 April 2015</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;diff=4429&amp;oldid=prev"/>
		<updated>2015-04-15T03:32:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;amp;diff=4429&amp;amp;oldid=4123&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;diff=4123&amp;oldid=prev</id>
		<title>PeterHarding: PeterHarding moved page Ez setup.py to Python - ez setup.py: Refactoring...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;diff=4123&amp;oldid=prev"/>
		<updated>2014-01-12T03:50:26Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding moved page &lt;a href=&quot;/kb/index.php/Ez_setup.py&quot; class=&quot;mw-redirect&quot; title=&quot;Ez setup.py&quot;&gt;Ez setup.py&lt;/a&gt; to &lt;a href=&quot;/kb/index.php/Python_-_ez_setup.py&quot; title=&quot;Python - ez setup.py&quot;&gt;Python - ez setup.py&lt;/a&gt;: Refactoring...&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:50, 12 January 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;diff=4122&amp;oldid=prev</id>
		<title>PeterHarding: Created page with &quot;=ez_setup.py=  &lt;pre&gt; #!/usr/bin/env python &quot;&quot;&quot;Bootstrap setuptools installation  To use setuptools in your package&#039;s setup.py, include this file in the same directory and add ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_ez_setup.py&amp;diff=4122&amp;oldid=prev"/>
		<updated>2014-01-12T03:49:59Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;=ez_setup.py=  &amp;lt;pre&amp;gt; #!/usr/bin/env python &amp;quot;&amp;quot;&amp;quot;Bootstrap setuptools installation  To use setuptools in your package&amp;#039;s setup.py, include this file in the same directory and add ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=ez_setup.py=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;Bootstrap setuptools installation&lt;br /&gt;
&lt;br /&gt;
To use setuptools in your package&amp;#039;s setup.py, include this&lt;br /&gt;
file in the same directory and add this to the top of your setup.py::&lt;br /&gt;
&lt;br /&gt;
    from ez_setup import use_setuptools&lt;br /&gt;
    use_setuptools()&lt;br /&gt;
&lt;br /&gt;
To require a specific version of setuptools, set a download&lt;br /&gt;
mirror, or use an alternate download directory, simply supply&lt;br /&gt;
the appropriate options to ``use_setuptools()``.&lt;br /&gt;
&lt;br /&gt;
This file can also be run as a script to install or upgrade setuptools.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import os&lt;br /&gt;
import shutil&lt;br /&gt;
import sys&lt;br /&gt;
import tempfile&lt;br /&gt;
import tarfile&lt;br /&gt;
import optparse&lt;br /&gt;
import subprocess&lt;br /&gt;
import platform&lt;br /&gt;
import textwrap&lt;br /&gt;
&lt;br /&gt;
from distutils import log&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    from site import USER_SITE&lt;br /&gt;
except ImportError:&lt;br /&gt;
    USER_SITE = None&lt;br /&gt;
&lt;br /&gt;
DEFAULT_VERSION = &amp;quot;2.1&amp;quot;&lt;br /&gt;
DEFAULT_URL = &amp;quot;https://pypi.python.org/packages/source/s/setuptools/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def _python_cmd(*args):&lt;br /&gt;
    args = (sys.executable,) + args&lt;br /&gt;
    return subprocess.call(args) == 0&lt;br /&gt;
&lt;br /&gt;
def _install(tarball, install_args=()):&lt;br /&gt;
    # extracting the tarball&lt;br /&gt;
    tmpdir = tempfile.mkdtemp()&lt;br /&gt;
    log.warn(&amp;#039;Extracting in %s&amp;#039;, tmpdir)&lt;br /&gt;
    old_wd = os.getcwd()&lt;br /&gt;
    try:&lt;br /&gt;
        os.chdir(tmpdir)&lt;br /&gt;
        tar = tarfile.open(tarball)&lt;br /&gt;
        _extractall(tar)&lt;br /&gt;
        tar.close()&lt;br /&gt;
&lt;br /&gt;
        # going in the directory&lt;br /&gt;
        subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])&lt;br /&gt;
        os.chdir(subdir)&lt;br /&gt;
        log.warn(&amp;#039;Now working in %s&amp;#039;, subdir)&lt;br /&gt;
&lt;br /&gt;
        # installing&lt;br /&gt;
        log.warn(&amp;#039;Installing Setuptools&amp;#039;)&lt;br /&gt;
        if not _python_cmd(&amp;#039;setup.py&amp;#039;, &amp;#039;install&amp;#039;, *install_args):&lt;br /&gt;
            log.warn(&amp;#039;Something went wrong during the installation.&amp;#039;)&lt;br /&gt;
            log.warn(&amp;#039;See the error message above.&amp;#039;)&lt;br /&gt;
            # exitcode will be 2&lt;br /&gt;
            return 2&lt;br /&gt;
    finally:&lt;br /&gt;
        os.chdir(old_wd)&lt;br /&gt;
        shutil.rmtree(tmpdir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _build_egg(egg, tarball, to_dir):&lt;br /&gt;
    # extracting the tarball&lt;br /&gt;
    tmpdir = tempfile.mkdtemp()&lt;br /&gt;
    log.warn(&amp;#039;Extracting in %s&amp;#039;, tmpdir)&lt;br /&gt;
    old_wd = os.getcwd()&lt;br /&gt;
    try:&lt;br /&gt;
        os.chdir(tmpdir)&lt;br /&gt;
        tar = tarfile.open(tarball)&lt;br /&gt;
        _extractall(tar)&lt;br /&gt;
        tar.close()&lt;br /&gt;
&lt;br /&gt;
        # going in the directory&lt;br /&gt;
        subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])&lt;br /&gt;
        os.chdir(subdir)&lt;br /&gt;
        log.warn(&amp;#039;Now working in %s&amp;#039;, subdir)&lt;br /&gt;
&lt;br /&gt;
        # building an egg&lt;br /&gt;
        log.warn(&amp;#039;Building a Setuptools egg in %s&amp;#039;, to_dir)&lt;br /&gt;
        _python_cmd(&amp;#039;setup.py&amp;#039;, &amp;#039;-q&amp;#039;, &amp;#039;bdist_egg&amp;#039;, &amp;#039;--dist-dir&amp;#039;, to_dir)&lt;br /&gt;
&lt;br /&gt;
    finally:&lt;br /&gt;
        os.chdir(old_wd)&lt;br /&gt;
        shutil.rmtree(tmpdir)&lt;br /&gt;
    # returning the result&lt;br /&gt;
    log.warn(egg)&lt;br /&gt;
    if not os.path.exists(egg):&lt;br /&gt;
        raise IOError(&amp;#039;Could not build the egg.&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _do_download(version, download_base, to_dir, download_delay):&lt;br /&gt;
    egg = os.path.join(to_dir, &amp;#039;setuptools-%s-py%d.%d.egg&amp;#039;&lt;br /&gt;
                       % (version, sys.version_info[0], sys.version_info[1]))&lt;br /&gt;
    if not os.path.exists(egg):&lt;br /&gt;
        tarball = download_setuptools(version, download_base,&lt;br /&gt;
                                      to_dir, download_delay)&lt;br /&gt;
        _build_egg(egg, tarball, to_dir)&lt;br /&gt;
    sys.path.insert(0, egg)&lt;br /&gt;
&lt;br /&gt;
    # Remove previously-imported pkg_resources if present (see&lt;br /&gt;
    # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details).&lt;br /&gt;
    if &amp;#039;pkg_resources&amp;#039; in sys.modules:&lt;br /&gt;
        del sys.modules[&amp;#039;pkg_resources&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
    import setuptools&lt;br /&gt;
    setuptools.bootstrap_install_from = egg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,&lt;br /&gt;
                   to_dir=os.curdir, download_delay=15):&lt;br /&gt;
    to_dir = os.path.abspath(to_dir)&lt;br /&gt;
    rep_modules = &amp;#039;pkg_resources&amp;#039;, &amp;#039;setuptools&amp;#039;&lt;br /&gt;
    imported = set(sys.modules).intersection(rep_modules)&lt;br /&gt;
    try:&lt;br /&gt;
        import pkg_resources&lt;br /&gt;
    except ImportError:&lt;br /&gt;
        return _do_download(version, download_base, to_dir, download_delay)&lt;br /&gt;
    try:&lt;br /&gt;
        pkg_resources.require(&amp;quot;setuptools&amp;gt;=&amp;quot; + version)&lt;br /&gt;
        return&lt;br /&gt;
    except pkg_resources.DistributionNotFound:&lt;br /&gt;
        return _do_download(version, download_base, to_dir, download_delay)&lt;br /&gt;
    except pkg_resources.VersionConflict as VC_err:&lt;br /&gt;
        if imported:&lt;br /&gt;
            msg = textwrap.dedent(&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
                The required version of setuptools (&amp;gt;={version}) is not available,&lt;br /&gt;
                and can&amp;#039;t be installed while this script is running. Please&lt;br /&gt;
                install a more recent version first, using&lt;br /&gt;
                &amp;#039;easy_install -U setuptools&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
                (Currently using {VC_err.args[0]!r})&lt;br /&gt;
                &amp;quot;&amp;quot;&amp;quot;).format(VC_err=VC_err, version=version)&lt;br /&gt;
            sys.stderr.write(msg)&lt;br /&gt;
            sys.exit(2)&lt;br /&gt;
&lt;br /&gt;
        # otherwise, reload ok&lt;br /&gt;
        del pkg_resources, sys.modules[&amp;#039;pkg_resources&amp;#039;]&lt;br /&gt;
        return _do_download(version, download_base, to_dir, download_delay)&lt;br /&gt;
&lt;br /&gt;
def _clean_check(cmd, target):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Run the command to download target. If the command fails, clean up before&lt;br /&gt;
    re-raising the error.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    try:&lt;br /&gt;
        subprocess.check_call(cmd)&lt;br /&gt;
    except subprocess.CalledProcessError:&lt;br /&gt;
        if os.access(target, os.F_OK):&lt;br /&gt;
            os.unlink(target)&lt;br /&gt;
        raise&lt;br /&gt;
&lt;br /&gt;
def download_file_powershell(url, target):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Download the file at url to target using Powershell (which will validate&lt;br /&gt;
    trust). Raise an exception if the command cannot complete.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    target = os.path.abspath(target)&lt;br /&gt;
    cmd = [&lt;br /&gt;
        &amp;#039;powershell&amp;#039;,&lt;br /&gt;
        &amp;#039;-Command&amp;#039;,&lt;br /&gt;
        &amp;quot;(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)&amp;quot; % vars(),&lt;br /&gt;
    ]&lt;br /&gt;
    _clean_check(cmd, target)&lt;br /&gt;
&lt;br /&gt;
def has_powershell():&lt;br /&gt;
    if platform.system() != &amp;#039;Windows&amp;#039;:&lt;br /&gt;
        return False&lt;br /&gt;
    cmd = [&amp;#039;powershell&amp;#039;, &amp;#039;-Command&amp;#039;, &amp;#039;echo test&amp;#039;]&lt;br /&gt;
    devnull = open(os.path.devnull, &amp;#039;wb&amp;#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        try:&lt;br /&gt;
            subprocess.check_call(cmd, stdout=devnull, stderr=devnull)&lt;br /&gt;
        except:&lt;br /&gt;
            return False&lt;br /&gt;
    finally:&lt;br /&gt;
        devnull.close()&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
download_file_powershell.viable = has_powershell&lt;br /&gt;
&lt;br /&gt;
def download_file_curl(url, target):&lt;br /&gt;
    cmd = [&amp;#039;curl&amp;#039;, url, &amp;#039;--silent&amp;#039;, &amp;#039;--output&amp;#039;, target]&lt;br /&gt;
    _clean_check(cmd, target)&lt;br /&gt;
&lt;br /&gt;
def has_curl():&lt;br /&gt;
    cmd = [&amp;#039;curl&amp;#039;, &amp;#039;--version&amp;#039;]&lt;br /&gt;
    devnull = open(os.path.devnull, &amp;#039;wb&amp;#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        try:&lt;br /&gt;
            subprocess.check_call(cmd, stdout=devnull, stderr=devnull)&lt;br /&gt;
        except:&lt;br /&gt;
            return False&lt;br /&gt;
    finally:&lt;br /&gt;
        devnull.close()&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
download_file_curl.viable = has_curl&lt;br /&gt;
&lt;br /&gt;
def download_file_wget(url, target):&lt;br /&gt;
    cmd = [&amp;#039;wget&amp;#039;, url, &amp;#039;--quiet&amp;#039;, &amp;#039;--output-document&amp;#039;, target]&lt;br /&gt;
    _clean_check(cmd, target)&lt;br /&gt;
&lt;br /&gt;
def has_wget():&lt;br /&gt;
    cmd = [&amp;#039;wget&amp;#039;, &amp;#039;--version&amp;#039;]&lt;br /&gt;
    devnull = open(os.path.devnull, &amp;#039;wb&amp;#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        try:&lt;br /&gt;
            subprocess.check_call(cmd, stdout=devnull, stderr=devnull)&lt;br /&gt;
        except:&lt;br /&gt;
            return False&lt;br /&gt;
    finally:&lt;br /&gt;
        devnull.close()&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
download_file_wget.viable = has_wget&lt;br /&gt;
&lt;br /&gt;
def download_file_insecure(url, target):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Use Python to download the file, even though it cannot authenticate the&lt;br /&gt;
    connection.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    try:&lt;br /&gt;
        from urllib.request import urlopen&lt;br /&gt;
    except ImportError:&lt;br /&gt;
        from urllib2 import urlopen&lt;br /&gt;
    src = dst = None&lt;br /&gt;
    try:&lt;br /&gt;
        src = urlopen(url)&lt;br /&gt;
        # Read/write all in one block, so we don&amp;#039;t create a corrupt file&lt;br /&gt;
        # if the download is interrupted.&lt;br /&gt;
        data = src.read()&lt;br /&gt;
        dst = open(target, &amp;quot;wb&amp;quot;)&lt;br /&gt;
        dst.write(data)&lt;br /&gt;
    finally:&lt;br /&gt;
        if src:&lt;br /&gt;
            src.close()&lt;br /&gt;
        if dst:&lt;br /&gt;
            dst.close()&lt;br /&gt;
&lt;br /&gt;
download_file_insecure.viable = lambda: True&lt;br /&gt;
&lt;br /&gt;
def get_best_downloader():&lt;br /&gt;
    downloaders = [&lt;br /&gt;
        download_file_powershell,&lt;br /&gt;
        download_file_curl,&lt;br /&gt;
        download_file_wget,&lt;br /&gt;
        download_file_insecure,&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
    for dl in downloaders:&lt;br /&gt;
        if dl.viable():&lt;br /&gt;
            return dl&lt;br /&gt;
&lt;br /&gt;
def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,&lt;br /&gt;
                        to_dir=os.curdir, delay=15,&lt;br /&gt;
                        downloader_factory=get_best_downloader):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Download setuptools from a specified location and return its filename&lt;br /&gt;
&lt;br /&gt;
    `version` should be a valid setuptools version number that is available&lt;br /&gt;
    as an egg for download under the `download_base` URL (which should end&lt;br /&gt;
    with a &amp;#039;/&amp;#039;). `to_dir` is the directory where the egg will be downloaded.&lt;br /&gt;
    `delay` is the number of seconds to pause before an actual download&lt;br /&gt;
    attempt.&lt;br /&gt;
&lt;br /&gt;
    ``downloader_factory`` should be a function taking no arguments and&lt;br /&gt;
    returning a function for downloading a URL to a target.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # making sure we use the absolute path&lt;br /&gt;
    to_dir = os.path.abspath(to_dir)&lt;br /&gt;
    tgz_name = &amp;quot;setuptools-%s.tar.gz&amp;quot; % version&lt;br /&gt;
    url = download_base + tgz_name&lt;br /&gt;
    saveto = os.path.join(to_dir, tgz_name)&lt;br /&gt;
    if not os.path.exists(saveto):  # Avoid repeated downloads&lt;br /&gt;
        log.warn(&amp;quot;Downloading %s&amp;quot;, url)&lt;br /&gt;
        downloader = downloader_factory()&lt;br /&gt;
        downloader(url, saveto)&lt;br /&gt;
    return os.path.realpath(saveto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _extractall(self, path=&amp;quot;.&amp;quot;, members=None):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Extract all members from the archive to the current working&lt;br /&gt;
       directory and set owner, modification time and permissions on&lt;br /&gt;
       directories afterwards. `path&amp;#039; specifies a different directory&lt;br /&gt;
       to extract to. `members&amp;#039; is optional and must be a subset of the&lt;br /&gt;
       list returned by getmembers().&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    import copy&lt;br /&gt;
    import operator&lt;br /&gt;
    from tarfile import ExtractError&lt;br /&gt;
    directories = []&lt;br /&gt;
&lt;br /&gt;
    if members is None:&lt;br /&gt;
        members = self&lt;br /&gt;
&lt;br /&gt;
    for tarinfo in members:&lt;br /&gt;
        if tarinfo.isdir():&lt;br /&gt;
            # Extract directories with a safe mode.&lt;br /&gt;
            directories.append(tarinfo)&lt;br /&gt;
            tarinfo = copy.copy(tarinfo)&lt;br /&gt;
            tarinfo.mode = 448  # decimal for oct 0700&lt;br /&gt;
        self.extract(tarinfo, path)&lt;br /&gt;
&lt;br /&gt;
    # Reverse sort directories.&lt;br /&gt;
    directories.sort(key=operator.attrgetter(&amp;#039;name&amp;#039;), reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Set correct owner, mtime and filemode on directories.&lt;br /&gt;
    for tarinfo in directories:&lt;br /&gt;
        dirpath = os.path.join(path, tarinfo.name)&lt;br /&gt;
        try:&lt;br /&gt;
            self.chown(tarinfo, dirpath)&lt;br /&gt;
            self.utime(tarinfo, dirpath)&lt;br /&gt;
            self.chmod(tarinfo, dirpath)&lt;br /&gt;
        except ExtractError as e:&lt;br /&gt;
            if self.errorlevel &amp;gt; 1:&lt;br /&gt;
                raise&lt;br /&gt;
            else:&lt;br /&gt;
                self._dbg(1, &amp;quot;tarfile: %s&amp;quot; % e)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _build_install_args(options):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Build the arguments to &amp;#039;python setup.py install&amp;#039; on the setuptools package&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return [&amp;#039;--user&amp;#039;] if options.user_install else []&lt;br /&gt;
&lt;br /&gt;
def _parse_args():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Parse the command line for options&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    parser = optparse.OptionParser()&lt;br /&gt;
    parser.add_option(&lt;br /&gt;
        &amp;#039;--user&amp;#039;, dest=&amp;#039;user_install&amp;#039;, action=&amp;#039;store_true&amp;#039;, default=False,&lt;br /&gt;
        help=&amp;#039;install in user site package (requires Python 2.6 or later)&amp;#039;)&lt;br /&gt;
    parser.add_option(&lt;br /&gt;
        &amp;#039;--download-base&amp;#039;, dest=&amp;#039;download_base&amp;#039;, metavar=&amp;quot;URL&amp;quot;,&lt;br /&gt;
        default=DEFAULT_URL,&lt;br /&gt;
        help=&amp;#039;alternative URL from where to download the setuptools package&amp;#039;)&lt;br /&gt;
    parser.add_option(&lt;br /&gt;
        &amp;#039;--insecure&amp;#039;, dest=&amp;#039;downloader_factory&amp;#039;, action=&amp;#039;store_const&amp;#039;,&lt;br /&gt;
        const=lambda: download_file_insecure, default=get_best_downloader,&lt;br /&gt;
        help=&amp;#039;Use internal, non-validating downloader&amp;#039;&lt;br /&gt;
    )&lt;br /&gt;
    options, args = parser.parse_args()&lt;br /&gt;
    # positional arguments are ignored&lt;br /&gt;
    return options&lt;br /&gt;
&lt;br /&gt;
def main(version=DEFAULT_VERSION):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Install or upgrade setuptools and EasyInstall&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    options = _parse_args()&lt;br /&gt;
    tarball = download_setuptools(download_base=options.download_base,&lt;br /&gt;
        downloader_factory=options.downloader_factory)&lt;br /&gt;
    return _install(tarball, _build_install_args(options))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    sys.exit(main())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>