Пример #1
0
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,
    }
Пример #2
0
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()
Пример #3
0
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,
    }
Пример #4
0
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()
Пример #5
0
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
Пример #6
0
 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)
Пример #7
0
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()
Пример #8
0
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
Пример #9
0
    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
Пример #10
0
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()