aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xez_setup.py34
-rw-r--r--setuptools/__init__.py14
-rw-r--r--setuptools/dist.py24
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)