aboutsummaryrefslogtreecommitdiffstats
path: root/distribute_setup.py
diff options
context:
space:
mode:
authortarek <none@none>2009-09-10 20:57:46 +0200
committertarek <none@none>2009-09-10 20:57:46 +0200
commit364308e9ce78818d74e88987459e3c08f8e80d11 (patch)
tree787c6c5aa8e340ba9eb84a75707ac644cc602c5d /distribute_setup.py
parentb863dd62d8defc800fcbff6fa07eb73d4351acb9 (diff)
downloadexternal_python_setuptools-364308e9ce78818d74e88987459e3c08f8e80d11.tar.gz
external_python_setuptools-364308e9ce78818d74e88987459e3c08f8e80d11.tar.bz2
external_python_setuptools-364308e9ce78818d74e88987459e3c08f8e80d11.zip
reintroduced use_setuptools in distribute_setup.py
--HG-- branch : distribute extra : rebase_source : 3f0d0f085964feffdb07e97f25d508b7aaa88ffb
Diffstat (limited to 'distribute_setup.py')
-rw-r--r--distribute_setup.py129
1 files changed, 103 insertions, 26 deletions
diff --git a/distribute_setup.py b/distribute_setup.py
index a57fd2a8..83b56d4d 100644
--- a/distribute_setup.py
+++ b/distribute_setup.py
@@ -23,17 +23,115 @@ import os
import time
import fnmatch
from distutils import log
+import subprocess
-is_jython = sys.platform.startswith('java')
-if is_jython:
- import subprocess
+IS_JYTHON = sys.platform.startswith('java')
+DEFAULT_VERSION = "0.6.2"
+DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
+def quote(c):
+ if sys.platform == 'win32':
+ if ' ' in c:
+ return '"%s"' % c
+ return c
-DEFAULT_VERSION = "0.6.1"
-DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
+def python_cmd(cmd):
+ python = quote(sys.executable)
+ cmd = quote(cmd)
+ if IS_JYTHON:
+ return subprocess.Popen([python, cmd]).wait() == 0
+ args = [os.P_WAIT, python, python] + cmd.split() + [os.environ]
+ return os.spawnle(*args) == 0
+
+def _install(tarball):
+ # extracting the tarball
+ tmpdir = tempfile.mkdtemp()
+ log.warn('Extracting in %s' % tmpdir)
+ old_wd = os.getcwd()
+ try:
+ os.chdir(tmpdir)
+ tar = tarfile.open(tarball)
+ extractall(tar)
+ tar.close()
+
+ # going in the directory
+ subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
+ os.chdir(subdir)
+ log.warn('Now working in %s' % subdir)
+
+ # installing
+ assert python_cmd('setup.py -q install')
+ finally:
+ os.chdir(old_wd)
+
+def _build_egg(tarball, to_dir=os.curdir):
+ # extracting the tarball
+ tmpdir = tempfile.mkdtemp()
+ log.warn('Extracting in %s' % tmpdir)
+ old_wd = os.getcwd()
+ try:
+ os.chdir(tmpdir)
+ tar = tarfile.open(tarball)
+ extractall(tar)
+ tar.close()
+
+ # going in the directory
+ subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
+ os.chdir(subdir)
+ log.warn('Now working in %s' % subdir)
+
+ # building an egg
+ python_cmd('setup.py -v -q bdist_egg --dist-dir %s' % to_dir)
+
+ # returning the result
+ for file in os.listdir(to_dir):
+ if fnmatch.fnmatch(file, 'distribute-%s*.egg' % DEFAULT_VERSION):
+ return os.path.join(to_dir, file)
+
+ raise IOError('Could not build the egg.')
+ finally:
+ os.chdir(old_wd)
+
+def _do_download(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
+ to_dir=os.curdir, download_delay=15):
+ tarball = download_setuptools(version, download_base,
+ to_dir, download_delay)
+ egg = _build_egg(tarball, to_dir)
+ sys.path.insert(0, egg)
+ import setuptools
+ setuptools.bootstrap_install_from = egg
+
+def use_setuptools(
+ version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
+ download_delay=15
+):
+ was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
+ try:
+ import pkg_resources
+ if not hasattr(pkg_resources, '_distribute'):
+ raise ImportError
+ except ImportError:
+ return _do_download(version, download_base, to_dir, download_delay)
+ try:
+ pkg_resources.require("distribute>="+version); return
+ except pkg_resources.VersionConflict, e:
+ if was_imported:
+ print >>sys.stderr, (
+ "The required version of distribute (>=%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 distribute'."
+ "\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(version, download_base, to_dir, download_delay)
+ except pkg_resources.DistributionNotFound:
+ return _do_download(version, download_base, to_dir, download_delay)
def download_setuptools(
version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
+ delay=15,
):
"""Download distribute from a specified location and return its filename
@@ -304,27 +402,6 @@ def extractall(self, path=".", members=None):
else:
self._dbg(1, "tarfile: %s" % e)
-def _install(tarball):
- # extracting the tarball
- tmpdir = tempfile.mkdtemp()
- log.warn('Extracting in %s' % tmpdir)
- old_wd = os.getcwd()
- try:
- os.chdir(tmpdir)
- tar = tarfile.open(tarball)
- extractall(tar)
- tar.close()
-
- # going in the directory
- subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
- os.chdir(subdir)
- log.warn('Now working in %s' % subdir)
-
- # installing distribute
- os.system('%s setup.py install' % sys.executable)
- finally:
- os.chdir(old_wd)
-
def main(argv, version=DEFAULT_VERSION):
"""Install or upgrade setuptools and EasyInstall"""
tarball = download_setuptools()