annotate ez_setup.py @ 663:6199b34d349b beta

fixed html templates, fixed overal rhodecode width to 1024pixels various additional to templates. History for annotation, width for my page, repo types for admin panel repositories
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 06 Nov 2010 16:16:44 +0100
parents 564e40829f80
children 6832ef664673 2182a2005278
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 #!python
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2 """Bootstrap setuptools installation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4 If you want to use setuptools in your package's setup.py, just include this
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5 file in the same directory with it, and add this to the top of your setup.py::
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 from ez_setup import use_setuptools
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
8 use_setuptools()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
9
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
10 If you want to require a specific version of setuptools, set a download
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
11 mirror, or use an alternate download directory, you can do so by supplying
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12 the appropriate options to ``use_setuptools()``.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
13
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14 This file can also be run as a script to install or upgrade setuptools.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16 import sys
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 DEFAULT_VERSION = "0.6c9"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18 DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
19
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
20 md5_data = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
22 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
23 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
24 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
25 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
26 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
27 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
28 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
29 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
30 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
31 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
32 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
33 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
34 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
35 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
36 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
37 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
38 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
39 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
40 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
41 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
42 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
43 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
44 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
45 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
46 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
47 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
48 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
49 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
50 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
51 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
52 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
53 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
54 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
55 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
56
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
57 import sys, os
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
58 try: from hashlib import md5
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
59 except ImportError: from md5 import md5
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
60
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
61 def _validate_md5(egg_name, data):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
62 if egg_name in md5_data:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
63 digest = md5(data).hexdigest()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
64 if digest != md5_data[egg_name]:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
65 print >>sys.stderr, (
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
66 "md5 validation of %s failed! (Possible download problem?)"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
67 % egg_name
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
68 )
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
69 sys.exit(2)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
70 return data
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
71
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
72 def use_setuptools(
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
73 version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
74 download_delay=15
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
75 ):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
76 """Automatically find/download setuptools and make it available on sys.path
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
77
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
78 `version` should be a valid setuptools version number that is available
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
79 as an egg for download under the `download_base` URL (which should end with
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
80 a '/'). `to_dir` is the directory where setuptools will be downloaded, if
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
81 it is not already available. If `download_delay` is specified, it should
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
82 be the number of seconds that will be paused before initiating a download,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
83 should one be required. If an older version of setuptools is installed,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
84 this routine will print a message to ``sys.stderr`` and raise SystemExit in
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
85 an attempt to abort the calling script.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
86 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
87 was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
88 def do_download():
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
89 egg = download_setuptools(version, download_base, to_dir, download_delay)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
90 sys.path.insert(0, egg)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
91 import setuptools; setuptools.bootstrap_install_from = egg
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
92 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
93 import pkg_resources
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
94 except ImportError:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
95 return do_download()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
96 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
97 pkg_resources.require("setuptools>="+version); return
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
98 except pkg_resources.VersionConflict, e:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
99 if was_imported:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
100 print >>sys.stderr, (
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
101 "The required version of setuptools (>=%s) is not available, and\n"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
102 "can't be installed while this script is running. Please install\n"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
103 " a more recent version first, using 'easy_install -U setuptools'."
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
104 "\n\n(Currently using %r)"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
105 ) % (version, e.args[0])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
106 sys.exit(2)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
107 else:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
108 del pkg_resources, sys.modules['pkg_resources'] # reload ok
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
109 return do_download()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
110 except pkg_resources.DistributionNotFound:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
111 return do_download()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
112
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
113 def download_setuptools(
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
114 version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
115 delay = 15
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
116 ):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
117 """Download setuptools from a specified location and return its filename
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
118
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
119 `version` should be a valid setuptools version number that is available
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
120 as an egg for download under the `download_base` URL (which should end
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
121 with a '/'). `to_dir` is the directory where the egg will be downloaded.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
122 `delay` is the number of seconds to pause before an actual download attempt.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
123 """
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
124 import urllib2, shutil
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
125 egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
126 url = download_base + egg_name
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
127 saveto = os.path.join(to_dir, egg_name)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
128 src = dst = None
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
129 if not os.path.exists(saveto): # Avoid repeated downloads
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
130 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
131 from distutils import log
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
132 if delay:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
133 log.warn("""
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
134 ---------------------------------------------------------------------------
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
135 This script requires setuptools version %s to run (even to display
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
136 help). I will attempt to download it for you (from
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
137 %s), but
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
138 you may need to enable firewall access for this script first.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
139 I will start the download in %d seconds.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
140
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
141 (Note: if this machine does not have network access, please obtain the file
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
142
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
143 %s
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
144
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
145 and place it in this directory before rerunning this script.)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
146 ---------------------------------------------------------------------------""",
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
147 version, download_base, delay, url
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
148 ); from time import sleep; sleep(delay)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
149 log.warn("Downloading %s", url)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
150 src = urllib2.urlopen(url)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
151 # Read/write all in one block, so we don't create a corrupt file
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
152 # if the download is interrupted.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
153 data = _validate_md5(egg_name, src.read())
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
154 dst = open(saveto,"wb"); dst.write(data)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
155 finally:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
156 if src: src.close()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
157 if dst: dst.close()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
158 return os.path.realpath(saveto)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
159
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
160
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
161
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
162
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
163
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
164
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
165
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
166
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
167
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
168
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
169
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
170
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
171
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
172
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
173
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
174
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
175
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
176
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
177
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
178
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
179
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
180
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
181
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
182
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
183
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
184
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
185
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
186
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
187
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
188
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
189
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
190
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
191
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
192
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
193
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
194
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
195 def main(argv, version=DEFAULT_VERSION):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
196 """Install or upgrade setuptools and EasyInstall"""
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
197 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
198 import setuptools
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
199 except ImportError:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
200 egg = None
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
201 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
202 egg = download_setuptools(version, delay=0)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
203 sys.path.insert(0,egg)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
204 from setuptools.command.easy_install import main
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
205 return main(list(argv)+[egg]) # we're done here
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
206 finally:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
207 if egg and os.path.exists(egg):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
208 os.unlink(egg)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
209 else:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
210 if setuptools.__version__ == '0.0.1':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
211 print >>sys.stderr, (
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
212 "You have an obsolete version of setuptools installed. Please\n"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
213 "remove it from your system entirely before rerunning this script."
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
214 )
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
215 sys.exit(2)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
216
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
217 req = "setuptools>="+version
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
218 import pkg_resources
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
219 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
220 pkg_resources.require(req)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
221 except pkg_resources.VersionConflict:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
222 try:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
223 from setuptools.command.easy_install import main
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
224 except ImportError:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
225 from easy_install import main
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
226 main(list(argv)+[download_setuptools(delay=0)])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
227 sys.exit(0) # try to force an exit
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
228 else:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
229 if argv:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
230 from setuptools.command.easy_install import main
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
231 main(argv)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
232 else:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
233 print "Setuptools version",version,"or greater has been installed."
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
234 print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
235
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
236 def update_md5(filenames):
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
237 """Update our built-in md5 registry"""
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
238
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
239 import re
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
240
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
241 for name in filenames:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
242 base = os.path.basename(name)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
243 f = open(name,'rb')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
244 md5_data[base] = md5(f.read()).hexdigest()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
245 f.close()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
246
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
247 data = [" %r: %r,\n" % it for it in md5_data.items()]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
248 data.sort()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
249 repl = "".join(data)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
250
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
251 import inspect
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
252 srcfile = inspect.getsourcefile(sys.modules[__name__])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
253 f = open(srcfile, 'rb'); src = f.read(); f.close()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
254
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
255 match = re.search("\nmd5_data = {\n([^}]+)}", src)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
256 if not match:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
257 print >>sys.stderr, "Internal error!"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
258 sys.exit(2)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
259
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
260 src = src[:match.start(1)] + repl + src[match.end(1):]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
261 f = open(srcfile,'w')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
262 f.write(src)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
263 f.close()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
264
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
265
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
266 if __name__=='__main__':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
267 if len(sys.argv)>2 and sys.argv[1]=='--md5update':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
268 update_md5(sys.argv[2:])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
269 else:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
270 main(sys.argv[1:])
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
271
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
272
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
273
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
274
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
275
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
276