def _prepare_wheel_building_kwargs(ireq): download_dir = os.path.join(CACHE_DIR, "pkgs") mkdir_p(download_dir) wheel_download_dir = os.path.join(CACHE_DIR, "wheels") mkdir_p(wheel_download_dir) if ireq.source_dir is not None: src_dir = ireq.source_dir elif ireq.editable: src_dir = _get_src_dir() else: src_dir = create_tracked_tempdir(prefix="reqlib-src") # This logic matches pip's behavior, although I don't fully understand the # intention. I guess the idea is to build editables in-place, otherwise out # of the source tree? if ireq.editable: build_dir = src_dir else: build_dir = create_tracked_tempdir(prefix="reqlib-build") return { "build_dir": build_dir, "src_dir": src_dir, "download_dir": download_dir, "wheel_download_dir": wheel_download_dir, }
def start_resolver(finder=None, session=None, wheel_cache=None): """Context manager to produce a resolver. :param finder: A package finder to use for searching the index :type finder: :class:`~pip._internal.index.PackageFinder` :param :class:`~requests.Session` session: A session instance :param :class:`~pip._internal.cache.WheelCache` wheel_cache: A pip WheelCache instance :return: A 3-tuple of finder, preparer, resolver :rtype: (:class:`~pip._internal.operations.prepare.RequirementPreparer`, :class:`~pip._internal.resolve.Resolver`) """ pip_command = get_pip_command() pip_options = get_pip_options(pip_command=pip_command) session = None if not finder: session, finder = get_finder(pip_command=pip_command, pip_options=pip_options) if not session: session = pip_command._build_session(pip_options) if not wheel_cache: wheel_cache = WHEEL_CACHE _ensure_dir(fs_str(os.path.join(wheel_cache.cache_dir, "wheels"))) download_dir = PKGS_DOWNLOAD_DIR _ensure_dir(download_dir) _build_dir = create_tracked_tempdir(fs_str("build")) _source_dir = create_tracked_tempdir(fs_str("source")) try: with pip_shims.shims.make_preparer( options=pip_options, finder=finder, session=session, build_dir=_build_dir, src_dir=_source_dir, download_dir=download_dir, wheel_download_dir=WHEEL_DOWNLOAD_DIR, progress_bar="off", build_isolation=False, install_cmd=pip_command, ) as preparer: resolver = pip_shims.shims.get_resolver( finder=finder, ignore_dependencies=False, ignore_requires_python=True, preparer=preparer, session=session, options=pip_options, install_cmd=pip_command, wheel_cache=wheel_cache, force_reinstall=True, ignore_installed=True, upgrade_strategy="to-satisfy-only", isolated=False, use_user_site=False, ) yield resolver finally: session.close()
def _prepare_wheel_building_kwargs(ireq=None, src_root=None, src_dir=None, editable=False): # type: (Optional[InstallRequirement], Optional[AnyStr], Optional[AnyStr], bool) -> Dict[AnyStr, AnyStr] download_dir = os.path.join(CACHE_DIR, "pkgs") # type: STRING_TYPE mkdir_p(download_dir) wheel_download_dir = os.path.join(CACHE_DIR, "wheels") # type: STRING_TYPE mkdir_p(wheel_download_dir) if src_dir is None: if editable and src_root is not None: src_dir = src_root elif ireq is None and src_root is not None: src_dir = _get_src_dir(root=src_root) # type: STRING_TYPE elif ireq is not None and ireq.editable and src_root is not None: src_dir = _get_src_dir(root=src_root) else: src_dir = create_tracked_tempdir(prefix="reqlib-src") # Let's always resolve in isolation if src_dir is None: src_dir = create_tracked_tempdir(prefix="reqlib-src") build_dir = create_tracked_tempdir(prefix="reqlib-build") return { "build_dir": build_dir, "src_dir": src_dir, "download_dir": download_dir, "wheel_download_dir": wheel_download_dir, }
def start_resolver(finder=None, wheel_cache=None): """Context manager to produce a resolver. :param finder: A package finder to use for searching the index :type finder: :class:`~pip._internal.index.PackageFinder` :return: A 3-tuple of finder, preparer, resolver :rtype: (:class:`~pip._internal.operations.prepare.RequirementPreparer`, :class:`~pip._internal.resolve.Resolver`) """ pip_command = get_pip_command() pip_options = get_pip_options(pip_command=pip_command) if not finder: finder = get_finder(pip_command=pip_command, pip_options=pip_options) if not wheel_cache: wheel_cache = WHEEL_CACHE _ensure_dir(fs_str(os.path.join(wheel_cache.cache_dir, "wheels"))) download_dir = PKGS_DOWNLOAD_DIR _ensure_dir(download_dir) _build_dir = create_tracked_tempdir(fs_str("build")) _source_dir = create_tracked_tempdir(fs_str("source")) preparer = partialclass( RequirementPreparer, build_dir=_build_dir, src_dir=_source_dir, download_dir=download_dir, wheel_download_dir=WHEEL_DOWNLOAD_DIR, progress_bar="off", build_isolation=False, ) resolver = partialclass( Resolver, finder=finder, session=finder.session, upgrade_strategy="to-satisfy-only", force_reinstall=True, ignore_dependencies=False, ignore_requires_python=True, ignore_installed=True, isolated=False, wheel_cache=wheel_cache, use_user_site=False, ) try: if packaging.version.parse(pip_version) >= packaging.version.parse( '18'): with RequirementTracker() as req_tracker: preparer = preparer(req_tracker=req_tracker) yield resolver(preparer=preparer) else: preparer = preparer() yield resolver(preparer=preparer) finally: finder.session.close()
def _create_tracked_dir(): tmp_location = os.environ.get("TEMP", os.environ.get("TMP")) temp_args = {"prefix": "pipenv-", "suffix": "-test"} if tmp_location is not None: temp_args["dir"] = tmp_location temp_path = create_tracked_tempdir(**temp_args) return temp_path
def get_checkout_dir(self, src_dir=None): src_dir = os.environ.get('PIP_SRC', None) if not src_dir else src_dir checkout_dir = None if self.is_local: path = self.path if not path: path = url_to_path(self.uri) if path and os.path.exists(path): checkout_dir = os.path.abspath(path) return checkout_dir return os.path.join(create_tracked_tempdir(prefix="requirementslib"), self.name)
def ensure_setup_py(base_dir): if not base_dir: base_dir = create_tracked_tempdir(prefix="requirementslib-setup") base_dir = Path(base_dir) setup_py = base_dir.joinpath("setup.py") is_new = False if setup_py.exists() else True if not setup_py.exists(): setup_py.write_text(u"") try: yield finally: if is_new: setup_py.unlink()
def _get_src_dir(root): # type: (AnyStr) -> AnyStr src = os.environ.get("PIP_SRC") if src: return src virtual_env = os.environ.get("VIRTUAL_ENV") if virtual_env is not None: return os.path.join(virtual_env, "src") if root is not None: # Intentionally don't match pip's behavior here -- this is a temporary copy src_dir = create_tracked_tempdir(prefix="requirementslib-", suffix="-src") else: src_dir = os.path.join(root, "src") return src_dir
def locked_vcs_repo(self, src_dir=None): if not src_dir: src_dir = create_tracked_tempdir(prefix="requirementslib-", suffix="-src") vcsrepo = self.get_vcs_repo(src_dir=src_dir) self.req.revision = vcsrepo.get_commit_hash() # Remove potential ref in the end of uri after ref is parsed if "@" in self.link.show_url and "@" in self.uri: uri, ref = self.uri.rsplit("@", 1) checkout = self.req.revision if checkout and ref in checkout: self.uri = uri yield vcsrepo self._repo = vcsrepo
def ensure_setup_py(base): # type: (STRING_TYPE) -> Generator[None, None, None] if not base: base = create_tracked_tempdir(prefix="requirementslib-setup") base_dir = Path(base) if base_dir.exists() and base_dir.name == "setup.py": base_dir = base_dir.parent elif not (base_dir.exists() and base_dir.is_dir()): base_dir = base_dir.parent if not (base_dir.exists() and base_dir.is_dir()): base_dir = base_dir.parent setup_py = base_dir.joinpath("setup.py") is_new = False if setup_py.exists() else True if not setup_py.exists(): setup_py.write_text(u"") try: yield finally: if is_new: setup_py.unlink()