|
@@ -15,7 +15,8 @@ |
|
|
"""
|
|
|
import sys
|
|
|
DEFAULT_VERSION = "0.6c9"
|
|
|
-DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]
|
|
|
+DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" \
|
|
|
+ % sys.version[:3]
|
|
|
|
|
|
md5_data = {
|
|
|
'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',
|
|
@@ -54,25 +55,27 @@ |
|
|
'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a',
|
|
|
}
|
|
|
|
|
|
-import sys, os
|
|
|
-try: from hashlib import md5
|
|
|
-except ImportError: from md5 import md5
|
|
|
+import os
|
|
|
+
|
|
|
+try:
|
|
|
+ from hashlib import md5
|
|
|
+except ImportError:
|
|
|
+ from md5 import md5
|
|
|
+
|
|
|
|
|
|
def _validate_md5(egg_name, data):
|
|
|
if egg_name in md5_data:
|
|
|
digest = md5(data).hexdigest()
|
|
|
if digest != md5_data[egg_name]:
|
|
|
- print >>sys.stderr, (
|
|
|
+ print >> sys.stderr, (
|
|
|
"md5 validation of %s failed! (Possible download problem?)"
|
|
|
- % egg_name
|
|
|
- )
|
|
|
+ % egg_name)
|
|
|
sys.exit(2)
|
|
|
return data
|
|
|
|
|
|
-def use_setuptools(
|
|
|
- version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
|
|
|
- download_delay=15
|
|
|
-):
|
|
|
+
|
|
|
+def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
|
|
|
+ to_dir=os.curdir, download_delay=15):
|
|
|
"""Automatically find/download setuptools and make it available on sys.path
|
|
|
|
|
|
`version` should be a valid setuptools version number that is available
|
|
@@ -84,45 +87,50 @@ def use_setuptools( |
|
|
this routine will print a message to ``sys.stderr`` and raise SystemExit in
|
|
|
an attempt to abort the calling script.
|
|
|
"""
|
|
|
- was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
|
|
|
+ was_imported = 'pkg_resources' in sys.modules or ('setuptools' in
|
|
|
+ sys.modules)
|
|
|
+
|
|
|
def do_download():
|
|
|
- egg = download_setuptools(version, download_base, to_dir, download_delay)
|
|
|
+ egg = download_setuptools(version, download_base, to_dir,
|
|
|
+ download_delay)
|
|
|
sys.path.insert(0, egg)
|
|
|
- import setuptools; setuptools.bootstrap_install_from = egg
|
|
|
+ import setuptools
|
|
|
+ setuptools.bootstrap_install_from = egg
|
|
|
try:
|
|
|
import pkg_resources
|
|
|
except ImportError:
|
|
|
return do_download()
|
|
|
try:
|
|
|
- pkg_resources.require("setuptools>="+version); return
|
|
|
+ pkg_resources.require("setuptools>=" + version)
|
|
|
+ return
|
|
|
except pkg_resources.VersionConflict, e:
|
|
|
if was_imported:
|
|
|
- print >>sys.stderr, (
|
|
|
+ print >> sys.stderr, (
|
|
|
"The required version of setuptools (>=%s) is not available, and\n"
|
|
|
"can't be installed while this script is running. Please install\n"
|
|
|
" a more recent version first, using 'easy_install -U setuptools'."
|
|
|
- "\n\n(Currently using %r)"
|
|
|
- ) % (version, e.args[0])
|
|
|
+ "\n\n(Currently using %r)") % (version, e.args[0])
|
|
|
sys.exit(2)
|
|
|
else:
|
|
|
del pkg_resources, sys.modules['pkg_resources'] # reload ok
|
|
|
return do_download()
|
|
|
except pkg_resources.DistributionNotFound:
|
|
|
return do_download()
|
|
|
|
|
|
-def download_setuptools(
|
|
|
- version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
|
|
|
- delay = 15
|
|
|
-):
|
|
|
+
|
|
|
+def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
|
|
|
+ to_dir=os.curdir, delay=15):
|
|
|
"""Download setuptools from a specified location and return its filename
|
|
|
|
|
|
`version` should be a valid setuptools version number that is available
|
|
|
as an egg for download under the `download_base` URL (which should end
|
|
|
with a '/'). `to_dir` is the directory where the egg will be downloaded.
|
|
|
- `delay` is the number of seconds to pause before an actual download attempt.
|
|
|
+ `delay` is the number of seconds to pause before an actual download
|
|
|
+ attempt.
|
|
|
"""
|
|
|
- import urllib2, shutil
|
|
|
- egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
|
|
|
+ import urllib2
|
|
|
+
|
|
|
+ egg_name = "setuptools-%s-py%s.egg" % (version, sys.version[:3])
|
|
|
url = download_base + egg_name
|
|
|
saveto = os.path.join(to_dir, egg_name)
|
|
|
src = dst = None
|
|
@@ -144,54 +152,24 @@ def download_setuptools( |
|
|
|
|
|
and place it in this directory before rerunning this script.)
|
|
|
---------------------------------------------------------------------------""",
|
|
|
- version, download_base, delay, url
|
|
|
- ); from time import sleep; sleep(delay)
|
|
|
+ version, download_base, delay, url)
|
|
|
+ from time import sleep
|
|
|
+ sleep(delay)
|
|
|
log.warn("Downloading %s", url)
|
|
|
src = urllib2.urlopen(url)
|
|
|
# Read/write all in one block, so we don't create a corrupt file
|
|
|
# if the download is interrupted.
|
|
|
data = _validate_md5(egg_name, src.read())
|
|
|
- dst = open(saveto,"wb"); dst.write(data)
|
|
|
+ dst = open(saveto, "wb")
|
|
|
+ dst.write(data)
|
|
|
finally:
|
|
|
- if src: src.close()
|
|
|
- if dst: dst.close()
|
|
|
+ if src:
|
|
|
+ src.close()
|
|
|
+ if dst:
|
|
|
+ dst.close()
|
|
|
return os.path.realpath(saveto)
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
def main(argv, version=DEFAULT_VERSION):
|
|
|
"""Install or upgrade setuptools and EasyInstall"""
|
|
|
try:
|
|
@@ -200,21 +178,21 @@ def main(argv, version=DEFAULT_VERSION): |
|
|
egg = None
|
|
|
try:
|
|
|
egg = download_setuptools(version, delay=0)
|
|
|
- sys.path.insert(0,egg)
|
|
|
+ sys.path.insert(0, egg)
|
|
|
from setuptools.command.easy_install import main
|
|
|
- return main(list(argv)+[egg]) # we're done here
|
|
|
+ return main(list(argv) + [egg]) # we're done here
|
|
|
finally:
|
|
|
if egg and os.path.exists(egg):
|
|
|
os.unlink(egg)
|
|
|
else:
|
|
|
if setuptools.__version__ == '0.0.1':
|
|
|
- print >>sys.stderr, (
|
|
|
+ print >> sys.stderr, (
|
|
|
"You have an obsolete version of setuptools installed. Please\n"
|
|
|
- "remove it from your system entirely before rerunning this script."
|
|
|
- )
|
|
|
+ "remove it from your system entirely before rerunning"
|
|
|
+ " this script.")
|
|
|
sys.exit(2)
|
|
|
|
|
|
- req = "setuptools>="+version
|
|
|
+ req = "setuptools>=" + version
|
|
|
import pkg_resources
|
|
|
try:
|
|
|
pkg_resources.require(req)
|
|
@@ -223,24 +201,25 @@ def main(argv, version=DEFAULT_VERSION): |
|
|
from setuptools.command.easy_install import main
|
|
|
except ImportError:
|
|
|
from easy_install import main
|
|
|
- main(list(argv)+[download_setuptools(delay=0)])
|
|
|
+ main(list(argv) + [download_setuptools(delay=0)])
|
|
|
sys.exit(0) # try to force an exit
|
|
|
else:
|
|
|
if argv:
|
|
|
from setuptools.command.easy_install import main
|
|
|
main(argv)
|
|
|
else:
|
|
|
- print "Setuptools version",version,"or greater has been installed."
|
|
|
+ print "Setuptools version", version, "or greater has been installed."
|
|
|
print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'
|
|
|
|
|
|
+
|
|
|
def update_md5(filenames):
|
|
|
"""Update our built-in md5 registry"""
|
|
|
|
|
|
import re
|
|
|
|
|
|
for name in filenames:
|
|
|
base = os.path.basename(name)
|
|
|
- f = open(name,'rb')
|
|
|
+ f = open(name, 'rb')
|
|
|
md5_data[base] = md5(f.read()).hexdigest()
|
|
|
f.close()
|
|
|
|
|
@@ -250,21 +229,23 @@ def update_md5(filenames): |
|
|
|
|
|
import inspect
|
|
|
srcfile = inspect.getsourcefile(sys.modules[__name__])
|
|
|
- f = open(srcfile, 'rb'); src = f.read(); f.close()
|
|
|
+ f = open(srcfile, 'rb')
|
|
|
+ src = f.read()
|
|
|
+ f.close()
|
|
|
|
|
|
match = re.search("\nmd5_data = {\n([^}]+)}", src)
|
|
|
if not match:
|
|
|
- print >>sys.stderr, "Internal error!"
|
|
|
+ print >> sys.stderr, "Internal error!"
|
|
|
sys.exit(2)
|
|
|
|
|
|
src = src[:match.start(1)] + repl + src[match.end(1):]
|
|
|
- f = open(srcfile,'w')
|
|
|
+ f = open(srcfile, 'w')
|
|
|
f.write(src)
|
|
|
f.close()
|
|
|
|
|
|
|
|
|
-if __name__=='__main__':
|
|
|
- if len(sys.argv)>2 and sys.argv[1]=='--md5update':
|
|
|
+if __name__ == '__main__':
|
|
|
+ if len(sys.argv) > 2 and sys.argv[1] == '--md5update':
|
|
|
update_md5(sys.argv[2:])
|
|
|
else:
|
|
|
main(sys.argv[1:])
|
0 comments on commit
b38db55