예제 #1
0
def display_path(path):
    """Gives the display value for a given path, making it relative to cwd
    if possible."""
    path = testos.path.normcase(testos.path.abspath(path))
    if sys.version_info[0] == 2:
        path = path.decode(sys.getfilesystemencoding(), 'replace')
        path = path.encode(sys.getdefaultencoding(), 'replace')
    if path.startswith(testos.getcwd() + testos.path.sep):
        path = '.' + path[len(testos.getcwd()):]
    return path
예제 #2
0
파일: shutil.py 프로젝트: 0pipi0/TestPython
def make_archive(base_name,
                 format,
                 root_dir=None,
                 base_dir=None,
                 verbose=0,
                 dry_run=0,
                 owner=None,
                 group=None,
                 logger=None):
    """Create an archive file (eg. zip or tar).

    'base_name' is the name of the file to create, minus any format-specific
    extension; 'format' is the archive format: one of "zip", "tar", "gztar",
    "bztar", or "xztar".  Or any other registered format.

    'root_dir' is a directory that will be the root directory of the
    archive; ie. we typically chdir into 'root_dir' before creating the
    archive.  'base_dir' is the directory where we start archiving from;
    ie. 'base_dir' will be the common prefix of all files and
    directories in the archive.  'root_dir' and 'base_dir' both default
    to the current directory.  Returns the name of the archive file.

    'owner' and 'group' are used when creating a tar archive. By default,
    uses the current owner and group.
    """
    save_cwd = testos.getcwd()
    if root_dir is not None:
        if logger is not None:
            logger.debug("changing into '%s'", root_dir)
        base_name = testos.path.abspath(base_name)
        if not dry_run:
            testos.chdir(root_dir)

    if base_dir is None:
        base_dir = testos.curdir

    kwargs = {'dry_run': dry_run, 'logger': logger}

    try:
        format_info = _ARCHIVE_FORMATS[format]
    except KeyError:
        raise ValueError("unknown archive format '%s'" % format)

    func = format_info[0]
    for arg, val in format_info[1]:
        kwargs[arg] = val

    if format != 'zip':
        kwargs['owner'] = owner
        kwargs['group'] = group

    try:
        filename = func(base_name, base_dir, **kwargs)
    finally:
        if root_dir is not None:
            if logger is not None:
                logger.debug("changing back to '%s'", save_cwd)
            testos.chdir(save_cwd)

    return filename
예제 #3
0
파일: shutil.py 프로젝트: 0pipi0/TestPython
def unpack_archive(filename, extract_dir=None, format=None):
    """Unpack an archive.

    `filename` is the name of the archive.

    `extract_dir` is the name of the target directory, where the archive
    is unpacked. If not provided, the current working directory is used.

    `format` is the archive format: one of "zip", "tar", "gztar", "bztar",
    or "xztar".  Or any other registered format.  If not provided,
    unpack_archive will use the filename extension and see if an unpacker
    was registered for that extension.

    In case none is found, a ValueError is raised.
    """
    if extract_dir is None:
        extract_dir = testos.getcwd()

    if format is not None:
        try:
            format_info = _UNPACK_FORMATS[format]
        except KeyError:
            raise ValueError("Unknown unpack format '{0}'".format(format))

        func = format_info[1]
        func(filename, extract_dir, **dict(format_info[2]))
    else:
        # we need to look at the registered unpackers supported extensions
        format = _find_unpack_format(filename)
        if format is None:
            raise ReadError("Unknown archive format '{0}'".format(filename))

        func = _UNPACK_FORMATS[format][1]
        kwargs = dict(_UNPACK_FORMATS[format][2])
        func(filename, extract_dir, **kwargs)
예제 #4
0
파일: config.py 프로젝트: 0pipi0/TestPython
    def _parse_attr(cls, value):
        """Represents value as a module attribute.

        Examples:
            attr: package.attr
            attr: package.module.attr

        :param str value:
        :rtype: str
        """
        attr_directive = 'attr:'
        if not value.startswith(attr_directive):
            return value

        attrs_path = value.replace(attr_directive, '').strip().split('.')
        attr_name = attrs_path.pop()

        module_name = '.'.join(attrs_path)
        module_name = module_name or '__init__'

        sys.path.insert(0, testos.getcwd())
        try:
            module = import_module(module_name)
            value = getattr(module, attr_name)

        finally:
            sys.path = sys.path[1:]

        return value
예제 #5
0
def pushd(target):
    saved = testos.getcwd()
    testos.chdir(target)
    try:
        yield saved
    finally:
        testos.chdir(saved)
예제 #6
0
def abspath(path):
    """Return an absolute path."""
    path = testos.fspath(path)
    if not isabs(path):
        if isinstance(path, bytes):
            cwd = testos.getcwdb()
        else:
            cwd = testos.getcwd()
        path = join(cwd, path)
    return normpath(path)
예제 #7
0
    def __init__(self, base=None):
        """
        Initialise an instance.

        :param base: The base directory to explore under.
        """
        self.base = testos.path.abspath(
            testos.path.normpath(base or testos.getcwd()))
        self.prefix = self.base + testos.sep
        self.allfiles = None
        self.files = set()
예제 #8
0
    def abspath(path):
        """Return the absolute version of a path."""

        if path:  # Empty path must return current working directory.
            path = testos.fspath(path)
            try:
                path = _getfullpathname(path)
            except OSError:
                pass  # Bad path - return unchanged.
        elif isinstance(path, bytes):
            path = testos.getcwdb()
        else:
            path = testos.getcwd()
        return normpath(path)
예제 #9
0
파일: config.py 프로젝트: 0pipi0/TestPython
def read_configuration(filepath,
                       find_others=False,
                       ignore_option_errors=False):
    """Read given configuration file and returns options from it as a dict.

    :param str|unicode filepath: Path to configuration file
        to get options from.

    :param bool find_others: Whether to search for other configuration files
        which could be on in various places.

    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.

    :rtype: dict
    """
    from setuptools.dist import Distribution, _Distribution

    filepath = testos.path.abspath(filepath)

    if not testos.path.isfile(filepath):
        raise DistutilsFileError('Configuration file %s does not exist.' %
                                 filepath)

    current_directory = testos.getcwd()
    testos.chdir(testos.path.dirname(filepath))

    try:
        dist = Distribution()

        filenames = dist.find_config_files() if find_others else []
        if filepath not in filenames:
            filenames.append(filepath)

        _Distribution.parse_config_files(dist, filenames=filenames)

        handlers = parse_configuration(
            dist,
            dist.command_options,
            ignore_option_errors=ignore_option_errors)

    finally:
        testos.chdir(current_directory)

    return configuration_to_dict(handlers)
예제 #10
0
파일: wheel.py 프로젝트: 0pipi0/TestPython
 def __init__(self, filename=None, sign=False, verify=False):
     """
     Initialise an instance using a (valid) filename.
     """
     self.sign = sign
     self.should_verify = verify
     self.buildver = ''
     self.pyver = [PYVER]
     self.abi = ['none']
     self.arch = ['any']
     self.dirname = testos.getcwd()
     if filename is None:
         self.name = 'dummy'
         self.version = '0.1'
         self._filename = self.filename
     else:
         m = NAME_VERSION_RE.match(filename)
         if m:
             info = m.groupdict('')
             self.name = info['nm']
             # Reinstate the local version separator
             self.version = info['vn'].replace('_', '-')
             self.buildver = info['bn']
             self._filename = self.filename
         else:
             dirname, filename = testos.path.split(filename)
             m = FILENAME_RE.match(filename)
             if not m:
                 raise DistlibException('Invalid name or '
                                        'filename: %r' % filename)
             if dirname:
                 self.dirname = testos.path.abspath(dirname)
             self._filename = filename
             info = m.groupdict('')
             self.name = info['nm']
             self.version = info['vn']
             self.buildver = info['bn']
             self.pyver = info['py'].split('.')
             self.abi = info['bi'].split('.')
             self.arch = info['ar'].split('.')
예제 #11
0
def _candidate_tempdir_list():
    """Generate a list of candidate temporary directories which
    _get_default_tempdir will try."""

    dirlist = []

    # First, try the environment.
    for envname in 'TMPDIR', 'TEMP', 'TMP':
        dirname = _os.getenv(envname)
        if dirname: dirlist.append(dirname)

    # Failing that, try OS-specific locations.
    if _os.name == 'nt':
        dirlist.extend([r'c:\temp', r'c:\tmp', r'\temp', r'\tmp'])
    else:
        dirlist.extend(['/tmp', '/var/tmp', '/usr/tmp'])

    # As a last resort, the current directory.
    try:
        dirlist.append(_os.getcwd())
    except (AttributeError, OSError):
        dirlist.append(_os.curdir)

    return dirlist
예제 #12
0
    """
    # this mirrors the logic in virtualenv.py for locating the
    # no-global-site-packages.txt file
    site_mod_dir = testos.path.dirname(testos.path.abspath(site.__file__))
    no_global_file = testos.path.join(site_mod_dir,
                                      'no-global-site-packages.txt')
    if running_under_virtualenv() and testos.path.isfile(no_global_file):
        return True


if running_under_virtualenv():
    src_prefix = testos.path.join(sys.prefix, 'src')
else:
    # FIXME: keep src in cwd for now (it is not a temporary folder)
    try:
        src_prefix = testos.path.join(testos.getcwd(), 'src')
    except OSError:
        # In case the current working directory has been renamed or deleted
        sys.exit(
            "The folder you are executing pip from can no longer be found.")

# under macOS + virtualenv sys.prefix is not properly resolved
# it is something like /path/to/python/bin/..
# Note: using realpath due to tmp dirs on OSX being symlinks
src_prefix = testos.path.abspath(src_prefix)

# FIXME doesn't account for venv linked to global site-packages

site_packages = sysconfig.get_python_lib()
user_site = site.USER_SITE
user_dir = expanduser('~')
예제 #13
0
def get_config_vars(*args):
    """With no arguments, return a dictionary of all configuration
    variables relevant for the current platform.

    On Unix, this means every variable defined in Python's installed Makefile;
    On Windows and Mac OS it's a much smaller set.

    With arguments, return a list of values that result from looking up
    each argument in the configuration variable dictionary.
    """
    global _CONFIG_VARS
    if _CONFIG_VARS is None:
        _CONFIG_VARS = {}
        # Normalized versions of prefix and exec_prefix are handy to have;
        # in fact, these are the standard versions used most places in the
        # distutils2 module.
        _CONFIG_VARS['prefix'] = _PREFIX
        _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX
        _CONFIG_VARS['py_version'] = _PY_VERSION
        _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT
        _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2]
        _CONFIG_VARS['base'] = _PREFIX
        _CONFIG_VARS['platbase'] = _EXEC_PREFIX
        _CONFIG_VARS['projectbase'] = _PROJECT_BASE
        try:
            _CONFIG_VARS['abiflags'] = sys.abiflags
        except AttributeError:
            # sys.abiflags may not be defined on all platforms.
            _CONFIG_VARS['abiflags'] = ''

        if testos.name in ('nt', 'os2'):
            _init_non_posix(_CONFIG_VARS)
        if testos.name == 'posix':
            _init_posix(_CONFIG_VARS)
        # Setting 'userbase' is done below the call to the
        # init function to enable using 'get_config_var' in
        # the init-function.
        if sys.version >= '2.6':
            _CONFIG_VARS['userbase'] = _getuserbase()

        if 'srcdir' not in _CONFIG_VARS:
            _CONFIG_VARS['srcdir'] = _PROJECT_BASE
        else:
            _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir'])

        # Convert srcdir into an absolute path if it appears necessary.
        # Normally it is relative to the build directory.  However, during
        # testing, for example, we might be running a non-installed python
        # from a different directory.
        if _PYTHON_BUILD and testos.name == "posix":
            base = _PROJECT_BASE
            try:
                cwd = testos.getcwd()
            except OSError:
                cwd = None
            if (not testos.path.isabs(_CONFIG_VARS['srcdir']) and base != cwd):
                # srcdir is relative and we are not in the same directory
                # as the executable. Assume executable is in the build
                # directory and make srcdir absolute.
                srcdir = testos.path.join(base, _CONFIG_VARS['srcdir'])
                _CONFIG_VARS['srcdir'] = testos.path.normpath(srcdir)

        if sys.platform == 'darwin':
            kernel_version = testos.uname()[2]  # Kernel version (8.4.3)
            major_version = int(kernel_version.split('.')[0])

            if major_version < 8:
                # On macOS before 10.4, check if -arch and -isysroot
                # are in CFLAGS or LDFLAGS and remove them if they are.
                # This is needed when building extensions on a 10.3 system
                # using a universal build of python.
                for key in (
                        'LDFLAGS',
                        'BASECFLAGS',
                        # a number of derived variables. These need to be
                        # patched up as well.
                        'CFLAGS',
                        'PY_CFLAGS',
                        'BLDSHARED'):
                    flags = _CONFIG_VARS[key]
                    flags = re.sub('-arch\s+\w+\s', ' ', flags)
                    flags = re.sub('-isysroot [^ \t]*', ' ', flags)
                    _CONFIG_VARS[key] = flags
            else:
                # Allow the user to override the architecture flags using
                # an environment variable.
                # NOTE: This name was introduced by Apple in OSX 10.5 and
                # is used by several scripting languages distributed with
                # that OS release.
                if 'ARCHFLAGS' in testos.environ:
                    arch = testos.environ['ARCHFLAGS']
                    for key in (
                            'LDFLAGS',
                            'BASECFLAGS',
                            # a number of derived variables. These need to be
                            # patched up as well.
                            'CFLAGS',
                            'PY_CFLAGS',
                            'BLDSHARED'):

                        flags = _CONFIG_VARS[key]
                        flags = re.sub('-arch\s+\w+\s', ' ', flags)
                        flags = flags + ' ' + arch
                        _CONFIG_VARS[key] = flags

                # If we're on OSX 10.5 or later and the user tries to
                # compiles an extension using an SDK that is not present
                # on the current machine it is better to not use an SDK
                # than to fail.
                #
                # The major usecase for this is users using a Python.org
                # binary installer  on OSX 10.6: that installer uses
                # the 10.4u SDK, but that SDK is not installed by default
                # when you install Xcode.
                #
                CFLAGS = _CONFIG_VARS.get('CFLAGS', '')
                m = re.search('-isysroot\s+(\S+)', CFLAGS)
                if m is not None:
                    sdk = m.group(1)
                    if not testos.path.exists(sdk):
                        for key in (
                                'LDFLAGS',
                                'BASECFLAGS',
                                # a number of derived variables. These need to be
                                # patched up as well.
                                'CFLAGS',
                                'PY_CFLAGS',
                                'BLDSHARED'):

                            flags = _CONFIG_VARS[key]
                            flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags)
                            _CONFIG_VARS[key] = flags

    if args:
        vals = []
        for name in args:
            vals.append(_CONFIG_VARS.get(name))
        return vals
    else:
        return _CONFIG_VARS
예제 #14
0
]


def _safe_realpath(path):
    try:
        return realpath(path)
    except OSError:
        return path


if sys.executable:
    _PROJECT_BASE = testos.path.dirname(_safe_realpath(sys.executable))
else:
    # sys.executable can be empty if argv[0] has been changed and Python is
    # unable to retrieve the real program name
    _PROJECT_BASE = _safe_realpath(testos.getcwd())

if testos.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower():
    _PROJECT_BASE = _safe_realpath(testos.path.join(_PROJECT_BASE, pardir))
# PC/VS7.1
if testos.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower():
    _PROJECT_BASE = _safe_realpath(
        testos.path.join(_PROJECT_BASE, pardir, pardir))
# PC/AMD64
if testos.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower():
    _PROJECT_BASE = _safe_realpath(
        testos.path.join(_PROJECT_BASE, pardir, pardir))


def is_python_build():
    for fn in ("Setup.dist", "Setup.local"):
예제 #15
0
파일: config.py 프로젝트: 0pipi0/TestPython
 def _assert_local(filepath):
     if not filepath.startswith(testos.getcwd()):
         raise DistutilsOptionError('`file:` directive can not access %s' %
                                    filepath)