Skip to content

Commit

Permalink
Bump pip minimum version to >= 22.2 (#1729)
Browse files Browse the repository at this point in the history
  • Loading branch information
atugushev committed Nov 14, 2022
1 parent 4352316 commit dc4ba60
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 80 deletions.
24 changes: 3 additions & 21 deletions piptools/_compat/pip_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@


__all__ = [
"get_build_tracker",
"update_env_context_manager",
"dist_requires",
"uses_pkg_resources",
"Distribution",
Expand All @@ -38,33 +36,17 @@ def parse_requirements(
yield install_req_from_parsed_requirement(parsed_req, isolated=isolated)


if PIP_VERSION[:2] <= (22, 0):
from pip._internal.req.req_tracker import (
get_requirement_tracker as get_build_tracker,
)
from pip._internal.req.req_tracker import update_env_context_manager
else:
from pip._internal.operations.build.build_tracker import (
get_build_tracker,
update_env_context_manager,
)


# The Distribution interface has changed between pkg_resources and
# importlib.metadata, so this compat layer allows for a consistent access
# pattern. In pip 22.1, importlib.metadata became the default on Python 3.11
# (and later), but is overridable. `select_backend` returns what's being used.


def _uses_pkg_resources() -> bool:
from pip._internal.metadata import select_backend
from pip._internal.metadata.pkg_resources import Distribution as _Dist

if PIP_VERSION[:2] < (22, 1):
return True
else:
from pip._internal.metadata import select_backend
from pip._internal.metadata.pkg_resources import Distribution as _Dist

return select_backend().Distribution is _Dist
return select_backend().Distribution is _Dist


uses_pkg_resources = _uses_pkg_resources()
Expand Down
58 changes: 9 additions & 49 deletions piptools/repositories/pypi.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import contextlib
import hashlib
import itertools
import logging
import optparse
import os
from contextlib import contextmanager
Expand All @@ -20,6 +19,7 @@
from pip._internal.models.link import Link
from pip._internal.models.wheel import Wheel
from pip._internal.network.session import PipSession
from pip._internal.operations.build.build_tracker import get_build_tracker
from pip._internal.req import InstallRequirement, RequirementSet
from pip._internal.utils.hashes import FAVORITE_HASH
from pip._internal.utils.logging import indent_log, setup_logging
Expand All @@ -30,8 +30,6 @@
from pip._vendor.packaging.version import _BaseVersion
from pip._vendor.requests import RequestException, Session

from .._compat import PIP_VERSION
from .._compat.pip_compat import get_build_tracker
from ..exceptions import NoCandidateFound
from ..logging import log
from ..utils import (
Expand Down Expand Up @@ -94,7 +92,12 @@ def __init__(self, pip_args: list[str], cache_dir: str):
self._cache_dir = normalize_path(str(cache_dir))
self._download_dir = os.path.join(self._cache_dir, "pkgs")

self._setup_logging()
# Default pip's logger is noisy, so decrease it's verbosity
setup_logging(
verbosity=log.verbosity - 1,
no_color=self.options.no_color,
user_log_file=self.options.log,
)

def clear_caches(self) -> None:
rmtree(self._download_dir, ignore_errors=True)
Expand Down Expand Up @@ -173,20 +176,13 @@ def resolve_reqs(
"finder": self.finder,
"use_user_site": False,
"download_dir": download_dir,
"build_tracker": build_tracker,
}

if PIP_VERSION[:2] <= (22, 0):
preparer_kwargs["req_tracker"] = build_tracker
else:
preparer_kwargs["build_tracker"] = build_tracker

preparer = self.command.make_requirement_preparer(**preparer_kwargs)

reqset = RequirementSet()
ireq.user_supplied = True
if PIP_VERSION[:3] < (22, 1, 1):
reqset.add_requirement(ireq)
elif getattr(ireq, "name", None):
if getattr(ireq, "name", None):
reqset.add_named_requirement(ireq)
else:
reqset.add_unnamed_requirement(ireq)
Expand Down Expand Up @@ -446,42 +442,6 @@ def _wheel_support_index_min(self: Wheel, tags: list[Tag]) -> int:
Wheel.support_index_min = original_support_index_min
self._available_candidates_cache = original_cache

def _setup_logging(self) -> None:
"""
Setup pip's logger. Ensure pip is verbose same as pip-tools and sync
pip's log stream with LogContext.stream. This is only necessary for
pip<22.0.
"""
# Default pip's logger is noisy, so decrease it's verbosity
setup_logging(
verbosity=log.verbosity - 1,
no_color=self.options.no_color,
user_log_file=self.options.log,
)

if PIP_VERSION[0] >= 22:
return

# Sync pip's console handler stream with LogContext.stream
logger = logging.getLogger()
for handler in logger.handlers:
if handler.name == "console": # pragma: no branch
assert isinstance(handler, logging.StreamHandler)
handler.stream = log.stream
break
else: # pragma: no cover
# There is always a console handler. This warning would be a signal that
# this block should be removed/revisited, because of pip possibly
# refactored-out logging config.
log.warning("Couldn't find a 'console' logging handler")

# This import will fail with pip 22.1, but here we're pip<22.0
from pip._internal.cli.progress_bars import BAR_TYPES

# Sync pip's progress bars stream with LogContext.stream
for bar_cls in itertools.chain(*BAR_TYPES.values()):
bar_cls.file = log.stream


@contextmanager
def open_local_or_remote_file(link: Link, session: Session) -> Iterator[FileStream]:
Expand Down
13 changes: 5 additions & 8 deletions piptools/resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
import click
from pip._internal.cache import WheelCache
from pip._internal.exceptions import DistributionNotFound
from pip._internal.operations.build.build_tracker import (
get_build_tracker,
update_env_context_manager,
)
from pip._internal.req import InstallRequirement
from pip._internal.req.constructors import install_req_from_line
from pip._internal.resolution.resolvelib.base import Candidate
Expand All @@ -24,8 +28,6 @@
from piptools.cache import DependencyCache
from piptools.repositories.base import BaseRepository

from ._compat import PIP_VERSION
from ._compat.pip_compat import get_build_tracker, update_env_context_manager
from .exceptions import PipToolsError
from .logging import log
from .utils import (
Expand Down Expand Up @@ -554,13 +556,8 @@ def resolve(self, max_rounds: int = 10) -> set[InstallRequirement]:
"session": self.session,
"finder": self.finder,
"use_user_site": False,
"build_tracker": build_tracker,
}

if PIP_VERSION[:2] <= (22, 0):
preparer_kwargs["req_tracker"] = build_tracker
else:
preparer_kwargs["build_tracker"] = build_tracker

preparer = self.command.make_requirement_preparer(**preparer_kwargs)

resolver = self.command.make_resolver(
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ install_requires =
# direct dependencies
build
click >= 7
pip >= 21.2
pip >= 22.2
# indirect dependencies
setuptools # typically needed when pip-tools invokes setup.py
wheel # pip plugin needed by pip-tools
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ extras =
testing
coverage: coverage
deps =
pipprevious: pip==21.3.*
pipprevious: pip==22.2.*
piplatest: pip
pipmain: -e git+https://github.com/pypa/pip.git@main#egg=pip
setenv =
Expand Down

0 comments on commit dc4ba60

Please sign in to comment.