virtualenv/setup/project-boot.py
author veltr
Wed, 05 Dec 2012 13:54:59 +0100
changeset 115 e48bb5d43ac2
parent 99 a65807bd3d04
permissions -rw-r--r--
Clicking outside "popins" now hides them
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
99
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/env python2.6
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
## WARNING: This file is generated
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
#!/usr/bin/env python
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
"""Create a "virtual" Python installation
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
virtualenv_version = "1.4.9"
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
import sys
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
import os
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
import optparse
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
import re
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
import shutil
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
import logging
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
import tempfile
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
import distutils.sysconfig
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    import subprocess
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
except ImportError, e:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    if sys.version_info <= (2, 3):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        print 'ERROR: %s' % e
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        print 'ERROR: this script requires Python 2.4 or greater; or at least the subprocess module.'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        print 'If you copy subprocess.py from a newer version of Python this script will probably work'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        sys.exit(101)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        raise
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    set
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
except NameError:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    from sets import Set as set
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
join = os.path.join
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
is_jython = sys.platform.startswith('java')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
expected_exe = is_jython and 'jython' or 'python'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
REQUIRED_MODULES = ['os', 'posix', 'posixpath', 'nt', 'ntpath', 'genericpath',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
                    'fnmatch', 'locale', 'encodings', 'codecs',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
                    'stat', 'UserDict', 'readline', 'copy_reg', 'types',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
                    're', 'sre', 'sre_parse', 'sre_constants', 'sre_compile',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
                    'lib-dynload', 'config', 'zlib']
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
if sys.version_info[:2] >= (2, 6):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    REQUIRED_MODULES.extend(['warnings', 'linecache', '_abcoll', 'abc'])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
if sys.version_info[:2] <= (2, 3):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    REQUIRED_MODULES.extend(['sets', '__future__'])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
class Logger(object):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    Logging object for use in command-line script.  Allows ranges of
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    levels, to avoid some redundancy of displayed information.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    DEBUG = logging.DEBUG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    INFO = logging.INFO
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    NOTIFY = (logging.INFO+logging.WARN)/2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    WARN = WARNING = logging.WARN
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    ERROR = logging.ERROR
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    FATAL = logging.FATAL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    LEVELS = [DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    def __init__(self, consumers):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        self.consumers = consumers
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        self.indent = 0
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        self.in_progress = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        self.in_progress_hanging = False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    def debug(self, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        self.log(self.DEBUG, msg, *args, **kw)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    def info(self, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        self.log(self.INFO, msg, *args, **kw)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    def notify(self, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        self.log(self.NOTIFY, msg, *args, **kw)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    def warn(self, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        self.log(self.WARN, msg, *args, **kw)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    def error(self, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        self.log(self.WARN, msg, *args, **kw)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    def fatal(self, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        self.log(self.FATAL, msg, *args, **kw)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
    def log(self, level, msg, *args, **kw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        if args:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            if kw:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                raise TypeError(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                    "You may give positional or keyword arguments, not both")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        args = args or kw
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        rendered = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        for consumer_level, consumer in self.consumers:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
            if self.level_matches(level, consumer_level):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
                if (self.in_progress_hanging
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                    and consumer in (sys.stdout, sys.stderr)):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
                    self.in_progress_hanging = False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
                    sys.stdout.write('\n')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                    sys.stdout.flush()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                if rendered is None:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                    if args:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                        rendered = msg % args
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                        rendered = msg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
                    rendered = ' '*self.indent + rendered
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
                if hasattr(consumer, 'write'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                    consumer.write(rendered+'\n')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                    consumer(rendered)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    def start_progress(self, msg):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        assert not self.in_progress, (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
            "Tried to start_progress(%r) while in_progress %r"
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
            % (msg, self.in_progress))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        if self.level_matches(self.NOTIFY, self._stdout_level()):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
            sys.stdout.write(msg)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
            sys.stdout.flush()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            self.in_progress_hanging = True
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
            self.in_progress_hanging = False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        self.in_progress = msg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    def end_progress(self, msg='done.'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        assert self.in_progress, (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
            "Tried to end_progress without start_progress")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        if self.stdout_level_matches(self.NOTIFY):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            if not self.in_progress_hanging:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
                # Some message has been printed out since start_progress
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                sys.stdout.write('...' + self.in_progress + msg + '\n')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                sys.stdout.flush()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
            else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                sys.stdout.write(msg + '\n')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                sys.stdout.flush()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
        self.in_progress = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        self.in_progress_hanging = False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
    def show_progress(self):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        """If we are in a progress scope, and no log messages have been
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        shown, write out another '.'"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        if self.in_progress_hanging:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
            sys.stdout.write('.')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
            sys.stdout.flush()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    def stdout_level_matches(self, level):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
        """Returns true if a message at this level will go to stdout"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        return self.level_matches(level, self._stdout_level())
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
    def _stdout_level(self):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        """Returns the level that stdout runs at"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
        for level, consumer in self.consumers:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
            if consumer is sys.stdout:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
                return level
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
        return self.FATAL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    def level_matches(self, level, consumer_level):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        >>> l = Logger()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
        >>> l.level_matches(3, 4)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
        >>> l.level_matches(3, 2)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
        True
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
        >>> l.level_matches(slice(None, 3), 3)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
        False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        >>> l.level_matches(slice(None, 3), 2)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
        True
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        >>> l.level_matches(slice(1, 3), 1)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        True
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
        >>> l.level_matches(slice(2, 3), 1)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
        False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
        """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        if isinstance(level, slice):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
            start, stop = level.start, level.stop
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
            if start is not None and start > consumer_level:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
                return False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
            if stop is not None or stop <= consumer_level:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
                return False
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
            return True
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
            return level >= consumer_level
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
    #@classmethod
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    def level_for_integer(cls, level):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
        levels = cls.LEVELS
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
        if level < 0:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
            return levels[0]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
        if level >= len(levels):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
            return levels[-1]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
        return levels[level]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    level_for_integer = classmethod(level_for_integer)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
def mkdir(path):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    if not os.path.exists(path):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        logger.info('Creating %s', path)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
        os.makedirs(path)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        logger.info('Directory %s already exists', path)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
def copyfile(src, dest, symlink=True):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    if not os.path.exists(src):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        # Some bad symlink in the src
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        logger.warn('Cannot find file %s (bad symlink)', src)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
    if os.path.exists(dest):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
        logger.debug('File %s already exists', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
    if not os.path.exists(os.path.dirname(dest)):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        logger.info('Creating parent directories for %s' % os.path.dirname(dest))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
        os.makedirs(os.path.dirname(dest))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    if symlink and hasattr(os, 'symlink'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
        logger.info('Symlinking %s', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
        os.symlink(os.path.abspath(src), dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
        logger.info('Copying to %s', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
        if os.path.isdir(src):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
            shutil.copytree(src, dest, True)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
            shutil.copy2(src, dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
def writefile(dest, content, overwrite=True):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
    if not os.path.exists(dest):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
        logger.info('Writing %s', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
        f = open(dest, 'wb')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
        f.write(content)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
        f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
        f = open(dest, 'rb')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        c = f.read()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
        if c != content:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
            if not overwrite:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
                logger.notify('File %s exists with different content; not overwriting', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
                return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
            logger.notify('Overwriting %s with new content', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
            f = open(dest, 'wb')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
            f.write(content)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
            f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
            logger.info('Content %s already in place', dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
def rmtree(dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
    if os.path.exists(dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
        logger.notify('Deleting tree %s', dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
        shutil.rmtree(dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
        logger.info('Do not need to delete %s; already gone', dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
def make_exe(fn):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
    if hasattr(os, 'chmod'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
        oldmode = os.stat(fn).st_mode & 07777
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
        newmode = (oldmode | 0555) & 07777
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
        os.chmod(fn, newmode)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        logger.info('Changed mode of %s to %s', fn, oct(newmode))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
def _find_file(filename, dirs):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    for dir in dirs:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
        if os.path.exists(join(dir, filename)):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
            return join(dir, filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    return filename
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
def _install_req(py_executable, unzip=False, distribute=False):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
    if not distribute:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
        setup_fn = 'setuptools-0.6c11-py%s.egg' % sys.version[:3]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
        project_name = 'setuptools'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        bootstrap_script = EZ_SETUP_PY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
        source = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
        setup_fn = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
        source = 'distribute-0.6.8.tar.gz'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        project_name = 'distribute'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        bootstrap_script = DISTRIBUTE_SETUP_PY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
            # check if the global Python has distribute installed or plain
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
            # setuptools
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
            import pkg_resources
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
            if not hasattr(pkg_resources, '_distribute'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
                location = os.path.dirname(pkg_resources.__file__)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
                logger.notify("A globally installed setuptools was found (in %s)" % location)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
                logger.notify("Use the --no-site-packages option to use distribute in "
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
                              "the virtualenv.")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
        except ImportError:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
            pass
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
    search_dirs = file_search_dirs()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
    if setup_fn is not None:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        setup_fn = _find_file(setup_fn, search_dirs)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    if source is not None:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
        source = _find_file(source, search_dirs)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
    if is_jython and os._name == 'nt':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
        # Jython's .bat sys.executable can't handle a command line
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
        # argument with newlines
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
        fd, ez_setup = tempfile.mkstemp('.py')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
        os.write(fd, bootstrap_script)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
        os.close(fd)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
        cmd = [py_executable, ez_setup]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
        cmd = [py_executable, '-c', bootstrap_script]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    if unzip:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
        cmd.append('--always-unzip')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
    env = {}
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
    if logger.stdout_level_matches(logger.DEBUG):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
        cmd.append('-v')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
    old_chdir = os.getcwd()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
    if setup_fn is not None and os.path.exists(setup_fn):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
        logger.info('Using existing %s egg: %s' % (project_name, setup_fn))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
        cmd.append(setup_fn)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
        if os.environ.get('PYTHONPATH'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
            env['PYTHONPATH'] = setup_fn + os.path.pathsep + os.environ['PYTHONPATH']
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
            env['PYTHONPATH'] = setup_fn
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
        # the source is found, let's chdir
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
        if source is not None and os.path.exists(source):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
            os.chdir(os.path.dirname(source))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
            logger.info('No %s egg found; downloading' % project_name)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
        cmd.extend(['--always-copy', '-U', project_name])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
    logger.start_progress('Installing %s...' % project_name)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
    logger.indent += 2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
    cwd = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
    if project_name == 'distribute':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
        env['DONT_PATCH_SETUPTOOLS'] = 'true'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
    def _filter_ez_setup(line):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
        return filter_ez_setup(line, project_name)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
    if not os.access(os.getcwd(), os.W_OK):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
        cwd = tempfile.mkdtemp()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
        if source is not None and os.path.exists(source):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
            # the current working dir is hostile, let's copy the
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
            # tarball to a temp dir
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
            target = os.path.join(cwd, os.path.split(source)[-1])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
            shutil.copy(source, target)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
    try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
        call_subprocess(cmd, show_stdout=False,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
                        filter_stdout=_filter_ez_setup,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
                        extra_env=env,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
                        cwd=cwd)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
    finally:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
        logger.indent -= 2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
        logger.end_progress()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
        if os.getcwd() != old_chdir:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
            os.chdir(old_chdir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
        if is_jython and os._name == 'nt':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
            os.remove(ez_setup)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
def file_search_dirs():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
    here = os.path.dirname(os.path.abspath(__file__))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    dirs = ['.', here,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
            join(here, 'virtualenv_support')]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    if os.path.splitext(os.path.dirname(__file__))[0] != 'virtualenv':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
        # Probably some boot script; just in case virtualenv is installed...
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
        try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
            import virtualenv
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
        except ImportError:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
            pass
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
            dirs.append(os.path.join(os.path.dirname(virtualenv.__file__), 'virtualenv_support'))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    return [d for d in dirs if os.path.isdir(d)]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
def install_setuptools(py_executable, unzip=False):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    _install_req(py_executable, unzip)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
def install_distribute(py_executable, unzip=False):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
    _install_req(py_executable, unzip, distribute=True)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
_pip_re = re.compile(r'^pip-.*(zip|tar.gz|tar.bz2|tgz|tbz)$', re.I)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
def install_pip(py_executable):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    filenames = []
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    for dir in file_search_dirs():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
        filenames.extend([join(dir, fn) for fn in os.listdir(dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
                          if _pip_re.search(fn)])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
    filenames = [(os.path.basename(filename).lower(), i, filename) for i, filename in enumerate(filenames)]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
    filenames.sort()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
    filenames = [filename for basename, i, filename in filenames]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
    if not filenames:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
        filename = 'pip'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
        filename = filenames[-1]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
    easy_install_script = 'easy_install'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
    if sys.platform == 'win32':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
        easy_install_script = 'easy_install-script.py'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
    cmd = [py_executable, join(os.path.dirname(py_executable), easy_install_script), filename]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
    if filename == 'pip':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
        logger.info('Installing pip from network...')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
        logger.info('Installing %s' % os.path.basename(filename))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
    logger.indent += 2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
    def _filter_setup(line):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
        return filter_ez_setup(line, 'pip')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
    try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
        call_subprocess(cmd, show_stdout=False,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
                        filter_stdout=_filter_setup)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    finally:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
        logger.indent -= 2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
def filter_ez_setup(line, project_name='setuptools'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
    if not line.strip():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
        return Logger.DEBUG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
    if project_name == 'distribute':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
        for prefix in ('Extracting', 'Now working', 'Installing', 'Before',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
                       'Scanning', 'Setuptools', 'Egg', 'Already',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
                       'running', 'writing', 'reading', 'installing',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
                       'creating', 'copying', 'byte-compiling', 'removing',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
                       'Processing'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
            if line.startswith(prefix):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
                return Logger.DEBUG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
        return Logger.DEBUG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
    for prefix in ['Reading ', 'Best match', 'Processing setuptools',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
                   'Copying setuptools', 'Adding setuptools',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
                   'Installing ', 'Installed ']:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
        if line.startswith(prefix):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
            return Logger.DEBUG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
    return Logger.INFO
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
def main():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
    parser = optparse.OptionParser(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
        version=virtualenv_version,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
        usage="%prog [OPTIONS] DEST_DIR")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
        '-v', '--verbose',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
        action='count',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
        dest='verbose',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
        default=0,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
        help="Increase verbosity")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
        '-q', '--quiet',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
        action='count',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
        dest='quiet',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
        default=0,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
        help='Decrease verbosity')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
        '-p', '--python',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
        dest='python',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
        metavar='PYTHON_EXE',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
        help='The Python interpreter to use, e.g., --python=python2.5 will use the python2.5 '
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
        'interpreter to create the new environment.  The default is the interpreter that '
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
        'virtualenv was installed with (%s)' % sys.executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
        '--clear',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
        dest='clear',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
        action='store_true',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
        help="Clear out the non-root install and start from scratch")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
        '--no-site-packages',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
        dest='no_site_packages',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
        action='store_true',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
        help="Don't give access to the global site-packages dir to the "
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
             "virtual environment")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
        '--unzip-setuptools',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
        dest='unzip_setuptools',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
        action='store_true',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
        help="Unzip Setuptools or Distribute when installing it")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
        '--relocatable',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
        dest='relocatable',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
        action='store_true',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
        help='Make an EXISTING virtualenv environment relocatable.  '
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
        'This fixes up scripts and makes all .pth files relative')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
        '--distribute',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
        dest='use_distribute',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
        action='store_true',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
        help='Use Distribute instead of Setuptools. Set environ variable '
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
        'VIRTUALENV_USE_DISTRIBUTE to make it the default ')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
    parser.add_option(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
        '--prompt=',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
        dest='prompt',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
        help='Provides an alternative prompt prefix for this environment')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
    if 'extend_parser' in globals():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
        extend_parser(parser)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
    options, args = parser.parse_args()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
    global logger
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
    if 'adjust_options' in globals():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
        adjust_options(options, args)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
    verbosity = options.verbose - options.quiet
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
    logger = Logger([(Logger.level_for_integer(2-verbosity), sys.stdout)])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    if options.python and not os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
        env = os.environ.copy()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
        interpreter = resolve_interpreter(options.python)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
        if interpreter == sys.executable:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
            logger.warn('Already using interpreter %s' % interpreter)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
            logger.notify('Running virtualenv with interpreter %s' % interpreter)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
            env['VIRTUALENV_INTERPRETER_RUNNING'] = 'true'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
            file = __file__
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
            if file.endswith('.pyc'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
                file = file[:-1]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
            popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
            raise SystemExit(popen.wait())
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
    if not args:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
        print 'You must provide a DEST_DIR'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
        parser.print_help()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
        sys.exit(2)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
    if len(args) > 1:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
        print 'There must be only one argument: DEST_DIR (you gave %s)' % (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
            ' '.join(args))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
        parser.print_help()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
        sys.exit(2)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
    home_dir = args[0]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
    if os.environ.get('WORKING_ENV'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
        logger.fatal('ERROR: you cannot run virtualenv while in a workingenv')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
        logger.fatal('Please deactivate your workingenv, then re-run this script')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
        sys.exit(3)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
    if 'PYTHONHOME' in os.environ:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
        logger.warn('PYTHONHOME is set.  You *must* activate the virtualenv before using it')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
        del os.environ['PYTHONHOME']
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    if options.relocatable:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
        make_environment_relocatable(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
    create_environment(home_dir, site_packages=not options.no_site_packages, clear=options.clear,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
                       unzip_setuptools=options.unzip_setuptools,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
                       use_distribute=options.use_distribute,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
                       prompt=options.prompt)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
    if 'after_install' in globals():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
        after_install(options, home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
def call_subprocess(cmd, show_stdout=True,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
                    filter_stdout=None, cwd=None,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
                    raise_on_returncode=True, extra_env=None):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
    cmd_parts = []
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
    for part in cmd:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
        if len(part) > 40:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
            part = part[:30]+"..."+part[-5:]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
        if ' ' in part or '\n' in part or '"' in part or "'" in part:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
            part = '"%s"' % part.replace('"', '\\"')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
        cmd_parts.append(part)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
    cmd_desc = ' '.join(cmd_parts)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
    if show_stdout:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
        stdout = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
        stdout = subprocess.PIPE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
    logger.debug("Running command %s" % cmd_desc)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
    if extra_env:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
        env = os.environ.copy()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
        env.update(extra_env)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
        env = None
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
    try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
        proc = subprocess.Popen(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
            cmd, stderr=subprocess.STDOUT, stdin=None, stdout=stdout,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
            cwd=cwd, env=env)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
    except Exception, e:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
        logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
            "Error %s while executing command %s" % (e, cmd_desc))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
        raise
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
    all_output = []
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
    if stdout is not None:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
        stdout = proc.stdout
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
        while 1:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
            line = stdout.readline()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
            if not line:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
                break
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
            line = line.rstrip()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
            all_output.append(line)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
            if filter_stdout:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
                level = filter_stdout(line)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
                if isinstance(level, tuple):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
                    level, line = level
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
                logger.log(level, line)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
                if not logger.stdout_level_matches(level):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
                    logger.show_progress()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
            else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
                logger.info(line)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
        proc.communicate()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
    proc.wait()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
    if proc.returncode:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
        if raise_on_returncode:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
            if all_output:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
                logger.notify('Complete output from command %s:' % cmd_desc)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
                logger.notify('\n'.join(all_output) + '\n----------------------------------------')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
            raise OSError(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
                "Command %s failed with error code %s"
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
                % (cmd_desc, proc.returncode))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
            logger.warn(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
                "Command %s had error code %s"
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
                % (cmd_desc, proc.returncode))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
def create_environment(home_dir, site_packages=True, clear=False,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
                       unzip_setuptools=False, use_distribute=False,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
                       prompt=None):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
    Creates a new environment in ``home_dir``.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
    If ``site_packages`` is true (the default) then the global
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
    ``site-packages/`` directory will be on the path.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
    If ``clear`` is true (default False) then the environment will
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
    first be cleared.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
    home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
    py_executable = os.path.abspath(install_python(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
        home_dir, lib_dir, inc_dir, bin_dir,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
        site_packages=site_packages, clear=clear))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
    install_distutils(lib_dir, home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
    if use_distribute or os.environ.get('VIRTUALENV_USE_DISTRIBUTE'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
        install_distribute(py_executable, unzip=unzip_setuptools)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
        install_setuptools(py_executable, unzip=unzip_setuptools)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
    install_pip(py_executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
    install_activate(home_dir, bin_dir, prompt)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
def path_locations(home_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
    """Return the path locations for the environment (where libraries are,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
    where scripts go, etc)"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
    # XXX: We'd use distutils.sysconfig.get_python_inc/lib but its
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
    # prefix arg is broken: http://bugs.python.org/issue3386
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
    if sys.platform == 'win32':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
        # Windows has lots of problems with executables with spaces in
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
        # the name; this function will remove them (using the ~1
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
        # format):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
        mkdir(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
        if ' ' in home_dir:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
            try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
                import win32api
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
            except ImportError:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
                print 'Error: the path "%s" has a space in it' % home_dir
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
                print 'To handle these kinds of paths, the win32api module must be installed:'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
                print '  http://sourceforge.net/projects/pywin32/'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
                sys.exit(3)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
            home_dir = win32api.GetShortPathName(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
        lib_dir = join(home_dir, 'Lib')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
        inc_dir = join(home_dir, 'Include')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
        bin_dir = join(home_dir, 'Scripts')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
    elif is_jython:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
        lib_dir = join(home_dir, 'Lib')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
        inc_dir = join(home_dir, 'Include')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
        bin_dir = join(home_dir, 'bin')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
        lib_dir = join(home_dir, 'lib', py_version)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
        inc_dir = join(home_dir, 'include', py_version)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
        bin_dir = join(home_dir, 'bin')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
    return home_dir, lib_dir, inc_dir, bin_dir
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
    """Install just the base environment, no distutils patches etc"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
    if sys.executable.startswith(bin_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
        print 'Please use the *system* python to run this script'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
    if clear:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
        rmtree(lib_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
        ## FIXME: why not delete it?
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
        ## Maybe it should delete everything with #!/path/to/venv/python in it
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
        logger.notify('Not deleting %s', bin_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
    if hasattr(sys, 'real_prefix'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
        logger.notify('Using real prefix %r' % sys.real_prefix)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
        prefix = sys.real_prefix
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
        prefix = sys.prefix
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
    mkdir(lib_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
    fix_lib64(lib_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
    stdlib_dirs = [os.path.dirname(os.__file__)]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
    if sys.platform == 'win32':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
        stdlib_dirs.append(join(os.path.dirname(stdlib_dirs[0]), 'DLLs'))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
    elif sys.platform == 'darwin':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
        stdlib_dirs.append(join(stdlib_dirs[0], 'site-packages'))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
    for stdlib_dir in stdlib_dirs:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
        if not os.path.isdir(stdlib_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
            continue
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
        if hasattr(os, 'symlink'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
            logger.info('Symlinking Python bootstrap modules')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
            logger.info('Copying Python bootstrap modules')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
        logger.indent += 2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
        try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
            for fn in os.listdir(stdlib_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
                if fn != 'site-packages' and os.path.splitext(fn)[0] in REQUIRED_MODULES:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
                    copyfile(join(stdlib_dir, fn), join(lib_dir, fn))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
        finally:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
            logger.indent -= 2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
    mkdir(join(lib_dir, 'site-packages'))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
    writefile(join(lib_dir, 'site.py'), SITE_PY)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
    writefile(join(lib_dir, 'orig-prefix.txt'), prefix)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
    site_packages_filename = join(lib_dir, 'no-global-site-packages.txt')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
    if not site_packages:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
        writefile(site_packages_filename, '')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
        if os.path.exists(site_packages_filename):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
            logger.info('Deleting %s' % site_packages_filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
            os.unlink(site_packages_filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
    stdinc_dir = join(prefix, 'include', py_version)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
    if os.path.exists(stdinc_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
        copyfile(stdinc_dir, inc_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
        logger.debug('No include dir %s' % stdinc_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
    if sys.exec_prefix != prefix:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
        if sys.platform == 'win32':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
            exec_dir = join(sys.exec_prefix, 'lib')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
        elif is_jython:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
            exec_dir = join(sys.exec_prefix, 'Lib')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
            exec_dir = join(sys.exec_prefix, 'lib', py_version)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
        for fn in os.listdir(exec_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
            copyfile(join(exec_dir, fn), join(lib_dir, fn))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
    if is_jython:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
        # Jython has either jython-dev.jar and javalib/ dir, or just
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
        # jython.jar
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
        for name in 'jython-dev.jar', 'javalib', 'jython.jar':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
            src = join(prefix, name)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
            if os.path.exists(src):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
                copyfile(src, join(home_dir, name))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
        # XXX: registry should always exist after Jython 2.5rc1
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
        src = join(prefix, 'registry')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
        if os.path.exists(src):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
            copyfile(src, join(home_dir, 'registry'), symlink=False)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
        copyfile(join(prefix, 'cachedir'), join(home_dir, 'cachedir'),
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
                 symlink=False)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
    mkdir(bin_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
    py_executable = join(bin_dir, os.path.basename(sys.executable))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
    if 'Python.framework' in prefix:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
        if re.search(r'/Python(?:-32|-64)*$', py_executable):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
            # The name of the python executable is not quite what
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
            # we want, rename it.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
            py_executable = os.path.join(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
                    os.path.dirname(py_executable), 'python')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
    logger.notify('New %s executable in %s', expected_exe, py_executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
    if sys.executable != py_executable:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
        ## FIXME: could I just hard link?
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
        executable = sys.executable
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
        if sys.platform == 'cygwin' and os.path.exists(executable + '.exe'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
            # Cygwin misreports sys.executable sometimes
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
            executable += '.exe'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
            py_executable += '.exe'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
            logger.info('Executable actually exists in %s' % executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
        shutil.copyfile(executable, py_executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
        make_exe(py_executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
        if sys.platform == 'win32' or sys.platform == 'cygwin':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
            pythonw = os.path.join(os.path.dirname(sys.executable), 'pythonw.exe')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
            if os.path.exists(pythonw):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
                logger.info('Also created pythonw.exe')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
                shutil.copyfile(pythonw, os.path.join(os.path.dirname(py_executable), 'pythonw.exe'))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
    if os.path.splitext(os.path.basename(py_executable))[0] != expected_exe:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
        secondary_exe = os.path.join(os.path.dirname(py_executable),
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
                                     expected_exe)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
        py_executable_ext = os.path.splitext(py_executable)[1]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
        if py_executable_ext == '.exe':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
            # python2.4 gives an extension of '.4' :P
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
            secondary_exe += py_executable_ext
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
        if os.path.exists(secondary_exe):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
            logger.warn('Not overwriting existing %s script %s (you must use %s)'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
                        % (expected_exe, secondary_exe, py_executable))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
            logger.notify('Also creating executable in %s' % secondary_exe)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
            shutil.copyfile(sys.executable, secondary_exe)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
            make_exe(secondary_exe)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
    if 'Python.framework' in prefix:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
        logger.debug('MacOSX Python framework detected')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
        # Make sure we use the the embedded interpreter inside
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
        # the framework, even if sys.executable points to
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
        # the stub executable in ${sys.prefix}/bin
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
        # See http://groups.google.com/group/python-virtualenv/
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
        #                              browse_thread/thread/17cab2f85da75951
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
        original_python = os.path.join(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
            prefix, 'Resources/Python.app/Contents/MacOS/Python')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
        shutil.copy(original_python, py_executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
        # Copy the framework's dylib into the virtual
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
        # environment
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
        virtual_lib = os.path.join(home_dir, '.Python')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
        if os.path.exists(virtual_lib):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
            os.unlink(virtual_lib)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
        copyfile(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
            os.path.join(prefix, 'Python'),
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
            virtual_lib)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
        # And then change the install_name of the copied python executable
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
        try:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
            call_subprocess(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
                ["install_name_tool", "-change",
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
                 os.path.join(prefix, 'Python'),
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
                 '@executable_path/../.Python',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
                 py_executable])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
        except:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
            logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
                "Could not call install_name_tool -- you must have Apple's development tools installed")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
            raise
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
        # Some tools depend on pythonX.Y being present
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
        py_executable_version = '%s.%s' % (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
            sys.version_info[0], sys.version_info[1])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
        if not py_executable.endswith(py_executable_version):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
            # symlinking pythonX.Y > python
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
            pth = py_executable + '%s.%s' % (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
                    sys.version_info[0], sys.version_info[1])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
            if os.path.exists(pth):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
                os.unlink(pth)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
            os.symlink('python', pth)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
            # reverse symlinking python -> pythonX.Y (with --python)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
            pth = join(bin_dir, 'python')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
            if os.path.exists(pth):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
                os.unlink(pth)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
            os.symlink(os.path.basename(py_executable), pth)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
    if sys.platform == 'win32' and ' ' in py_executable:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
        # There's a bug with subprocess on Windows when using a first
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
        # argument that has a space in it.  Instead we have to quote
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
        # the value:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
        py_executable = '"%s"' % py_executable
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
    cmd = [py_executable, '-c', 'import sys; print sys.prefix']
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
    logger.info('Testing executable with %s %s "%s"' % tuple(cmd))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
    proc = subprocess.Popen(cmd,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
                            stdout=subprocess.PIPE)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
    proc_stdout, proc_stderr = proc.communicate()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
    proc_stdout = os.path.normcase(os.path.abspath(proc_stdout.strip()))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
    if proc_stdout != os.path.normcase(os.path.abspath(home_dir)):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
        logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
            'ERROR: The executable %s is not functioning' % py_executable)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
        logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
            'ERROR: It thinks sys.prefix is %r (should be %r)'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
            % (proc_stdout, os.path.normcase(os.path.abspath(home_dir))))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
        logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
            'ERROR: virtualenv is not compatible with this system or executable')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
        if sys.platform == 'win32':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
            logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
                'Note: some Windows users have reported this error when they installed Python for "Only this user".  The problem may be resolvable if you install Python "For all users".  (See https://bugs.launchpad.net/virtualenv/+bug/352844)')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
        sys.exit(100)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
        logger.info('Got sys.prefix result: %r' % proc_stdout)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
    pydistutils = os.path.expanduser('~/.pydistutils.cfg')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
    if os.path.exists(pydistutils):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
        logger.notify('Please make sure you remove any previous custom paths from '
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
                      'your %s file.' % pydistutils)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
    ## FIXME: really this should be calculated earlier
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
    return py_executable
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
def install_activate(home_dir, bin_dir, prompt=None):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
    if sys.platform == 'win32' or is_jython and os._name == 'nt':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
        files = {'activate.bat': ACTIVATE_BAT,
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
                 'deactivate.bat': DEACTIVATE_BAT}
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
        if os.environ.get('OS') == 'Windows_NT' and os.environ.get('OSTYPE') == 'cygwin':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
            files['activate'] = ACTIVATE_SH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
    else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
        files = {'activate': ACTIVATE_SH}
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
    files['activate_this.py'] = ACTIVATE_THIS
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
    vname = os.path.basename(os.path.abspath(home_dir))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
    for name, content in files.items():
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
        content = content.replace('__VIRTUAL_PROMPT__', prompt or '')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
        content = content.replace('__VIRTUAL_WINPROMPT__', prompt or '(%s)' % vname)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
        content = content.replace('__VIRTUAL_ENV__', os.path.abspath(home_dir))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
        content = content.replace('__VIRTUAL_NAME__', vname)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
        content = content.replace('__BIN_NAME__', os.path.basename(bin_dir))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
        writefile(os.path.join(bin_dir, name), content)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
def install_distutils(lib_dir, home_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
    distutils_path = os.path.join(lib_dir, 'distutils')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
    mkdir(distutils_path)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
    ## FIXME: maybe this prefix setting should only be put in place if
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
    ## there's a local distutils.cfg with a prefix setting?
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
    home_dir = os.path.abspath(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
    ## FIXME: this is breaking things, removing for now:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
    #distutils_cfg = DISTUTILS_CFG + "\n[install]\nprefix=%s\n" % home_dir
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
    writefile(os.path.join(distutils_path, '__init__.py'), DISTUTILS_INIT)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
    writefile(os.path.join(distutils_path, 'distutils.cfg'), DISTUTILS_CFG, overwrite=False)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
def fix_lib64(lib_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
    Some platforms (particularly Gentoo on x64) put things in lib64/pythonX.Y
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
    instead of lib/pythonX.Y.  If this is such a platform we'll just create a
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
    symlink so lib64 points to lib
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
    if [p for p in distutils.sysconfig.get_config_vars().values()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
        if isinstance(p, basestring) and 'lib64' in p]:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
        logger.debug('This system uses lib64; symlinking lib64 to lib')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
        assert os.path.basename(lib_dir) == 'python%s' % sys.version[:3], (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
            "Unexpected python lib dir: %r" % lib_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
        lib_parent = os.path.dirname(lib_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
        assert os.path.basename(lib_parent) == 'lib', (
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
            "Unexpected parent dir: %r" % lib_parent)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
        copyfile(lib_parent, os.path.join(os.path.dirname(lib_parent), 'lib64'))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
def resolve_interpreter(exe):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
    If the executable given isn't an absolute path, search $PATH for the interpreter
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
    if os.path.abspath(exe) != exe:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
        paths = os.environ.get('PATH', '').split(os.pathsep)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
        for path in paths:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
            if os.path.exists(os.path.join(path, exe)):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
                exe = os.path.join(path, exe)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
                break
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
    if not os.path.exists(exe):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
        logger.fatal('The executable %s (from --python=%s) does not exist' % (exe, exe))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
        sys.exit(3)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
    return exe
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
############################################################
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
## Relocating the environment:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
def make_environment_relocatable(home_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
    Makes the already-existing environment use relative paths, and takes out
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
    the #!-based environment selection in scripts.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
    home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
    activate_this = os.path.join(bin_dir, 'activate_this.py')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
    if not os.path.exists(activate_this):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
        logger.fatal(
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
            'The environment doesn\'t have a file %s -- please re-run virtualenv '
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
            'on this environment to update it' % activate_this)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
    fixup_scripts(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
    fixup_pth_and_egg_link(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
    ## FIXME: need to fix up distutils.cfg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
OK_ABS_SCRIPTS = ['python', 'python%s' % sys.version[:3],
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
                  'activate', 'activate.bat', 'activate_this.py']
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
def fixup_scripts(home_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
    # This is what we expect at the top of scripts:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
    shebang = '#!%s/bin/python' % os.path.normcase(os.path.abspath(home_dir))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
    # This is what we'll put:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
    new_shebang = '#!/usr/bin/env python%s' % sys.version[:3]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
    activate = "import os; activate_this=os.path.join(os.path.dirname(__file__), 'activate_this.py'); execfile(activate_this, dict(__file__=activate_this)); del os, activate_this"
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
    bin_dir = os.path.join(home_dir, 'bin')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
    home_dir, lib_dir, inc_dir, bin_dir = path_locations(home_dir)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
    for filename in os.listdir(bin_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
        filename = os.path.join(bin_dir, filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
        if not os.path.isfile(filename):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
            # ignore subdirs, e.g. .svn ones.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
            continue
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
        f = open(filename, 'rb')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
        lines = f.readlines()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
        f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
        if not lines:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
            logger.warn('Script %s is an empty file' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
            continue
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
        if not lines[0].strip().startswith(shebang):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
            if os.path.basename(filename) in OK_ABS_SCRIPTS:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
                logger.debug('Cannot make script %s relative' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
            elif lines[0].strip() == new_shebang:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
                logger.info('Script %s has already been made relative' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
            else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
                logger.warn('Script %s cannot be made relative (it\'s not a normal script that starts with %s)'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
                            % (filename, shebang))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
            continue
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
        logger.notify('Making script %s relative' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
        lines = [new_shebang+'\n', activate+'\n'] + lines[1:]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
        f = open(filename, 'wb')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
        f.writelines(lines)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
        f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
def fixup_pth_and_egg_link(home_dir, sys_path=None):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
    """Makes .pth and .egg-link files use relative paths"""
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
    home_dir = os.path.normcase(os.path.abspath(home_dir))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
    if sys_path is None:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
        sys_path = sys.path
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
    for path in sys_path:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
        if not path:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
            path = '.'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
        if not os.path.isdir(path):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
            continue
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
        path = os.path.normcase(os.path.abspath(path))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
        if not path.startswith(home_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
            logger.debug('Skipping system (non-environment) directory %s' % path)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
            continue
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
        for filename in os.listdir(path):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
            filename = os.path.join(path, filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
            if filename.endswith('.pth'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
                if not os.access(filename, os.W_OK):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
                    logger.warn('Cannot write .pth file %s, skipping' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
                else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
                    fixup_pth_file(filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
            if filename.endswith('.egg-link'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
                if not os.access(filename, os.W_OK):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
                    logger.warn('Cannot write .egg-link file %s, skipping' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
                else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
                    fixup_egg_link(filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
def fixup_pth_file(filename):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
    lines = []
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
    prev_lines = []
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
    f = open(filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
    prev_lines = f.readlines()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
    f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
    for line in prev_lines:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
        line = line.strip()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
        if (not line or line.startswith('#') or line.startswith('import ')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
            or os.path.abspath(line) != line):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
            lines.append(line)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
        else:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
            new_value = make_relative_path(filename, line)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
            if line != new_value:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
                logger.debug('Rewriting path %s as %s (in %s)' % (line, new_value, filename))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
            lines.append(new_value)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
    if lines == prev_lines:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
        logger.info('No changes to .pth file %s' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
    logger.notify('Making paths in .pth file %s relative' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
    f = open(filename, 'w')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
    f.write('\n'.join(lines) + '\n')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
    f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
def fixup_egg_link(filename):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
    f = open(filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
    link = f.read().strip()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
    f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
    if os.path.abspath(link) != link:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
        logger.debug('Link in %s already relative' % filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
        return
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
    new_link = make_relative_path(filename, link)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
    logger.notify('Rewriting link %s in %s as %s' % (link, filename, new_link))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
    f = open(filename, 'w')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
    f.write(new_link)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
    f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
def make_relative_path(source, dest, dest_is_directory=True):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
    Make a filename relative, where the filename is dest, and it is
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
    being referred to from the filename source.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
        >>> make_relative_path('/usr/share/something/a-file.pth',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
        ...                    '/usr/share/another-place/src/Directory')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
        '../another-place/src/Directory'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
        >>> make_relative_path('/usr/share/something/a-file.pth',
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
        ...                    '/home/user/src/Directory')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
        '../../../home/user/src/Directory'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
        >>> make_relative_path('/usr/share/a-file.pth', '/usr/share/')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
        './'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
    source = os.path.dirname(source)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
    if not dest_is_directory:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
        dest_filename = os.path.basename(dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
        dest = os.path.dirname(dest)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
    dest = os.path.normpath(os.path.abspath(dest))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
    source = os.path.normpath(os.path.abspath(source))
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
    dest_parts = dest.strip(os.path.sep).split(os.path.sep)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
    source_parts = source.strip(os.path.sep).split(os.path.sep)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
    while dest_parts and source_parts and dest_parts[0] == source_parts[0]:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
        dest_parts.pop(0)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
        source_parts.pop(0)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
    full_parts = ['..']*len(source_parts) + dest_parts
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
    if not dest_is_directory:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
        full_parts.append(dest_filename)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
    if not full_parts:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
        # Special case for the current directory (otherwise it'd be '')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
        return './'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
    return os.path.sep.join(full_parts)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
############################################################
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
## Bootstrap script creation:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
def create_bootstrap_script(extra_text, python_version=''):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
    Creates a bootstrap script, which is like this script but with
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
    extend_parser, adjust_options, and after_install hooks.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
    This returns a string that (written to disk of course) can be used
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
    as a bootstrap script with your own customizations.  The script
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
    will be the standard virtualenv.py script, with your extra text
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
    added (your extra text should be Python code).
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
    If you include these functions, they will be called:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
    ``extend_parser(optparse_parser)``:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
        You can add or remove options from the parser here.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
    ``adjust_options(options, args)``:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
        You can change options here, or change the args (if you accept
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
        different kinds of arguments, be sure you modify ``args`` so it is
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
        only ``[DEST_DIR]``).
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
    ``after_install(options, home_dir)``:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
        After everything is installed, this function is called.  This
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
        is probably the function you are most likely to use.  An
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
        example would be::
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
            def after_install(options, home_dir):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
                subprocess.call([join(home_dir, 'bin', 'easy_install'),
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
                                 'MyPackage'])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
                subprocess.call([join(home_dir, 'bin', 'my-package-script'),
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
                                 'setup', home_dir])
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
        This example immediately installs a package, and runs a setup
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
        script from that package.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
    If you provide something like ``python_version='2.4'`` then the
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
    script will start with ``#!/usr/bin/env python2.4`` instead of
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
    ``#!/usr/bin/env python``.  You can use this when the script must
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
    be run with a particular Python version.
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
    """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
    filename = __file__
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
    if filename.endswith('.pyc'):
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
        filename = filename[:-1]
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
    f = open(filename, 'rb')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
    content = f.read()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
    f.close()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
    py_exe = 'python%s' % python_version
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
    content = (('#!/usr/bin/env %s\n' % py_exe)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
               + '## WARNING: This file is generated\n'
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
               + content)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
    return content.replace('##EXT' 'END##', extra_text)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
import sys
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
sys.path.append('/Users/ymh/dev/workspace/platform/virtualenv/res/lib')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
sys.path.append('/Users/ymh/dev/workspace/platform/virtualenv/setup/res')
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
from res_create_env import generate_install_methods
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
adjust_options, extend_parser, after_install = generate_install_methods(path_locations, '/Users/ymh/dev/workspace/platform/virtualenv/res/src', Logger, call_subprocess)
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
##file site.py
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
SITE_PY = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
eJzVPGtz2ziS3/krsHSlKGVkOo/ZqS1nPFdO4sx4z5N4J5na3HpSWkqCJI4pkkOQlrVXd7/9+gGA
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
AEn5sbP74VSpWCKARqPRbzQYhuFpWcp8ITbFosmkUDKp5mtRJvVaiWVRiXqdVovDMqnqHTydXycr
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
qURdCLVTMfaKg+Dp7/wET8WndaoMCvAtaepik9TpPMmynUg3ZVHVciEWTZXmK5HmaZ0mWfoP6FHk
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
sXj6+zEIznMBK89SWYkbWSmAq0SxFJe7el3kYtSUuObn8R+Tl+OJUPMqLWvoUGmcgSLrpA5yKReA
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
JvRsFJAyreWhKuU8XaZz23FbNNlClFkyl+Lvf+elUdcoClSxkdu1rKTIARmAKQFWiXjA17QS82Ih
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
YyFey3mCE/DzllgBQ5vgnikkY16IrMhXsKZczqVSSbUTo1lTEyBCWSwKwCkFDOo0y4JtUV2rMWwp
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
7ccWHomE2cNfDLMHrBPn73MO4PghD37O09sJwwbuQXD1mtmmksv0ViQIFn7KWzmf6mejdCkW6XIJ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
NMjrMXYJGAElsnR2VNJ2fKt36LsjwspyZQJzSESZO3MjjYiD81okmQK2bUqkkSLM38pZmuRAjfwG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
pgOIQNJgaJ5Fqmo7D61OFACgwn2sQUo2Sow2SZoDs/6YzAntv6b5otiqMVEAdkuJXxtVu+sfDRAA
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
ejsEmAS4WWY3mzxLr2W2GwMCnwD7Sqomq1EgFmkl53VRpVIRAEBtJ+QtID0RSSU1CZkzjdxOiP5E
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
kzTHjUUBQ4HHRiTJMl01FUmYWKbAucAV7z78JN6evT4/fa95zABjmV1tAGeAQhvt4AQTiKNGVUdZ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
AQIdBxf4RySLBQrZCucHvNoOR/fudDCCtZdxd4yz4UB2vbl6GlhjDcqE5gpo3H/DkIlaA33+5579
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
DoLTfVShhfO37boAmcyTjRTrhPkLOSP4VsP5Li7r9SvgBoVwaiCVws1BBFOEByRxaTYqcilKYLEs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
zeU4AArNqK+/i8AK74v8kPa6wwkAoQpyaHSejWnGXMJC+7Beob4wnXe0Mt0lsPu8KSpSHMD/+Zx0
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
UZbk14SjIobibzO5SvMcEUJeCKKDiCZW1ylw4iIWF9SL9ILpJCLWXtwTRaIBXkKmA56Ut8mmzOSE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
xRd1691qhCaTtTB7nTHHQc+a1CvtWrvUQd57EX/ucB2hWa8rCcCbmSd0y6KYiBnobMKmTDYsXvW2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
IM4JBuSJBiFPUE8Yi9+BoqdKNRtpG5FXQLMQQwXLIsuKLZDsOAiEOMBOxij7zAmt0Ab/A1z8P5P1
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
fB0EzkwWsAaFyO8DhUDAJMhcc7VGwuM2zcpdJZPmrCmKaiErmuphxD5ixB/YGdcavC9qbdR4ubjL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
xSatUSXNtMlM2eLlUc368RWvG5YBllsRzUzXlk4bXF5WrpOZNC7JTC5REvQmvbLbDnMGA3OSLa7F
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
hq0MtAFZZMoWZFixoNJZ1pKcAIDBwpfkadlk1Ekhg4kEJtqUBH+ToEkvtLME7M1mOUCFxOZ7DvYH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
cPsHiNF2nQJ95gABNAxqKdi+WVpX6CC0+ijwjb4Zz/MDp54vtW3iKZdJmmkrn+TBOT08qyoS37ks
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
cdREE0PBCvMaXbtVDnREMQ/DMAiMO7RT5mthv02nsyZFezedBnW1OwbuECjkAUMX72GhNB23LKti
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
g80WvY+gD0Av44jgQFySopDs43rM9Aop4Grl0nRF8+twpEBVElz+dPbu/PPZR3EirlqtNOmqpC8w
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
51meAGeSUge+6EzbqiPoiborRfUl3oGFpn0Fk0SjSQJlUjfAfoD6p6qhZljG3GsMzt6fvr44m/78
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
8eyn6cfzT2eAIJgKGRzQktHCNeDzqRj4GxhroWJtIoPeCHrw+vSjfRBMUzX9lV3jExZ27QddHX/9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
RZyciOjX5CaJAvBF2q68Lz8SW37alRKG1vBnVKhxECzkElj4WiKjj56SfznmAUAX6Floe/drkeam
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
nZq9KUgORzQCcJhO51miFHaeTiOgFg0Y+MCAmJ1U5N4RDCx37tCxRgU/lQTq5jhkgv8NoJjMaByi
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
wSi6Q0wnYPvNPFGSe9HyYdx0irI/nY70hCAUxLbguLA4R8J0QdmvUvAPaftRF8xUkeFPhI/SRFKA
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
IQpqG9wkHYLEN0nWSDVyFgVEHI06ZESFlSpiCjD1I7Bo7daNx11qgsuDCGE3IF9WgDaqOpTDzwH4
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
DSD2JhjCgIljGKYZYvpn9tgJB3DdIlSbSnWgsJYRl2eX4uWzF4foFkDstrDU8bqjpUvzRtqHS9it
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
lawdhHlUNCH+Hrt0WaK+wqfHd8PcxHZn+qyw1FtcyU1xIxeALTKws8viJ2qBCBfWMU9gF0E/kl1l
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
PWb8rwTjOV49SAvaYKDehqCY/Tdbf8BBtcwVaAMOUInUOnpmk1JWxU2KRnu2041gc0BjoeUxDkLg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
bJzHZGhawA6BN5kjpbYyAp1UNez4Ed4IErX2otVuMYG7QHX5hb5e58U2n3JEeYKabzS2rIuCpZkX
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
O7RbcCDegS0AJAsIkFqiMRRwnQXK1iEgD8uH5QJlyUcHQGAwFYU9DiwTMtESOfrCaRHG+JUg4a0k
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
2t0bMwWFLIYYDiRqje0DoyUQEizOKjirGjSToayZbjCxQxKf6y5iDuV8AB0qxmC7RhoadzL0uzoG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
5SwuXKXkjEOz+PnzZ2YbtaY8BSI2w0WjKV6SxYrLHVi3FHSC8Ww460FssAUnEcA0SrOmOPwoipK9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
GtjPSy3bYIwhSqrr8vjoaLvdxjpKL6rVkVoe/fFP33zzp2esExcL4h9YjiMtOmUVH1Ebeobxt8YC
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
fWd2rsOPae5zI8EaSfJuyKVD/L5v0kUhjg/HVn8iF7e2Ev83/gQokKmZlKkMtA1bjJ6owyfxSxWK
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
J2Lk9h2N2TnQwaa1YkaDQhuoJBhRF2COwXmYF01eR44iVeIrsG4Q6S7krFlFdnLPRpofsFSU05Hl
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
gcPnXxADnzMMXxlTPEUtQWyR5svCIf1PzDYJuShaQyB50UT1otDdsBYzxF08XN6tw+cIjVlhqpA7
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
UCL8Lg8WQNu5Lzn40f4l2j3HvzQfzxAYSx8Y5tXe3QgFh3DBvZi4UudwNbqdIE1bVs2gYFzVCAoa
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
PLUZU1uDIxsZIUj0bkzQzBurewCdOhk4E2ebXYAe7jw9a9dlBccTQh44Ec/piQQ/9bjX9oy3tsky
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
Sox0eNSjCgP2NhrtdAF8OTIAJiKsfg65p96W8w+dTeE9GABWcC4FGWzZYyZscX3A8CAcYKee1d83
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
mmk8BAI3ifo/DDhhfMITVAqEqRz5jLuPwy1tOX/UQXi/wSGeMrtEEq32yFZXdwzK1J12aZnmqHqd
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
PYrnWQFOsVWKxEdtu+8rUCyCj4dsmRZATYaWHE6nE3L2PPmLdD/MQq0ajNfddAZitEkVGTck0xr+
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
A6+C0gSU0wFaEjQL5qFC5i/sXyBydr36yx72sIRGhnC77vNCegZDwzHtBwLJqJMaIAQ5kLAvi+Q5
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
sjbIgMOcDfJkG5rlXuEmGLECMXMMCGkZwJ0avfgGn8R4kEACipBvayVL8ZUIYfu6kvow1f0v5VKT
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
CBg5HchT0BmEEze74GQWTjqZBp+h/RwDHTmUBXDwDDweN1/usrlhWpv4AF/d19sWKVDIlAsJxy6q
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
Xwxh3JzsH06cHi2xzCSGobyJvJMRM9M4sNutQcOGGzDennfn0o/dhAWOHUWFeiE3txD+RVWq5oWK
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
ML7tpS7cj+aKPm0sthfpLIQ/3gaE4y8eJJl10cG8xSKptmkekYrRKzzxiddDxy7Ws0JHHyneOQJU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
MLV39K4CFqYzviNgeJRVCJtlpLRf3gd750pDC5eHh55fe3X88kt/+ZN9KRj7GSbm2W1dJQrpmTFZ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
mW2Rnn0Li2oRFpfkO31Kp09x0Y+vCgVhnvjw8bNAQnACc5vsHrf0liURm3vX5H0M6qB57iVXZ3XE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
LoAI6i1klKPo8Yz5cGQfu7g7FvYIII9imDs2xUDSfPLPwLlro2COw8Uux0RXV6jxA83ffD0dSF26
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
SH7zdXjPLB1iDIn9qOOr2Znp9FwMLtsMqWSSkTfgDKK0X97yju1TjlnlUoCmmezLgFuIH9NulHoL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
v9e9F9mZzwHRA+LgYvYrRJNKJ6BukjSjRDigcXiIes4EwhzbD+PjQbobZUwagU/xbDIYq6irZ7Ax
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
EUfe4/5ytOdyapKzAxGj+ZSJ6qNyoM+t22MX7yzaPXLbL/uDtvTfpLMeCchbTThAwAeuwRwJ/v9f
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
CSsrhqaV1bij9ZW8W88bYA9Qh3sckTvckP7UfIK0NM4Ey50ST1FAn4otnQNTsg2PDgDKgv2MATi4
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
jfo08U1TVXwmSHJeyuoQD8kmAktgjKdBlTV9MEfvZY2Y2G5zSl46BRPFkOqMdDrSriRqPclhkV0X
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
Jokh85u0grGgVUbRDx9+PIv6DKCnwUHD4Nx9NFzycDuFcB/BtJEmTvSYMUyhxwz556Uq8ji0q1zN
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
Oa1JEWqy9QnbywyayHJ4D+7JEXgneHz4iTHbfC3n11NJB7rIpjjUyZK+wWbExJ7z+oU1KllSdRCs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
ZJ41SCt29LCsa9nkc0qY1xLsua7BxJoMOqblhNAyS1ZiRIMXmIzQ3Ej5ipuk0t5OWRVY9SeadHG0
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
ShdC/tYkGQZ6crkEXPA0QzfFPD3lJMRbPmnmajAl502V1jsgQaIKfRhEh9JOx9mOFzrykOS8PxMQ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
j6mPxUdcNrYz4RaGXCZc9FPguEiMxHCAOa1D7qLn0J4XU5x1SsWTE0aqf1BLj4PuDAUACAEorD8c
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
61yO3yKpyT1xoj13iYpa0iOlG3sW5HEglNEYY1/+TT99RnR5aw+Wq/1Yru7GctXFcjWI5crHcnU3
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
lq5I4MbaNIaRhKFURjfPPVgF4WYheJqzZL7mflhUh8VzAFGUJqAzMsW1pV6ugw98CAipbecEkh62
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
VQ0pV+tVBSdFNUjkfjzV0MGjqQp2BlONhB7MSzE+277KDn/sURxTDc6MhrO8LZI6iT25WGXFDMTW
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
ojtpAUxEt8iDs2f5zXTG+b6OpQov/+vTDx/eY3cEFZrzbhqGm4iGBZcyeppUK9WXpjbYKIEdqadf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
mUHDNMCDB+ZaeJYD/u8tHfkj44gtHVkXogQPgGptbDe3IiWKOs916Yp+zkzOpw8nIszrsF3UHiKd
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
Xl6+Pf10GlISKPzf0BUYQ1tfOlx8TA/boe+/ud0txXEMCLXOpbTGz12TR+uWI+63sQZsx+199qXz
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
4MVDDPZgWOqv8t9KKdgSIFSs04GPIdSDg5/fFSb06GMYsVeS5Z61sLNi2xzZc1wUR/SHEtHdCfzT
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
L4wxpkAA7UKNTGTQBlMdpW/N6x0UdYA+0Nf73SFYN/TqRjI+Re0iBhxAh7K22373z8vcs9FTsn59
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
9v35+4vz15enn35wXEB05T58PHohzn78LKhgAA0Y+0QJnpXXWJoChsW9QSIWBfxrML2xaGpOSsKo
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
txcXOne/wTsEWFSKNieG51zXYqFxjoaznvahLkhBjDIdIDmXNah+gy5zYLy04YsCqtCFp3QHZIbO
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
aqNDL30Jx1zWoYPOGKQPOrukYBBccwRNVB5cm6iw4jMhfYFlAClto22lQEY5qN75sXMiYvLtXmKO
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
BsOTdrBW9FeRi2v0JVZllkIk9yqysqSHYb1Eyzj6oT3yZLyGNKAzHGbWHXnVe7FAq/Uq4rXp8eOW
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
0X5rAMOWwd7CunNJ9QJUGIvVTiLCTnxyEMlb+Gq3Xu+Bgg3Do58aN9EwXQqrTyC4FusUAgjgyTVY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
X4wTAEJnJ/wE9LGTHZAFHtdHbzaLw79EmiB+719+GeheV9nh30QJUZDg2pJogJhu57cQ+MQyFmcf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
3o0jRo5qNcVfGqy7BoeEsnyOtFNBC5+pTkdKZktdcODrA2zQfgI1d4ZXsqz08GHXOEIJeKJG5DU8
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
UYZ+Edb/WNgTXMq4AxpLyi1meDXLPZg2nwPxcS2zTFchn7+9OAPfEavcUYL4nOcMpuN8CR6q6mos
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
vjrWAYVHrtBcIRtX6MLSsfsi9roNZmZR5Gi0d1Jv94myn/1RvVRnlaTKRXuEy2ZYTp13jNwM22F2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
lrm73w3p7HYjuqPkMGNMLyuqa/Q5AzianiYcGEHEhJX0JtnMp4tpXptCtiydgzYFxQtqdQKigiTG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
62LEf0XO6d6iUuaWCTwsd1W6WteYUofBMVW4Y/cfTz9fnL+nkvEXL1vfe4BFJxQPTLi44AQrxzDn
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
AV/cajDkrel0iHN1E8JAHQR/uk1ctXDCE/TGcXoR/3Sb+JrPiRMP8gpATTVlV0gwDHCGDUlPKxGM
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
q42G8eNWhrWY+WAoI4m3CnQBgLu+Pj/anh2DQtkf0/iIs4plqWk4MoPdSqXuR69xWeLhymI03Ala
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
hyTMfGYw9LrXsq8myv30ZBFvHAJG/d7+HKZqqNdVL8dhtn3cQsGttrS/5E7G1Ok3z1GUgYgjd/DY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
ZbJhVay7Mwd61bU9YOJbja6RxEGFHv6Sh9rP8DCxxO5FK2Yg3W4gU4D5DKnvZTTgSaFdAAVCRaEj
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
R3In46cvvDU6NuH+NWrdBRbyB1CEukSTSv+LCjgRvvzG7iM3EVqoSo9F5PgrucwLWz+En+0afcvn
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
/hoHZYBSmSh2VZKv5IhhTQzMr3xi70nEkrb1OOYq7VRLaO4GD/V2D4P3xWL49MRg1uGDXr9ruetq
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
I5862GHwgoAPoUq2oN3Lph7xXu09LMDu+gh2FGGS5LdoD73uQU/DQr/rt4EzHPwwsYx7ae1V5/JJ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
ZBu0XzmvIGCqFR2WOFbYeIiuYW5t4ElrhUP7VFeM2N8DN3qcOlQXLqPgQvVWGOoOnVA/5LslfF0u
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
pdrl9uqDblvIG5kV4BZBxIWl6b/a0vRxPJjquAevFhUk6C/aHU/ya/IQ3/z1fCLevP8J/n8tP0BM
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
gdexJuJvgIB4U1QQW/GVQLqrjWXtNQdNRaPwzhZBozQ9X2tHZ+XSWwceCeh6e7/Q3uoHgTWG1Ybf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
pQAo8hrpmmxrHU0VOfw211z6bphxkYZ2JdSNSIb9xf9YMH+ke8brepOhonSSBO12XoUX52/O3n88
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
i+tb5CPzM3SSCH79C65IH5FWeBw0EfbJvMEnXxyP8QeZlQMOo465zEUCjLlEBG55aeMsvqqfWN86
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
qTBwFuVuUcxj7AlcxXeX6i14kGMnvLrXwnnmBWGNxvoQqXVj8TFQQ/zSlfgQOtIYvSYaSQglM7xE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
w4/jcNgGTQRlduHP0+vtwk0M69sQtMAupu2qR/5wq3TWTGcNz2UmQu3E7oS5I5elidrM5u7dqQ+5
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
0C9bAHVCmX65TJqsFjKHqILCXLr1DlrVve7EcsLcwrqc7gBRoiLbJjvl1JokSoQ4a0gXd/FIgnJm
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
EIX+mFyz7sV7WKLhO5oAnRCl2KFwhqpmvmY55nBAq7ve0fs2zV++iHpE5kk5Rpy3ThysE10mxmgl
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
a71+fjAaXz1vzSjlZefeZcd5CRbG5ZQDUJ/l06dPQ/Ef91t+RiXOiuIaXBKAPRQQigtq3mOz9eLs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
bvW9WtMSA0vO1/IKHnyh/LF93uSUnLtjKG2ItH8NjAj3JrL8aPp3bCCnrSo+auUefGSjbcfPeUqv
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
VMHkikSVq99Mg4kXI1DEkqAbokTN0zTiQB32Y1c0eE8JE22aX+QtcHyKYCbYimdEHGau0buikkXL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
PRadExES4JBKiHg2uuhJN3UAz+nlTqM5Pc/Tuq2xf+YeH+o7yrV9U4rmK5FsUTLMOjrEcK68eaza
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
epfFnSzqeevF/MpNuXVWyc334Q6sDZJWLJcGU3hoNmleyGpujCruWDpPaweM6YdweDC9IIYMUBwM
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
oBSChifDsLASbVv/YPfFxfQDnaQempl0AU1tX7rD6ZEk79SRxXE7PyViLCEt35ovY5jlPSV2tT/g
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
zSX+oNOKWGDtvRvAverV5PrOP1cwtC8CADj0nhmrIC07ejrCebmRhc9Mqx359hUBTj04hqeE201a
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
1U2STfW99Cm6bFN7tKzxtFeE7rz8Zn0WcKgLcDUPdbE0+A6mzgTpibWOplwd4nMdnsfutRv/hkpZ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
oK/3wtPjmPR9xpfgHQ2OPb8yFzceovLN9YFe5b2L5YSqeqJxt1ax1wtPECJd80Vp2SEP+1FTGliu
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
K/xQABkAgD/s+EVfdU6BnNI0rhvdl/rvAf3m67vAukpmsGiW8u2+4tEXl9wq1jbhz7JsfL41uJUo
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
GQtz1VQLHt/KQylhlW9vEptah+6FCGh++JLvWPADTtMinOzwiYq0m2048i5aWfzuIlXbKfinqKRH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
DdMK3TwsM1wn3ILi2pTHNhgybxLAFO3ILT7BT309WJad4MtqkKCH9XV01/J5/F1r1z0Cu3Jz9tJb
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
u3/9wqWBHrufX4ZowC6oJsSDKjotRtN/jehO9LHgcHpDf5b2tXmc5SAe1KhNNEtukrn7HQ+nD/mt
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
e219oHM5wt31zpr2Xhs27Nzn5D4380EcPrf33+h0daHZiw0WvYNlyvU6U7laqWmCr/CZkpdDZ8s9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
82Xs5jt6fYtM1M6YO7xRDyAMq+gqILfQD3YdPCl+lSAfzTpXpwVNTQVMTkWUShccvWrbCuBijlpp
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
vEmKcElTmEnMN6imKitwR0L9wjk+Mxwqs2qBmghqk6hrg7oZMdHvH8Mp+KDaXL/hWJldHI86QAiu
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
ynfe28E1gtOpbQN+edZeBEwnliFk3mwgPq7bO/D+2UQqvnNmoEtXuMFOjNSKXYdTXMRSyx8OUhil
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
2O9fafPveTd33P4bW5X2cLaiETr8fszFQkfKDTent/YdOO67Fxb0HkOKiPjdCcJ2a7nP3vuHrTAv
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
dCFFqIMWbtUvmeAXinFWBSuyHD4CuXevPPiVcVZnscNg0XCeuYqh/1YBvDVHhnboZUE9Lui/Fshn
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
hnZ+X29YZullovd0tlQ84R6Diqedbdy68ljEco8r7xcqPtKV9+A/0JXXr3YCa6Lx0fpgsHTxHp+f
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
1YT7nqSWEWDMFIiEyfbOW3aMPRy5hYDgkKe3oX17IOtM53aBMRPIkf0XaBAIfh+ScqumvPeVmHmH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
fG1fuujx9xcfXp9eEC2ml6dv/vP0ezoixrxVx2Y9ONbJi0Om9qFXkubGPfpYb2jyFtuBd4lxXbWG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
0GvvHYkMQBiuoR/a0K4ic5v3DejVIvcHAeJ3L7sDdZ/KHoTcc7503at7mNepHQv0Uy70Mb+ccxnz
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
yGRNWRzalKhpb7NYWkZ7Qf6+jXNKbvrqRDul+lVVexIQY1v4RTuAySvkL5u7MlW8NkPCjkr3nc5U
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
rYY3IMw9b5DCuXReN0RvGmJQtf/y6AqUXYI5eHYYJ/ZFjNSP83TKvmEU8/BzGRuCeFcQwv76XGFf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
yGwPFYKAFZ5+mQ4jYvSfzmzb06AnSlwd0mWnQ1Q2X+wv3DPt5P41xTOf2r6VQpnjUsx3Q+dlk7nn
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
OHZMbwA5f5QWLJZOdS1oviOgcyueCtgbfSZWiLOdiCBK1IcVWLBDdNRvlHGQR7vpYG9o9Uwc7rsK
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
414FEeL5/o6Lzm0TPeIFj1D3jFCNuXDgWGCsGdl3x0V8R5A5ryzoNRSe84HnGfrlh/D15ur5sU1K
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
Ir9js/uSA6R96Bj2q7aq/M4XHzmjiVeqCdUOYKHKuAv+S+iw5lLsD3B6NbJ7giBz4MSQQq99+Fzd
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
jPBeshp2EbV8dwwLEqMnakyLcqqKNe72ybi32FZl9WFwgfT9MHraD0AhlGHfBD/8rg1Qz890PDhr
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
6G1x1uHEa4WOPNAhuc8LPMJ4fS123eF0relBw6lc3BaZc4cu7+n9BrFmr4F7eYmO/bagu/KWB/bY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
fr4gNjz++QPG98sp7PAXdznUttfLwUsJ7MRiAQ4ez3YoZB7HYF1AYY5ITWPtppFwvPjdktHhpnZp
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
yBXo8FFND74JkgILcmKn2vJbYxD8H2/QG9E=
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
##file ez_setup.py
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
EZ_SETUP_PY = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
eJzNWmuP28YV/a5fwShYSIJlLt8PGXKRJi5gIEiDPAoU9lY7zxVrilRJyhu1yH/vmeFDJLVU2iIf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
ysDZXXJ45z7PuXekL784nqt9ns3m8/kf87wqq4IcjVJUp2OV52lpJFlZkTQlVYJFs/fSOOcn45lk
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
lVHlxqkUw7XqaWEcCftEnsSirB+ax/Pa+PuprLCApScujGqflDOZpEK9Uu0hhByEwZNCsCovzsZz
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
Uu2NpFobJOMG4Vy/oDZUa6v8aOSy3qmVv9nMZgYuWeQHQ/xzp+8byeGYF5XScnfRUq8b3lquriwr
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
xD9OUMcgRnkULJEJMz6LooQT1N6XV9fqd6zi+XOW5oTPDklR5MXayAvtHZIZJK1EkZFKdIsulq71
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
pgyreG6UuUHPRnk6HtNzkj3NlLHkeCzyY5Go1/OjCoL2w+Pj2ILHR3M2+0m5SfuV6Y2VRGEUJ/xe
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
KlNYkRy1eU1UtZbHp4LwfhxNlQyzxnnluZx98+5PX/387U+7v7z74cf3f/7O2BpzywyYbc+7Rz//
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
8K3yq3q0r6rj5v7+eD4mZp1cZl483TdJUd7flff4r9vtfm7cqV3Mxr8fNu7DbHbg/o6TikDgv3TE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
Fpc3XmNzar8+nh3TNcXT02JjLKLIcRiRsWU7vsUjL6JxHNBQOj4LRMDIYn1DitdKoWFMIuJZrvB8
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
y5GURr4QrrRjzw5dn9EJKc5QFz/ww9CPeUQCHknmeVZokZhboRM6PI5vS+l08WAAibgdxNyhIghs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
SVyHBMJ3hCcjZ8oid6gLpa7NLMlCN45J4PphHIc+IzyWPrECO7oppdPFjUjEcJcHgnHHcbxQ2mEs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
Q06CIJaETUjxhroEjuX5xPEE94QtKAtDKSw3JsQTgQyFf1PKxS+MOsSOfOgRccKkpA63oY/lUpfa
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
zHtZChvlC3WlQ33fjXmAuIYy9AgPY9uBIBJb0YRFbJwvsIcLDk8GIXe4I6WwPcuK3cCTDvEmIs1s
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
a6gMgzscQn3uEsvxA88PEB9mu5FlkdCKrdtiOm38kONFxCimkRWGDvNj4rsk8lyX+JxPeqYW47di
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
uPACwiL4Mg5ZFPt+6AhfRD7SUdCIhbfFBJ02kUAlESGtAA5ymAg824M0B0bC4RPRBqgMfeNQIghq
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
2HY53kcZOZEIKfGpT6ARF7fFXCLFAzeWMbUgzGOe48Wh5XpcMEcwizmTkbKHvgk8FnvSpTIkIbLQ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
FSxyhUUdhDv0YurcFtP5hkoSO7ZlUY4wcdQEJAnOXQQ+8KwomBAzwhlpWYFHZUCIQ0NuQS141kNi
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
W5EdMmcqUCOcCezAjh0hmOtLLxSImh0wHhDbgVQnnJIywhlpRwAogC+XSBXi+DGLIUXaPKRhJCfQ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
io1wRliCh14QOSyOIyppCE9HFrLXQsxDeyrY7jBIhAppB5JzGOb7vu1Fns1C4BePozjwp6SM0Ipa
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
NLZdmzBCXceCM4BzofQ85gMoQlvelNJZhCSR2DPgnqTSRUVRGXsBs+AqoJ6YShhvaFGk0BrA7zqM
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
05iFDmXSA3w5gXQiIqfQyh9aJEQseWRBHRQkMla6ApjuhwAMHtnBVKT9oUVEAqu4BKvYoWULAeeG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
ICefMhAeCaZQxh/FKOKuDAAIHmOERKHtIXG4G1LGuMt9PiElGFqEgonA8pFtB2CiKPJCByLAmL4X
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
o7SngDMYsRvzAyL9kMK/6B5QDYEFQzzPRYH5ZAobgqFF1JERCX0HZA/YpS5I2kKoufAlWgnfnZAS
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
juDOQoxkTDhzSWD7wrdtH2WIliICBE7mSzhiAhLJ2PfAAhxYbkkahEza0kEY8MiZqoBwaJEHjiXA
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
W4mWAQXouZ5t25KLyLXxL5zSJRp1Q5bqhZwYHok5+EOlIAA8ci3VWFm3pXQWMUrcCNiAnsOLXGap
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
nEW2wdkMzDJJA9HQIjt07BAgh0DHnNm+5ccW8SPqCtR57E9FOh5aBN2ZZ6GZsZWHqRcHwmOSCiuC
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
rcyainQ8QgYkGRo7cKsbRTwAOhEhrADgxQLXm+rvGimdRVIgtK7wiR1S22EIE/M9m4bgXjC/mGKS
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
eMhHjKBsbKlQkziCA5js2AWzhdSPHfQ4kPLrrDcRYLwpZ1Vx3tQD156U+zSh7byF3n0mfmECo8Z7
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
feedGomatXjYXzfjQhq7zyRN0O2LHW4todMuwzy4NtQAsNpoAxJptPfVzNiOB/VDdfEEs0WFcUGJ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
0C+ae/FLfRfzXbsMcpqVX2w7KR9a0Q8XeerC3IVp8O1bNZ2UFRcF5rrlYIW65sqkxoJmPrzDFEYw
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
hvEvDGP5fV6WCU174x9GOvx9+MNqfiXsrjNz8Gg1+EvpI35JqqVT3y8Q3CLT7qodOhoO9aJmvNqO
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
hrl1p9aOklJsewPdGpPiDqPqNi9NdirwW51M3QtcpOS8tf1ZEySMjV+dqvwAPzBMl2eMohm/78zu
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
nRSouf5APiGWGJ4/w1VEOQjOU6YdSbWvx/nHRulHo9znp5SraZbUvu5Layfz7HSgojCqPakMDMKd
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
YC1LTcCZ8q4hMfV2Sp0yrl8RxuPAEY+GGmmXz/uE7dvdBbRWRxO1PGNxv1iZULL20qPaUsnpHWPs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
RTE4IHlOMHPTSyYIvkZG1gmuVc5y+CMtBOHni/rY473sqafdrrdrzia0mKrRUkujQqvSOESfWLA8
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
42Xtm1aNI0GiKKfCI6qskipB6LKn3nlGHfHG/jwT+jyhPhvhtV5wap4qH754PqK0bA4bRCNMn+UU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
+Qk7iVqVus6IcRBlSZ5EfcBxKbrHR50vBUlKYfx4LitxePeL8ldWByIzSIV79ckGoQpalPEqBZUx
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
9amH2Wao/vlMyl2NQrB/ayyOn552hSjzU8FEuVAIo7Y/5PyUilKdkvQAdPy4rglUHUceNG5bri5I
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
olJueymaXl02HhuVYFt261GhXTCgLRITnhVFtbTWapMeyDVA3e30pn+6Q9tjvl0TmJ0G5q2SUQcI
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
wD6WNXCQfvgCwncvtYDUd0jz6HqHgWizSa7l/KLx2+38VeOq1ZtGdl+FoYC/1Cu/zjOZJqyCazZ9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
9O9H/r9F+/lP+0v2T+T78u32rlx1tdzWsD7K/JgNAX/OSLaoVEl1JQLMUMd3ukaa4zpVLacsQyqb
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
xvepQIa0y6/kqRpSpQwAErCl1VAmRQlHnEpVDgtIOLehN17/3FN+YY7kfcw+ZsuvT0UBaYDzWsBd
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
MeKtFVjrksvCJMVT+cF6uM1ZOn5pKYYxQKIPw7nuV9qHUZ0+qFe+hLUayfNPA1Ev5eB01nyToCQS
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
elIM/l1e/SkHL9zO55ppXyrr35tuVfGjPAc8+80LpKrLmFxIwUhzVrckGj5rG5KqPiHWLcb/KcnW
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
EK0+A2hJ9rc4Vt1Tu14TbI37jxfOnODFvGbDlgwVqbDqRNKLEQ3JDImk/YihANdQB9m6RwqldZ61
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
/erW6IHZ67sSvfddqVrveb9wRkfgda5Cbp87lM+MV8MWsSSfBbTfoiWvSeHveZItWwppl9biyoIp
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
cbpP/g5s3rbWCqra11GkZVUua7GrjSqwrz7niUqgoyCKL1t1yq4+BniuLp2KHIKUN8rWS2n+NFil
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
mnEVl+G76sJK85kU2VL5+fXvd9WfkDTA2iB5+VKW3+mUUJ+cLMVnkak/YM4Rys72Ij2qvu99nW29
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
3qNLFTQnKv/VZztL5YoZKGFtAF1m6tYB5ZwJOBKvoA5V5wuEFs8KjwnG2bLUb/c5QCO4OWu2BHQ3
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
Pc5lR6jM22w2Z7MlQExslIe1mANhe9Vu8VzUxLRHeKFE9ZwXn5pN18axZpecVqT5XE4hhUaJu3I2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
UygCDzDdtesFkHypxKZyCtGwVd8Ac/V7RhFJsb5KmR7oXjVUOsvWqpquXkNHoZO1StRk2TROqRDH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
N/WP5aj3GmZnC8OaF8u53mLEe7rkGnww8TM/imx5texL4wc0/ffPRVIBfBBj+Fe328DwT2v10eCz
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
ip5qF1ihyhDQyPKiOOnkSMVImI57Pz1UF14Jvb7FxPZqPmabGsJhgKkGkuVqqHGNItqaGivW82c6
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
hzvxwNR21GN49xKGQTUUbsYQgA02eheW5qVYrq4goqw2Wmj/ecNmLWhBwVT90sLW7D+5FH8fkOlL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
NCyf11OMfeHc97c+NNUc+w6tVbOqJYiXmunRh9G3Oul6eOiw+kriZc3tAUNP6tZ1SzYcIwZThI6Z
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
Ko3e7MDywwGGmoMesj3OIc1A1l5NjLSLU3CB9vPqlTpteVjpNH0Wi0KntTAUjf9mqihLlZ9HXKXU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
vuYQLDplmAA/LTuzhg1n0m/czd2u8dZuZ2wxElqmZdqL/3pE+CsAXoOrmotpmacCtToxGrdNP8ik
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
buyvGvpCHPLPGm91JOrvPOgJGMxRAXrT38DdUac+2ZI3RfWPYbPSm7z63c71MPgfDHT4eaP/Hk1t
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
m+ls/59T8laZdYJ/U8pVNr9Ud225PQxndu1sa4XEh1WK/RE4pjNFPXk5Q9Uuv5MDOvW15jemsDrN
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
5z9etUXzdYsoc4DgkyaiQh3/IgnRJF0Sev6CvMXyB7RT8/bbOebxPJw+5/X3bq6/mmKuFs2x5rHj
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
p3aEKS/w/LN+aqgSoackrV7X58QQ+aSGu7NC5H4WF838o3qt9ly5E3txiO65L921+lOtWF66ai2k
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
5UJNmouCLi7PumNm9e5Dc0QtW1J98ZhadmRXj4A1RX+Yqz/uig3+rYEVGB+aTrNuyNqNTJDvoVyu
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
HrqXzRIWd9R5VEPFfF5PCjVJ9x2DCGCErNqJQX+faNveNZ9EVRetur/sT+c73THsdk3Wdy5pZKwN
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
7ZY3TUvUOuDN2NgDqTANbqGnWQpSsP1y/jHrfx/oY7b88LdfH16tfp3r9mTVH2P02z0segGxQeT6
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
G1mpIRQKfDG/LtIWEWtV8f8PGy3Y1K330l49YAzTjnyln9YPMbri0ebhZfMXz01OyKY96lTvOWAG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
M1o/breL3U4V7G636D4FSZVEqKlr+K2j6bD9+4P9gHdev4az6lLp0VevdrrlzubhJV7UGHGRqRbV
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
178BYnMUkw==
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
##file distribute_setup.py
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
DISTRIBUTE_SETUP_PY = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
eJztG2tz2zbyu34FTh4PqYSi7TT3GM+pM2nj9DzNJZnYaT8kHhoiIYk1X+XDsvrrb3cBkCAJyc61
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
dzM3c7qrIxGLxWLfuwCP/lTs6k2eTabT6Xd5Xld1yQsWxfBvvGxqweKsqnmS8DoGoMnliu3yhm15
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
VrM6Z00lWCXqpqjzPKkAFkdLVvDwjq+FU8lBv9h57JemqgEgTJpIsHoTV5NVnCB6+AFIeCpg1VKE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
dV7u2DauNyyuPcaziPEoogm4IMLWecHylVxJ4z8/n0wYfFZlnhrUBzTO4rTIyxqpDTpqCb7/yJ2N
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
dliKXxsgi3FWFSKMV3HI7kVZATOQhm6qh98BKsq3WZLzaJLGZZmXHstL4hLPGE9qUWYceKqBuh17
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
tGgIUFHOqpwtd6xqiiLZxdl6gpvmRVHmRRnj9LxAYRA/bm+HO7i99SeTa2QX8TekhRGjYGUD3yvc
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
SljGBW1PSZeoLNYlj0x5+qgUE8W8vNLfql37tY5Tob+vspTX4aYdEmmBFLS/eUk/Wwk1dYwqI0eT
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
fD2Z1OXuvJNiFaP2yeFPVxcfg6vL64uJeAgFkH5Jzy+QxXJKC8EW7F2eCQObJrtZAgtDUVVSVSKx
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
YoFU/iBMI/cZL9fVTE7BD/4EZC5s1xcPImxqvkyEN2PPaaiFK4FfZWag90PgqEvY2GLBTid7iT4C
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
RQfmg2hAihFbgRQkQeyF/80fSuQR+7XJa1AmfNykIquB9StYPgNd7MDgEWIqwNyBmBTJdwDmmxdO
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
t6QmCxEK3OasP6bwOPA/MG4YHw8bbHOmx9XUYccIOIJTMMMhtenPHQXEOviiVqxuhtLJK78qOFid
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
C98+BD+/urz22IBp7Jkps9cXb159ensd/HTx8ery/TtYb3rq/8U/ezlthz59fIuPN3VdnJ+cFLsi
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
9qWo/LxcnygnWJ1U4KhCcRKddH7pZDq5urj+9OH6/fu3V8GbVz9evB4sFJ6dTScm0Icffwgu3715
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
j+PT6ZfJP0XNI17z+U/SHZ2zM/908g786LlhwpN29LiaXDVpysEq2AN8Jv/IUzEvgEL6PXnVAOWl
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
+X0uUh4n8snbOBRZpUBfC+lACC8+AIJAgvt2NJlMSI2Vr3HBEyzh35m2AfEAMSck5ST3LodpsE4L
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
cJGwZe1N/PQuwu/gqXEc3Ia/5WXmOhcdEtCB48rx1GQJmCdRsI0AEYh/LepwGykMrZcgKLDdDcxx
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
zakExYkI6cL8vBBZu4sWJlD7UFvsTfbDJK8EhpfOINe5IhY33QaCFgD8idw6EFXweuP/AvCKMA8f
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
JqBNBq2fT29m441ILN1Ax7B3+ZZt8/LO5JiGNqhUQsMwNMZx2Q6y161uOzPTnWR53XNgjo7YsJyj
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
kDsDD9ItcAU6CqEf8G/BZbFtmcPXqCm1rpjJiW8sPMAiBEEL9LwsBRcNWs/4Mr8XetIqzgCPTRWk
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
5sy0Ei+bGB6I9dqF/zytrPAlD5B1/9fp/wGdJhlSLMwYSNGC6LsWwlBshO0EIeXdcWqfjs9/xb9L
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
9P2oNvRojr/gT2kgeqIayh3IqKa1qxRVk9R95YGlJLCyQc1x8QBLVzTcrVLyGFLUy/eUmrjO93mT
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
RDSLOCVtZ71GW1FWEAHRKod1VTrstVltsOSV0BszHkci4Tu1KrJyqAYK3unC5Py4mhe748iH/yPv
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
rIkEfI5ZRwUGdfUDIs4qBx2yPDy7mT2dPcosgOB2L0bGvWf/+2gdfPZwqdOrRxwOAVLOhuSDPxRl
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
7Z56rJO/yn77dY+R5C911acDdEDp94JMQ8p7UGOoHS8GKdKAAwsjTbJyQ+5ggSrelBYmLM7+7IFw
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
ghW/E4vrshGtd005mXjVQGG2peSZdJQvqzxBQ0VeTLolDE0DEPzXNbm35VUguSTQmzrF3ToAk6Ks
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
raIkFvmb5lGTiAorpS/tbpyOK0PAsSfu/TBE01uvDyCVc8MrXtel2wMEQwkiI+hak3CcrThoz8Jp
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
qF8BD0GUc+hqlxZiX1nTzpS59+/xFvuZ12OGr8p0d9qx5NvF9LlabWYha7iLPj6VNn+fZ6skDuv+
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
0gK0RNYOIXkTdwb+ZCg4U6vGvMfpEOogI/G3JRS67ghiek2enbYVmT0Hozfjfrs4hoIFan0UNL+H
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
dJ0qmS/ZdIwPWykhz5wa601l6oB5u8E2AfVXVFsAvpVNhtHFZx8SAeKx4tOtA87SvERSQ0zRNKGr
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
uKxqD0wT0FinO4B4p10Om38y9uX4Fvgv2ZfM/b4pS1gl2UnE7LicAfKe/xc+VnGYOYxVWQotrt0X
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
/TGRVBb7AA1kA5Mz7PvzwE/c4BSMzNTYye/2FbNfYw1PiiH7LMaq1202A6u+y+s3eZNFv9toHyXT
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
RuIo1TnkroKwFLwWQ28V4ObIAtssCsPVgSj9e2MWfSyBS8Ur5YWhHn7dtfhac6W42jYSwfaSPKTS
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
hdqcivFxLTt3GVTyMim8VbTfsmpDmdkS25H3PIl72LXlZU26FCVYNCdTbr0C4cL2HyW91DFp+5Cg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
BTRFsNseP24Z9jhc8BHhRq8uskiGTezRcuacODOf3Uqe3OKKvdwf/IsohU4h236XXkVEvtwjcbCd
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
rvZAHdYwzyLqdRYcA/1SrNDdYFszrBuedB1X2l+NlVTtazH8RxKGXiwioTYlVMFLikIC29yq31wm
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
WFZNDGu0xkoDxQvb3Hr9W4DqgK2fXnLsYxm2/g0doJK+bGqXvVwVBcmet1hk/sfvBbB0TwquQVV2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
WYaIDvalWquGtQ7yZol2do48f3Wfx6jVBVpu1JLTZTijkN4WL631kI+vph5uqe+yJVGKS+5o+Ih9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
FDw6odjKMMBAcgaksyWY3J2HHfYtKiFGQ+laQJPDvCzBXZD1DZDBbkmrtb3EeNZRC4LXKqw/2JTD
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
BKEMQR94NMioJBuJaMksj023y+kISKUFiKwbG/lMJQlYy5JiAAG6RB/AA35LuINFTfiuc0oShr0k
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
ZAlKxqoSBHddgfda5g/uqslC9GbKCdKwOU7tVY89e3a3nR3IimXzv6tP1HRtGK+1Z7mSzw8lzENY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
zJmhkLYly0jtfZzLVtKozW5+Cl5Vo4HhSj6uA4IeP28XeQKOFhYw7Z9X4LELlS5YJD0hsekmvOEA
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
8OR8fjhvvwyV7miN6In+UW1Wy4zpPswgqwisSZ0d0lR6U2+VohNVAfoGF83AA3cBHiCru5D/M8U2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
Ht41BXmLlUysRSZ3BJFdByTyluDbAoVDewREPDO9BnBjDLvQS3ccOgIfh9N2mnmWntarPoTZLlW7
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
7rShm/UBobEU8PUEyCYxNgTkDIhimc+ZmwBD2zq2YKncmuadPRNc2fwQ6fbEEAOsZ3oXY0T7JjxU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
1myzCk27uCHvDR4rVKM9SwSZ2OrIjE8hyjr++7ev/eMKj7TwdNTHP6PO7kdEJ4MbBpJc9hQliRqn
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
avJibYs/Xduo2oB+2BKb5veQLINpBGaH3C0SHooNKLvQnepBGI8r7DWOwfrUf8ruIBD2mu+QeKk9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
GHP369cK646e/8F0VF8IMBrBdlKAanXa7Kt/XZzrmf2YZ9gxnGNxMHT3evGRt1yC9O9Mtqz65VHH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
ga5DSim8eWhurjtgwGSkBSAn1AKRCHkkmzc1Jr3oPbZ819mcrnOGCZvBHo9J1VfkDySq5huc6Jy5
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
shwgO+jBSlfViyCjSdIfqhkes5xXqs624ujIt3fcAFPgQxflsT41VmU6AsxblojaqRgqfut8h/xs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
FU3xG3XNNVt43qD5p1r4eBMBvxrc0xgOyUPB9I7Dhn1mBTKodk1vM8Iyjuk2vQSnKhv3wFZNrOLE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
nja6c9Vd5ImMNoEz2EnfH+/zNUPvvA9O+2q+gnS6PSLG9RVTjACGIO2NlbZt3dpIx3ssVwADnoqB
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
/09TICLIl7+43YGjr3vdBZSEUHfJyPZYl6Hn3CTdXzOl53JNckElLcXUY27YImzNHN1YGLsg4tTu
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
nngEJqcilfvkUxNZEXYbVZHYsCJ1aFN1fhAW+NLTOXffVQFP0vYVTm9Aysj/aV6OHaDV80jwA35n
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
6MO/R/nLSD6a1aVErYM8nBZZ3ScB7E+RJKvqNifazypDRj5McIZJyWAr9cbgaLcV9fixrfTIMDpl
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
Q3k9vr/HTGzoaR4Bn/Xy+TbodTndkQolEIHCO1SlGH/Z8uu9Cioz4IsffpijCDGEgDjl969Q0HiU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
wh6Ms/tiwlPjquHbu9i6J9kH4tO7lm/9RwdZMXvEtB/l3H/FpgxW9MoOpS32ykMNav2Sfco2oo2i
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
2Xeyj7k3nFlO5hRmatYGRSlW8YOrPX0XXNogR6FBHUpC/X1vnPcbe8Pf6kKdBvysv0CUjMSDETaf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
n53ftFkUDXr62p3ImlSUXF7IM3snCCpvrMp8az4vYa/yHoTcxDBBh00ADh/WLOsK28yoxAsMIxKP
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
pTFT54WSDM0skrh2HVxn4cw+zwencwYLNPvMxRSu4RGRpApLQ0mF9cA1Ac2Utwi/lfyx95B65Faf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
CfK5hcqvpbSjEZjbVKJ06GihuxyrjgqxjWvt2NhWaWdbDENq5EhVh8p+FXI6UDTOHfX1SJvt7j0Y
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
P9ShOmJb4YBFhUCCJcgb2S0opHGrJ8qFZEolRIrnDObx6LhLQj+3aC79UkHdO0I2jDdkxCFMTGHy
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
tvIxa+uf6fsf5XkvJtvgFUtwRr3yxJ64D7SFYj5iWJAbVx5Xce56V4gR37BVaRwkvfpw+QcTPuuK
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
wCFCUMi+Mpq3ucx3C8ySRBbmdtEcsUjUQt2aw+CNJ/FtBERNjYY5bHsMtxiS5+uhoT6b7zwYRY9c
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
GrRbt0Msqyhe0KGC9IWokOQL4wcitijz+zgSkXz9IV4pePNFi8poPkTqwl3qdYcauuNoVhz9wGGj
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
zC4FhQ0Y6g0JBkTyLMR2D3SsrfJGONCygfpjf43SS8PAKqUcK/O6ntqSZRO+yCIVNOjO2J5NZXN5
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
m68TXo8OtO/9fTSrVPVkRRrgsHlYS1PFuPC5n6R9GZOFlMMJlCLR3Zd/os71uxFfkYPuTUIPNJ8H
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
vOnPG7efTd1oj+7QrOl8Wbo/Ous1/H0mhqLtZ/+/V54Deum0MxNGwzzhTRZuuhSuezKMlB/VSG/P
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
GNrYhmNrC99IkhBU8Os3WiRUERcs5eUdnuXnjNMBLO8mLJvWeNpU7/ybG0wXPjvz0LyRTdkZXrFJ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
xFy1AObigd5fgpx5nvIMYnfk3BghTmM8vWn7Adg0MxPMz/03Lm7Y83baROOg+znWl2la7hmXkiuR
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
rGTjfDH1px5LBV4cqBYYU7qTGXWRmg6CFYQ8ZqRLACVwW7IWf4byipG+R6z3111oQJ+M73rl2wyr
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
6jSP8K0w6f+x2U8AhSjTuKroNa3uyE4jiUEJqeEFMo8qn93iBpz2Ygi+ogVIV4IIGV2jBkIVB+Ar
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
TFY7ctATy9SUJ0REiq/c0WUR4CeRTA1AjQd77EqLQWOXO7YWtcLlzvo3KFRCFubFzvwNhRhk/OpG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
oGSovE6uARTju2uDJgdAH27avECLZZQP6AGMzclq0lYfsBL5Q4goCqRXOath1f8e+KUjTViPHnWh
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
peIrgVIVg2P9DtLnBVSgkavW6LsyTdeCuOXjn4OAeJ8M+zYvX/6NcpcwTkF8VDQBfad/PT01krFk
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
5SvRa5xS+duc4qNAaxWsQu6bJJuGb/b02N+Z+8JjLw0OoY3hfFG6gOHMQzwvZtZyIUwLgvGxSSAB
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
/e50asg2ROpKzHaAUlLv2o4eRojuxG6hFdDH435QX6TZQQKcmccUNnl1WDMIMje66AG4WgturRZV
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
l8SBqdyQeQOlM8Z7RNI5oLWtoQXeZ9Do7JykHG6AuE7GCu9sDNjQ+eITAMMN7OwAoCoQTIv9N269
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
ShXFyQlwP4Eq+GxcAdON4kF1bbunQMiCaLl2QQmnyrXgm2x44UnocJDymGrue4/tueTXBYLLQ6+7
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
kgpc8GqnoLTzO3z9X8X44cttQFxM918weQqoIg8CJDUI1LuURHcbNc/Ob2aTfwH3muVf
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
##file activate.sh
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
ACTIVATE_SH = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
eJytVU1v4jAQPW9+xTT0ANVS1GsrDlRFAqmFqmG72m0rY5IJsRRslDiktNr/vuMQ8tFQpNU2B4I9
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
H36eeW/SglkgYvBFiLBKYg0LhCRGD1KhA7BjlUQuwkLIHne12HCNNpz5kVrBgsfBmdWCrUrA5VIq
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
DVEiQWjwRISuDreW5eE+CtodeLeAnhZEGKMGFXqAciMiJVcoNWx4JPgixDjzEj48QVeCfcqmtzfs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
cfww+zG4ZfeD2ciGF7gCHaDMPM1jtvuHXAsPfF2rSGeOxV4iDY5GUGb3xVEYv2aj6WQ0vRseAlMY
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
G5DKsAawwnQUXt2LQOYlzZoYByqhonqoqfxZf4BLD97i4DukgXADCPgGgdOLTK5arYxZB1xnrc9T
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
EQFcHoZEAa1gSQioo/TPV5FZrDlxJA+NzwF+Ek1UonOzFnKZp6k5mgLBqSkuuAGXS4whJb5xz/xs
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
wXCHjiVerAk5eh9Kfz1wqOldtVv9dkbscfjgjKeTA8XPrtaNauX5rInOxaHuOReNtpFjo1/OxdFG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
5eY9hJ3L3jqcPJbATggXAemDLZX0MNZRYjSDH7C1wMHQh73DyYfTu8a0F9v+6D8W6XNnF1GEIXW/
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
JrSKPOtnW1YFat9mrLJkzLbyIlTvYzV0RGXcaTBfVLx7jF2PJ2wyuBsydpm7VSVa4C4Zb6pFO2TR
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
huypCEPwuQjNftUrNl6GsYZzuFrrLdC9iJjQ3omAPBbcI2lsU77tUD43kw1NPZhTrnZWzuQKLomx
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
Rd4OXM1ByExVVkmoTwfBJ7Lt10Iq1Kgo23Bmd8Ib1KrGbsbO4Pp2yO4fpnf3s6MnZiwuiJuls1/L
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
Pu4yUCvhpA+vZaJvWWDTr0yFYYyVnHMqCEq+QniuYX225xmnzRENjbXACF3wkCYNVZ1mBwxoR9Iw
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
WAo3/36oSOTfgjwEEQKt15e9Xpqm52+oaXxszmnE9GLl65RH2OMmS6+u5acKxDmlPgj2eT5/gQOX
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
LLK0j1y0Uwbmn438VZkVpqlfNKa/YET/53j+99G8H8tUhr9ZSXs2
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
##file activate.bat
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
ACTIVATE_BAT = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
eJyFUkEKgzAQvAfyhz0YaL9QEWpRqlSjWGspFPZQTevFHOr/adQaU1GaUzI7Mzu7ZF89XhKkEJS8
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
qxaKMMsvboQ+LxxE44VICSW1gEa2UFaibqoS0iyJ0xw2lIA6nX5AHCu1jpRsv5KRjknkac9VLVug
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
sX9mtzxIeJDE/mg4OGp47qoLo3NHX2jsMB3AiDht5hryAUOEifoTdCXbSh7V0My2NMq/Xbh5MEjU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
ZT63gpgNT9lKOJ/CtHsvT99re3pX303kydn4HeyOeAg5cjf2EW1D6HOPkg9NGKhu
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
##file deactivate.bat
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
DEACTIVATE_BAT = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
eJxzSE3OyFfIT0vj4spMU0hJTcvMS01RiPf3cYkP8wwKCXX0iQ8I8vcNCFHQ4FIAguLUEgWIgK0q
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
FlWqXJpcICVYpGzx2BAZ4uHv5+Hv6wq1BWINXBTdKriEKkI1DhW2QAfhttcxxANiFZCBbglQSJUL
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
i2dASrm4rFz9XLgAwJNbyQ==
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
##file distutils-init.py
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
DISTUTILS_INIT = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
eJytVl2L6zYQffevGBKK7XavKe3bhVBo78uFSyml0IdlEVpbTtR1JCMpm6S/vjOSY0v+uO1DDbs4
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
0tF8nJk5sjz32jjQNpPhzd7H1ys3SqqjhcfCL1q18vgbN1YY2Kc/pQWlHXB4l8ZdeCfUO5x1c+nE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
E1gNVwE1V3CxAqQDp6GVqgF3EmBd08nXLGukUfws4IDBVD13p2pYoS3rLk52ltF6hPhLS1XM4EUc
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
VsVYKzvBWPkE+WgmLzPZjkaUNmd6KVI3JRwWoRSLM6P98mMG+Dw4q+il8Ev07P7ATCNmRlfQ8/qN
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
HwVwB99Y4H0vMHAi6BWZUoEhoqXTNXdSK+A2LN6tE+fJ0E+7MhOdFSEM5lNgrJIKWXDF908wy87D
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
xE3UoHsxkegZTaHIHGNSSYfm+ntelpURvCnK7NEWBI/ap/b8Z1m232N2rj7B60V2DRM3B5NpaLSw
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
KnfwpvQVTviHOR+F88lhQyBAGlE7be6DoRNg9ldsG3218IHa6MRNU+tGBEYIggwafRk6yzsXDcVU
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
9Ua08kYxt+F3x12LRaQi52j0xx/ywFxrdMRqVevzmaummlIYEp0WsCAaX8cFb6buuLUTqEgQQ6/Q
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
04iWRoF38m/BdE8VtlBY0bURiB6KG1crpMZwc2fIjqWh+1UrkSLpWUIP8PySwLKv4qPGSVqDuMPy
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
dywQ+gS7L1irXVkm5pJsq3l+Ib1lMOvUrxI+/mBBY4KB+WpUtcO06RtzckNvQ6vYj1lGoZM2sdDG
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
fryJPYJVn/Cfka8XSqNaoLKhmOlqXMzW9+YBVp1EtIThZtOwzCRvMaARa+0xD0b2kcaJGwJsMbc7
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
hLUfY4vKvsCOBdvDnyfuRbzmXRdGTZgPF7oGQkJACWVD22IMQdhx0npt5S2f+pXO+OwH6d+hwiS5
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
7IJOjcK2emj1zBy1aONHByfAMoraw6WlrSIFTbGghqASoRCjVncYROFpXM4uYSqhGnuVeGvks4jz
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
cjnCoR5GnPW7KOh4maVbdFeoplgJ3wh3MSrAsv/QuMjOspnTKRl1fTYqqNisv7uTVnhF1GhoBFbp
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
lh+OcXN2riA5ZrYXtWxlfcDuC8U5kLoN3CCJYXGpesO6dx6rU0zGMtjU6cNlmW0Fid8Sja4ZG+Z3
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
fTPbyj+mZnZ2wSQK8RaT9Km0ySRuLpm0DkUUL0ra3WQ2BgGJ7v9I9SKqNKZ/IR4R28RHm+vEz5ic
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
nZ2IH7bfub8pU1PR3gr10W7xLTfHh6Z6bgZ7K14G7Mj/1z5J6MFo6V5e07H0Ou78dTyeI+mxKOpI
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
eC2KMSj6HKxd6Uudf/n886fPv+f++x1lbASlmjQuPz8OvGA0j7j2eCu/4bcW6SFeCuNJ0W1GQHI5
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
iwC9Ey0bjtHd9P4dPA++XxLnZDVuxvFEtlm3lf5a2c02u2LRYXHH/AOs8pIa
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
##file distutils.cfg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
DISTUTILS_CFG = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
eJxNj00KwkAMhfc9xYNuxe4Ft57AjYiUtDO1wXSmNJnK3N5pdSEEAu8nH6lxHVlRhtDHMPATA4uH
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
xJ4EFmGbvfJiicSHFRzUSISMY6hq3GLCRLnIvSTnEefN0FIjw5tF0Hkk9Q5dRunBsVoyFi24aaLg
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
9FDOlL0FPGluf4QjcInLlxd6f6rqkgPu/5nHLg0cXCscXoozRrP51DRT3j9QNl99AP53T2Q=
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
##file activate_this.py
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
ACTIVATE_THIS = """
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
eJyNUlGL2zAMfvevEBlHEujSsXsL9GGDvW1jD3sZpQQ3Ua7aJXawnbT595Ocpe0dO5ghseVP+vRJ
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
VpIkn2cYPZknwAvWLXWYhRP5Sk4baKgOWRWNqtpdgTyH2Y5wpq5Tug406YAgKEzkwqg7NBPwR86a
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
Hk0olPopaK0NHJHzYQPnE5rI0o8+yBUwiBfyQcT8mMPJGiAT0A0O+b8BY4MKJ7zPcSSzHaKrSpJE
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
qeDmUgGvVbPCS41DgO+6xy/OWbfAThMn/OQ9ukDWRCSLiKzk1yrLjWapq6NnvHUoHXQ4bYPdrsVX
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
4lQMc/q6ZW975nmSK+oH6wL42a9H65U6aha342Mh0UVDzrD87C1bH73s16R5zsStkBZDp0NrXQ+7
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
HaRnMo8f06UBnljKoOtn/YT+LtdvSyaT/BtIv9KR60nF9f3qmuYKO4//T9ItJMsjPfgUHqKwCZ3n
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
xu/Lx8M/UvCLTxW7VULHxB1PRRbrYfvWNY5S8it008jOjcleaMqVBDnUXcWULV2YK9JEQ92OfC96
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
1Tv4ZicZZZ7GpuEpZbbeQ7DxquVx5hdqoyFSSmXwfC90f1Dc7hjFs/tK99I0fpkI8zSLy4tSy+sI
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
3vMWehjQNJmE5VePlZbL61nzX3S93ZcfDqznnkb9AZ3GWJU=
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
""".decode("base64").decode("zlib")
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
if __name__ == '__main__':
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
    main()
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
## TODO:
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
## Copy python.exe.manifest
a65807bd3d04 add setup and virtualenv
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
## Monkeypatch distutils.sysconfig