annotate ez_setup.py @ 4845:3a3ec35466e7

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