[Distutils] dumb newbie...?
Scott Finnie
scott.finnie at virgin.net
Tue Aug 22 21:52:54 CEST 2006
Please be gentle...
Newbie to distutils, trying to install django 0.95 egg
(www.djangoproject.com) from behind a corporate windows firewall.
django in turn tries to download and install setuptools - which fails
due to firewall. As per ez_setup.py error message, I downloaded the
setuptools egg, put it in the same dir and re-ran: but got same message.
Took a look at the code and found out why (expects the egg to be in the
temp dir, not same dir).
Strikes me it's most likely I was doing something wrong / missed an
option / some other rudimentary mistake. Assuming that's the case,
could someone set me straight?
In the unlikely event I've found a bug I've attached a patched version
below. Note the patch is anything but elegant, driven by minimal change
rather than elegant solution. Very un-pythonic I know.
Like I said, please be gentle...
- Scoot.
--
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.
"""
import urllib2, shutil
egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
saveto = os.path.join(to_dir, egg_name)
#------------------------------------------------
#Change begins
#Don't download if the egg is in the current dir.
#This is a horrible hack; should check for existence
#in calling routine and possibly skip temp dir creation
#altogether - depends on whether it's used subsequently by
#setuptools.
try:
os.stat(egg_name)
shutil.copyfile(egg_name, saveto)
except:
# change ends (remainder indented though)
#------------------------------------------------
url = download_base + egg_name
src = dst = None
if not os.path.exists(saveto): # Avoid repeated downloads
try:
from distutils import log
if delay:
log.warn("""
---------------------------------------------------------------------------
This script requires setuptools version %s to run (even to display
help). I will attempt to download it for you (from
%s), but
you may need to enable firewall access for this script first.
I will start the download in %d seconds.
(Note: if this machine does not have network access, please obtain
the file
%s
and place it in this directory before rerunning this script.)
---------------------------------------------------------------------------""",
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)
finally:
if src: src.close()
if dst: dst.close()
return os.path.realpath(saveto)
More information about the Distutils-SIG
mailing list