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)
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)
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))
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)
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)
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
def urls(self, req): req = maybe_requirement(req) return [ urljoin(self._pypi_base, '%s/' % normalize_name(req.project_name)) ]