diff options
-rwxr-xr-x | ez_setup.py | 34 | ||||
-rw-r--r-- | setuptools/__init__.py | 14 | ||||
-rw-r--r-- | setuptools/dist.py | 24 |
3 files changed, 36 insertions, 36 deletions
diff --git a/ez_setup.py b/ez_setup.py index 887c4dcc..c59baf06 100755 --- a/ez_setup.py +++ b/ez_setup.py @@ -63,8 +63,10 @@ def use_setuptools( sys.exit(2) except ImportError: - sys.path.insert(0, download_setuptools(version, download_base, to_dir)) - + egg = download_setuptools(version, download_base, to_dir) + sys.path.insert(0, egg) + import setuptools; setuptools.bootstrap_install_from = egg + import pkg_resources try: pkg_resources.require("setuptools>="+version) @@ -78,8 +80,6 @@ def use_setuptools( ) % version sys.exit(2) - - def download_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir ): @@ -95,13 +95,19 @@ def download_setuptools( saveto = os.path.join(to_dir, egg_name) src = dst = None - try: - src = urllib2.urlopen(url) - dst = open(saveto,"wb") - shutil.copyfileobj(src,dst) - finally: - if src: src.close() - if dst: dst.close() + if not os.path.exists(saveto): # Avoid repeated downloads + try: + from distutils import log + 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 = src.read() + dst = open(saveto,"wb") + dst.write(data) + finally: + if src: src.close() + if dst: dst.close() return os.path.realpath(saveto) @@ -115,12 +121,6 @@ def download_setuptools( - - - - - - def main(argv, version=DEFAULT_VERSION): """Install or upgrade setuptools and EasyInstall""" diff --git a/setuptools/__init__.py b/setuptools/__init__.py index 77fdbbbe..1a6bebff 100644 --- a/setuptools/__init__.py +++ b/setuptools/__init__.py @@ -15,6 +15,7 @@ __all__ = [ 'find_packages' ] +bootstrap_install_from = None def find_packages(where='.'): """Return a list all Python packages found within directory 'where' @@ -38,7 +39,6 @@ def find_packages(where='.'): - def setup(**attrs): """Do package setup @@ -56,6 +56,12 @@ class Command(_Command): command_consumes_arguments = False + def __init__(self, dist, **kw): + # Add support for keyword arguments + _Command.__init__(self,dist) + for k,v in kw.items(): + setattr(self,k,v) + def reinitialize_command(self, command, reinit_subcommands=0, **kw): cmd = _Command.reinitialize_command(self, command, reinit_subcommands) for k,v in kw.items(): @@ -74,9 +80,3 @@ class Command(_Command): - - - - - - diff --git a/setuptools/dist.py b/setuptools/dist.py index a39b4a13..f46a02f8 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -8,6 +8,7 @@ from setuptools.command.install import install from setuptools.command.install_lib import install_lib from distutils.errors import DistutilsOptionError, DistutilsPlatformError from distutils.errors import DistutilsSetupError +import setuptools sequence = tuple, list @@ -38,7 +39,6 @@ sequence = tuple, list - class Distribution(_Distribution): """Distribution with support for features, tests, and package data @@ -348,18 +348,18 @@ class Distribution(_Distribution): return not not self.requires + def run_commands(self): + if setuptools.bootstrap_install_from and 'install' in self.commands: + # Bootstrap self-installation of setuptools + from easy_install import easy_install + cmd = easy_install( + self, args=[setuptools.bootstrap_install_from], zip_ok=1 + ) + cmd.ensure_finalized() + cmd.run() + setuptools.bootstrap_install_from = None - - - - - - - - - - - + _Distribution.run_commands(self) |