コード例 #1
0
ファイル: pex.py プロジェクト: Houzz/pex
def resolve_interpreter(cache, fetchers, interpreter, requirement):
  """Resolve an interpreter with a specific requirement.

     Given a :class:`PythonInterpreter` and a requirement, return an
     interpreter with the capability of resolving that requirement or
     ``None`` if it's not possible to install a suitable requirement."""
  requirement = maybe_requirement(requirement)

  # short circuit
  if interpreter.satisfies([requirement]):
    return interpreter

  def installer_provider(sdist):
    return EggInstaller(
        Archiver.unpack(sdist),
        strict=requirement.key != 'setuptools',
        interpreter=interpreter)

  interpreter_dir = os.path.join(cache, str(interpreter.identity))
  safe_mkdir(interpreter_dir)

  egg = _resolve_and_link_interpreter(
      requirement,
      fetchers,
      os.path.join(interpreter_dir, requirement.key),
      installer_provider)

  if egg:
    return interpreter.with_extra(egg.name, egg.raw_version, egg.path)
コード例 #2
0
ファイル: pex.py プロジェクト: windie/heron
def resolve_interpreter(cache, fetchers, interpreter, requirement):
    """Resolve an interpreter with a specific requirement.

     Given a :class:`PythonInterpreter` and a requirement, return an
     interpreter with the capability of resolving that requirement or
     ``None`` if it's not possible to install a suitable requirement."""
    requirement = maybe_requirement(requirement)

    # short circuit
    if interpreter.satisfies([requirement]):
        return interpreter

    def installer_provider(sdist):
        return EggInstaller(Archiver.unpack(sdist),
                            strict=requirement.key != 'setuptools',
                            interpreter=interpreter)

    interpreter_dir = os.path.join(cache, str(interpreter.identity))
    safe_mkdir(interpreter_dir)

    egg = _resolve_and_link_interpreter(
        requirement, fetchers, os.path.join(interpreter_dir, requirement.key),
        installer_provider)

    if egg:
        return interpreter.with_extra(egg.name, egg.raw_version, egg.path)
コード例 #3
0
ファイル: resolvable.py プロジェクト: yuhonghong7035/pex
 def from_string(cls, requirement_string, options_builder, interpreter=None):
   try:
     req = maybe_requirement(requirement_string)
   except ValueError:
     raise cls.InvalidRequirement('%s does not appear to be a requirement string.' %
         requirement_string)
   return cls(req, options_builder.build(req.key))
コード例 #4
0
  def satisfies(self, requirement, allow_prereleases=None):
    """Determine whether this package matches the requirement.

    :param requirement: The requirement to compare this Package against
    :type requirement: string or :class:`pkg_resources.Requirement`
    :param Optional[bool] allow_prereleases: Whether to allow prereleases to satisfy
      the `requirement`.
    :returns: True if the package matches the requirement, otherwise False
    """
    requirement = maybe_requirement(requirement)
    link_name = safe_name(self.name).lower()
    if link_name != requirement.key:
      return False

    # NB: If we upgrade to setuptools>=34 the SpecifierSet used here (requirement.specifier) will
    # come from a non-vendored `packaging` package and pex's bootstrap code in `PEXBuilder` will
    # need an update.
    return requirement.specifier.contains(self.raw_version, prereleases=allow_prereleases)
コード例 #5
0
def resolve_interpreter(cache, fetchers, interpreter, requirement):
    requirement = maybe_requirement(requirement)

    # short circuit
    if interpreter.satisfies([requirement]):
        return interpreter

    def installer_provider(sdist):
        return EggInstaller(
            Archiver.unpack(sdist),
            strict=requirement.key != 'setuptools',
            interpreter=interpreter)

    interpreter_dir = os.path.join(cache, str(interpreter.identity))
    safe_mkdir(interpreter_dir)

    egg = _resolve_and_link_interpreter(
        requirement,
        fetchers,
        os.path.join(interpreter_dir, requirement.key),
        installer_provider)

    if egg:
        return interpreter.with_extra(egg.name, egg.raw_version, egg.path)
コード例 #6
0
 def get_location(self, req):
     req = maybe_requirement(req)
     for dist, location in self.extras.items():
         dist_name, dist_version = dist
         if req.key == dist_name and dist_version in req:
             return location
コード例 #7
0
ファイル: fetcher.py プロジェクト: zuoxiaolei/pex
 def urls(self, req):
     req = maybe_requirement(req)
     return [
         urljoin(self._pypi_base, '%s/' % normalize_name(req.project_name))
     ]