aboutsummaryrefslogtreecommitdiffstats
path: root/distribute_setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'distribute_setup.py')
-rw-r--r--distribute_setup.py185
1 files changed, 36 insertions, 149 deletions
diff --git a/distribute_setup.py b/distribute_setup.py
index 85a12d84..9b388b57 100644
--- a/distribute_setup.py
+++ b/distribute_setup.py
@@ -26,55 +26,13 @@ is_jython = sys.platform.startswith('java')
if is_jython:
import subprocess
-DEFAULT_VERSION = "0.6.1"
-DEFAULT_URL = "http://pypi.python.org/packages/%s/d/distribute/" % sys.version[:3]
-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
- as an egg for download under the `download_base` URL (which should end with
- a '/'). `to_dir` is the directory where setuptools will be downloaded, if
- it is not already available. If `download_delay` is specified, it should
- be the number of seconds that will be paused before initiating a download,
- should one be required. If an older version of setuptools is installed,
- 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
- def do_download():
- egg = download_setuptools(version, download_base, to_dir, download_delay)
- sys.path.insert(0, egg)
- import setuptools; setuptools.bootstrap_install_from = egg
- try:
- import pkg_resources
- if not hasattr(pkg_resources, '_distribute'):
- raise ImportError
- except ImportError:
- return do_download()
- 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()
- except pkg_resources.DistributionNotFound:
- return do_download()
+DEFAULT_VERSION = "0.6.1"
+#DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
+DEFAULT_URL = "http://nightly.ziade.org/"
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
@@ -84,39 +42,25 @@ def download_setuptools(
`delay` is the number of seconds to pause before an actual download attempt.
"""
import urllib2, shutil
- egg_name = "distribute-%s-py%s.egg" % (version,sys.version[:3])
- url = download_base + egg_name
- saveto = os.path.join(to_dir, egg_name)
+ tgz_name = "distribute-%s.tar.gz" % version
+ url = download_base + tgz_name
+ saveto = os.path.join(to_dir, tgz_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 distribute 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 = 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)
@@ -316,91 +260,34 @@ def _relaunch():
else:
sys.exit(os.spawnv(os.P_WAIT, sys.executable, args))
-def _easy_install(argv, egg=None):
- from setuptools import setup
- from setuptools.dist import Distribution
- import distutils.core
- if egg is not None:
- setup_args = list(argv) + [egg]
- else:
- setup_args = list(argv)
+import tempfile
+import tarfile
+
+def _install(tarball):
+ # extracting the tarball
+ tmpdir = tempfile.mkdtemp()
+ log.warn('Extracting in %s' % tmpdir)
+ old_wd = os.getcwd()
try:
- return setup(script_args = ['-q','easy_install',
- '-v'] + setup_args,
- script_name = sys.argv[0] or 'easy_install',
- distclass=Distribution)
- except DistutilsError:
- return sys.exit(2)
+ os.chdir(tmpdir)
+ tar = tarfile.open(tarball)
+ tar.extractall()
+ 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"""
- # let's deactivate any existing setuptools installation first
- fake_setuptools()
- try:
- import setuptools
- # we need to check if the installed setuptools
- # is from Distribute or from setuptools
- if not hasattr(setuptools, '_distribute'):
- # now we are ready to install distribute
- raise ImportError
- except ImportError:
- egg = None
- try:
- egg = download_setuptools(version, delay=0)
- sys.path.insert(0, egg)
- import setuptools
- if not hasattr(setuptools, '_distribute'):
- placeholder = os.path.split(os.path.dirname(setuptools.__file__))[0]
- if not placeholder.endswith('.egg'):
- res = _remove_flat_installation(placeholder)
- if res:
- _relaunch()
- print >> sys.stderr, (
- "The patch didn't work, Setuptools is still active.\n"
- "Possible reason: your have a system-wide setuptools installed "
- "and you are in a virtualenv.\n"
- "If you are inside a virtualenv, make sure you used the --no-site-packages option"
- )
- sys.exit(2)
- dist = _easy_install(argv, egg)
- after_install(dist)
- return
- #from setuptools.command import easy_install
- #try:
- # return easy_install.main(list(argv)+['-v']+[egg])
- #except DistutilsError:
- # return sys.exit(2)
- finally:
- if egg and os.path.exists(egg):
- os.unlink(egg)
- else:
- if setuptools.__version__ == '0.0.1':
- print >>sys.stderr, (
- "You have an obsolete version of setuptools installed. Please\n"
- "remove it from your system entirely before rerunning this script."
- )
- sys.exit(2)
-
- req = "distribute>="+version
- import pkg_resources
- try:
- pkg_resources.require(req)
- except pkg_resources.VersionConflict:
- try:
- _easy_install(argv, [download_setuptools(delay=0)])
- #from setuptools.command.easy_install import main
- except ImportError:
- from easy_install import main
- main(list(argv)+[download_setuptools(delay=0)])
- sys.exit(0) # try to force an exit
- else:
- if argv:
- _easy_install(argv)
- #from setuptools.command.easy_install import main
- #main(argv)
- else:
- print "distribute version",version,"or greater has been installed."
- print '(Run "distribute_setup.py -U distribute" to reinstall or upgrade.)'
+ tarball = download_setuptools()
+ _install(tarball)
if __name__ == '__main__':
main(sys.argv[1:])