annotate ez_setup.py @ 1198:16ce9a6580a3

misc (install): Lower default setuptools version From 0d607b6ed49eab758fd9b272e148f032e65fb2e2 Mon Sep 17 00:00:00 2001 python-setuptools 5.7 is not yet in Debian, so we need to set the default version to 5.5 (the current version in sid) to avoid the newer version to be downloaded from pypi.
author Matteo Cypriani <mcy@lm7.fr>
date Tue, 09 Sep 2014 22:09:51 -0400
parents a1d47760df3f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
1 #!/usr/bin/env python
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
2 """Bootstrap setuptools installation
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
3
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
4 To use setuptools in your package's setup.py, include this
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
5 file in the same directory and add this to the top of your setup.py::
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
6
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
7 from ez_setup import use_setuptools
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
8 use_setuptools()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
9
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
10 To require a specific version of setuptools, set a download
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
11 mirror, or use an alternate download directory, simply supply
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
12 the appropriate options to ``use_setuptools()``.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
13
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
14 This file can also be run as a script to install or upgrade setuptools.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
15 """
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
16 import os
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
17 import shutil
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
18 import sys
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
19 import tempfile
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
20 import zipfile
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
21 import optparse
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
22 import subprocess
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
23 import platform
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
24 import textwrap
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
25 import contextlib
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
26
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from distutils import log
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
28
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
29 try:
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
30 from urllib.request import urlopen
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
31 except ImportError:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
32 from urllib2 import urlopen
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
33
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
34 try:
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from site import USER_SITE
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
36 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
37 USER_SITE = None
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
38
1198
16ce9a6580a3 misc (install): Lower default setuptools version
Matteo Cypriani <mcy@lm7.fr>
parents: 1155
diff changeset
39 DEFAULT_VERSION = "5.5"
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
40 DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/"
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
41
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
42 def _python_cmd(*args):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
43 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
44 Return True if the command succeeded.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
45 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
46 args = (sys.executable,) + args
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
47 return subprocess.call(args) == 0
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
48
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
49
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
50 def _install(archive_filename, install_args=()):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
51 with archive_context(archive_filename):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
52 # installing
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
53 log.warn('Installing Setuptools')
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
54 if not _python_cmd('setup.py', 'install', *install_args):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
55 log.warn('Something went wrong during the installation.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
56 log.warn('See the error message above.')
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
57 # exitcode will be 2
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
58 return 2
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
59
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
60
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
61 def _build_egg(egg, archive_filename, to_dir):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
62 with archive_context(archive_filename):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
63 # building an egg
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
64 log.warn('Building a Setuptools egg in %s', to_dir)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
65 _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
66 # returning the result
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
67 log.warn(egg)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
68 if not os.path.exists(egg):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
69 raise IOError('Could not build the egg.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
70
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
71
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
72 class ContextualZipFile(zipfile.ZipFile):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
73 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
74 Supplement ZipFile class to support context manager for Python 2.6
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
75 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
76
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
77 def __enter__(self):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
78 return self
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
79
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
80 def __exit__(self, type, value, traceback):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
81 self.close()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
82
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
83 def __new__(cls, *args, **kwargs):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
84 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
85 Construct a ZipFile or ContextualZipFile as appropriate
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
86 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
87 if hasattr(zipfile.ZipFile, '__exit__'):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
88 return zipfile.ZipFile(*args, **kwargs)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
89 return super(ContextualZipFile, cls).__new__(cls)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
90
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
91
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
92 @contextlib.contextmanager
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
93 def archive_context(filename):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
94 # extracting the archive
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
95 tmpdir = tempfile.mkdtemp()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
96 log.warn('Extracting in %s', tmpdir)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
97 old_wd = os.getcwd()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
98 try:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
99 os.chdir(tmpdir)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
100 with ContextualZipFile(filename) as archive:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
101 archive.extractall()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
102
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
103 # going in the directory
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
104 subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
105 os.chdir(subdir)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
106 log.warn('Now working in %s', subdir)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
107 yield
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
108
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
109 finally:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
110 os.chdir(old_wd)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
111 shutil.rmtree(tmpdir)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
112
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
113
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
114 def _do_download(version, download_base, to_dir, download_delay):
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
115 egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg'
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
116 % (version, sys.version_info[0], sys.version_info[1]))
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
117 if not os.path.exists(egg):
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
118 archive = download_setuptools(version, download_base,
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
119 to_dir, download_delay)
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
120 _build_egg(egg, archive, to_dir)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
121 sys.path.insert(0, egg)
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
122
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
123 # Remove previously-imported pkg_resources if present (see
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
124 # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details).
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
125 if 'pkg_resources' in sys.modules:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
126 del sys.modules['pkg_resources']
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
127
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
128 import setuptools
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
129 setuptools.bootstrap_install_from = egg
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
130
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
131
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
132 def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
133 to_dir=os.curdir, download_delay=15):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
134 to_dir = os.path.abspath(to_dir)
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
135 rep_modules = 'pkg_resources', 'setuptools'
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
136 imported = set(sys.modules).intersection(rep_modules)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
137 try:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
138 import pkg_resources
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
139 except ImportError:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
140 return _do_download(version, download_base, to_dir, download_delay)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
141 try:
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
142 pkg_resources.require("setuptools>=" + version)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
143 return
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
144 except pkg_resources.DistributionNotFound:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
145 return _do_download(version, download_base, to_dir, download_delay)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
146 except pkg_resources.VersionConflict as VC_err:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
147 if imported:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
148 msg = textwrap.dedent("""
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
149 The required version of setuptools (>={version}) is not available,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
150 and can't be installed while this script is running. Please
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
151 install a more recent version first, using
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
152 'easy_install -U setuptools'.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
153
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
154 (Currently using {VC_err.args[0]!r})
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
155 """).format(VC_err=VC_err, version=version)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
156 sys.stderr.write(msg)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
157 sys.exit(2)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
158
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
159 # otherwise, reload ok
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
160 del pkg_resources, sys.modules['pkg_resources']
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
161 return _do_download(version, download_base, to_dir, download_delay)
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
162
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
163 def _clean_check(cmd, target):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
164 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
165 Run the command to download target. If the command fails, clean up before
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
166 re-raising the error.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
167 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
168 try:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
169 subprocess.check_call(cmd)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
170 except subprocess.CalledProcessError:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
171 if os.access(target, os.F_OK):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
172 os.unlink(target)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
173 raise
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
174
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
175 def download_file_powershell(url, target):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
176 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
177 Download the file at url to target using Powershell (which will validate
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
178 trust). Raise an exception if the command cannot complete.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
179 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
180 target = os.path.abspath(target)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
181 ps_cmd = (
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
182 "[System.Net.WebRequest]::DefaultWebProxy.Credentials = "
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
183 "[System.Net.CredentialCache]::DefaultCredentials; "
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
184 "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)"
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
185 % vars()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
186 )
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
187 cmd = [
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
188 'powershell',
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
189 '-Command',
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
190 ps_cmd,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
191 ]
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
192 _clean_check(cmd, target)
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
193
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
194 def has_powershell():
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
195 if platform.system() != 'Windows':
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
196 return False
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
197 cmd = ['powershell', '-Command', 'echo test']
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
198 with open(os.path.devnull, 'wb') as devnull:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
199 try:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
200 subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
201 except Exception:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
202 return False
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
203 return True
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
204
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
205 download_file_powershell.viable = has_powershell
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
206
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
207 def download_file_curl(url, target):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
208 cmd = ['curl', url, '--silent', '--output', target]
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
209 _clean_check(cmd, target)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
210
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
211 def has_curl():
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
212 cmd = ['curl', '--version']
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
213 with open(os.path.devnull, 'wb') as devnull:
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
214 try:
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
215 subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
216 except Exception:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
217 return False
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
218 return True
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
219
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
220 download_file_curl.viable = has_curl
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
221
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
222 def download_file_wget(url, target):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
223 cmd = ['wget', url, '--quiet', '--output-document', target]
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
224 _clean_check(cmd, target)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
225
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
226 def has_wget():
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
227 cmd = ['wget', '--version']
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
228 with open(os.path.devnull, 'wb') as devnull:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
229 try:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
230 subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
231 except Exception:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
232 return False
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
233 return True
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
234
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
235 download_file_wget.viable = has_wget
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
236
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
237 def download_file_insecure(url, target):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
238 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
239 Use Python to download the file, even though it cannot authenticate the
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
240 connection.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
241 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
242 src = urlopen(url)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
243 try:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
244 # Read all the data in one block.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
245 data = src.read()
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
246 finally:
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
247 src.close()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
248
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
249 # Write all the data in one block to avoid creating a partial file.
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
250 with open(target, "wb") as dst:
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
251 dst.write(data)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
252
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
253 download_file_insecure.viable = lambda: True
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
254
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
255 def get_best_downloader():
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
256 downloaders = (
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
257 download_file_powershell,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
258 download_file_curl,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
259 download_file_wget,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
260 download_file_insecure,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
261 )
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
262 viable_downloaders = (dl for dl in downloaders if dl.viable())
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
263 return next(viable_downloaders, None)
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
264
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
265 def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
266 to_dir=os.curdir, delay=15, downloader_factory=get_best_downloader):
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
267 """
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
268 Download setuptools from a specified location and return its filename
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
269
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
270 `version` should be a valid setuptools version number that is available
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
271 as an sdist for download under the `download_base` URL (which should end
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
272 with a '/'). `to_dir` is the directory where the egg will be downloaded.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
273 `delay` is the number of seconds to pause before an actual download
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
274 attempt.
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
275
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
276 ``downloader_factory`` should be a function taking no arguments and
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
277 returning a function for downloading a URL to a target.
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
278 """
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
279 # making sure we use the absolute path
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
280 to_dir = os.path.abspath(to_dir)
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
281 zip_name = "setuptools-%s.zip" % version
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
282 url = download_base + zip_name
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
283 saveto = os.path.join(to_dir, zip_name)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
284 if not os.path.exists(saveto): # Avoid repeated downloads
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
285 log.warn("Downloading %s", url)
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
286 downloader = downloader_factory()
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
287 downloader(url, saveto)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
288 return os.path.realpath(saveto)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
289
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
290 def _build_install_args(options):
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
291 """
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
292 Build the arguments to 'python setup.py install' on the setuptools package
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
293 """
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
294 return ['--user'] if options.user_install else []
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
295
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
296 def _parse_args():
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
297 """
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
298 Parse the command line for options
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
299 """
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
300 parser = optparse.OptionParser()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
301 parser.add_option(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
302 '--user', dest='user_install', action='store_true', default=False,
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
303 help='install in user site package (requires Python 2.6 or later)')
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
304 parser.add_option(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
305 '--download-base', dest='download_base', metavar="URL",
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
306 default=DEFAULT_URL,
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
307 help='alternative URL from where to download the setuptools package')
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
308 parser.add_option(
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
309 '--insecure', dest='downloader_factory', action='store_const',
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
310 const=lambda: download_file_insecure, default=get_best_downloader,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
311 help='Use internal, non-validating downloader'
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
312 )
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
313 parser.add_option(
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
314 '--version', help="Specify which version to download",
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
315 default=DEFAULT_VERSION,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
316 )
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
317 options, args = parser.parse_args()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
318 # positional arguments are ignored
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
319 return options
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
320
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
321 def main():
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
322 """Install or upgrade setuptools and EasyInstall"""
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
323 options = _parse_args()
1155
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
324 archive = download_setuptools(
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
325 version=options.version,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
326 download_base=options.download_base,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
327 downloader_factory=options.downloader_factory,
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
328 )
a1d47760df3f misc (install): updated old distribute_setup.py to new setuptools' ez_setup.py
Goffi <goffi@goffi.org>
parents: 843
diff changeset
329 return _install(archive, _build_install_args(options))
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
330
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
331 if __name__ == '__main__':
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
332 sys.exit(main())