Commit 6bf102a9 authored by Hanno Schlichting's avatar Hanno Schlichting

update to a recent version of ZTK master / buildout / setuptools

parent fc06c568
...@@ -18,7 +18,11 @@ The script accepts buildout command-line options, so you can ...@@ -18,7 +18,11 @@ The script accepts buildout command-line options, so you can
use the -c option to specify an alternate configuration file. use the -c option to specify an alternate configuration file.
""" """
import os, shutil, sys, tempfile import os
import shutil
import sys
import tempfile
from optparse import OptionParser from optparse import OptionParser
tmpeggs = tempfile.mkdtemp() tmpeggs = tempfile.mkdtemp()
...@@ -31,8 +35,8 @@ Bootstraps a buildout-based project. ...@@ -31,8 +35,8 @@ Bootstraps a buildout-based project.
Simply run this script in a directory containing a buildout.cfg, using the Simply run this script in a directory containing a buildout.cfg, using the
Python that you want bin/buildout to use. Python that you want bin/buildout to use.
Note that by using --setup-source and --download-base to point to Note that by using --find-links to point to local resources, you can keep
local resources, you can keep this script from going over the network. this script from going over the network.
''' '''
parser = OptionParser(usage=usage) parser = OptionParser(usage=usage)
...@@ -52,37 +56,46 @@ parser.add_option("-c", "--config-file", ...@@ -52,37 +56,46 @@ parser.add_option("-c", "--config-file",
"file to be used.")) "file to be used."))
parser.add_option("-f", "--find-links", parser.add_option("-f", "--find-links",
help=("Specify a URL to search for buildout releases")) help=("Specify a URL to search for buildout releases"))
parser.add_option("--allow-site-packages",
action="store_true", default=False,
help=("Let bootstrap.py use existing site packages"))
options, args = parser.parse_args() options, args = parser.parse_args()
###################################################################### ######################################################################
# load/install distribute # load/install setuptools
to_reload = False
try: try:
import pkg_resources, setuptools if options.allow_site_packages:
if not hasattr(pkg_resources, '_distribute'): import setuptools
to_reload = True import pkg_resources
raise ImportError
except ImportError:
ez = {}
try:
from urllib.request import urlopen from urllib.request import urlopen
except ImportError: except ImportError:
from urllib2 import urlopen from urllib2 import urlopen
exec(urlopen('http://python-distribute.org/distribute_setup.py').read(), ez) ez = {}
setup_args = dict(to_dir=tmpeggs, download_delay=0, no_fake=True) exec(urlopen('https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py'
ez['use_setuptools'](**setup_args) ).read(), ez)
if not options.allow_site_packages:
if to_reload: # ez_setup imports site, which adds site packages
reload(pkg_resources) # this will remove them from the path to ensure that incompatible versions
import pkg_resources # of setuptools are not in the path
# This does not (always?) update the default working set. We will import site
# do it. # inside a virtualenv, there is no 'getsitepackages'.
for path in sys.path: # We can't remove these reliably
if hasattr(site, 'getsitepackages'):
for sitepackage_path in site.getsitepackages():
sys.path[:] = [x for x in sys.path if sitepackage_path not in x]
setup_args = dict(to_dir=tmpeggs, download_delay=0)
ez['use_setuptools'](**setup_args)
import setuptools
import pkg_resources
# This does not (always?) update the default working set. We will
# do it.
for path in sys.path:
if path not in pkg_resources.working_set.entries: if path not in pkg_resources.working_set.entries:
pkg_resources.working_set.add_entry(path) pkg_resources.working_set.add_entry(path)
...@@ -104,8 +117,8 @@ find_links = os.environ.get( ...@@ -104,8 +117,8 @@ find_links = os.environ.get(
if find_links: if find_links:
cmd.extend(['-f', find_links]) cmd.extend(['-f', find_links])
distribute_path = ws.find( setuptools_path = ws.find(
pkg_resources.Requirement.parse('distribute')).location pkg_resources.Requirement.parse('setuptools')).location
requirement = 'zc.buildout' requirement = 'zc.buildout'
version = options.version version = options.version
...@@ -113,13 +126,14 @@ if version is None and not options.accept_buildout_test_releases: ...@@ -113,13 +126,14 @@ if version is None and not options.accept_buildout_test_releases:
# Figure out the most recent final version of zc.buildout. # Figure out the most recent final version of zc.buildout.
import setuptools.package_index import setuptools.package_index
_final_parts = '*final-', '*final' _final_parts = '*final-', '*final'
def _final_version(parsed_version): def _final_version(parsed_version):
for part in parsed_version: for part in parsed_version:
if (part[:1] == '*') and (part not in _final_parts): if (part[:1] == '*') and (part not in _final_parts):
return False return False
return True return True
index = setuptools.package_index.PackageIndex( index = setuptools.package_index.PackageIndex(
search_path=[distribute_path]) search_path=[setuptools_path])
if find_links: if find_links:
index.add_find_links((find_links,)) index.add_find_links((find_links,))
req = pkg_resources.Requirement.parse(requirement) req = pkg_resources.Requirement.parse(requirement)
...@@ -142,7 +156,7 @@ if version: ...@@ -142,7 +156,7 @@ if version:
cmd.append(requirement) cmd.append(requirement)
import subprocess import subprocess
if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=distribute_path)) != 0: if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0:
raise Exception( raise Exception(
"Failed to execute command:\n%s", "Failed to execute command:\n%s",
repr(cmd)[1:-1]) repr(cmd)[1:-1])
......
[buildout] [buildout]
extends = http://svn.zope.org/zopetoolkit/trunk/ztk-versions.cfg?revision=130246 extends = http://svn.zope.org/zopetoolkit/trunk/ztk-versions.cfg?revision=130401
versions = versions versions = versions
[versions] [versions]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment