diff --git a/piptools/_compat/pip_compat.py b/piptools/_compat/pip_compat.py index 4405cc6d..d956ab24 100644 --- a/piptools/_compat/pip_compat.py +++ b/piptools/_compat/pip_compat.py @@ -23,7 +23,7 @@ if TYPE_CHECKING: from pip._internal.metadata.importlib import Distribution as _ImportLibDist -from ..utils import PIP_VERSION, canonicalize_ireq +from ..utils import PIP_VERSION, copy_install_requirement @dataclass(frozen=True) @@ -89,8 +89,7 @@ def parse_requirements( file_link = FileLink(install_req.link.url) file_link._url = parsed_req.requirement install_req.link = file_link - canonicalize_ireq(install_req) - yield install_req + yield copy_install_requirement(install_req) def create_wheel_cache(cache_dir: str, format_control: str | None = None) -> WheelCache: diff --git a/piptools/build.py b/piptools/build.py index 88fc0085..c19e206b 100644 --- a/piptools/build.py +++ b/piptools/build.py @@ -17,7 +17,7 @@ from pip._vendor.packaging.markers import Marker from pip._vendor.packaging.requirements import Requirement -from .utils import canonicalize_ireq, install_req_from_line +from .utils import copy_install_requirement, install_req_from_line if sys.version_info >= (3, 11): import tomllib @@ -231,7 +231,7 @@ def _prepare_requirements( replaced_package_name = req.replace(package_name, str(package_dir), 1) parts = parse_req_from_line(replaced_package_name, comes_from) - yield canonicalize_ireq( + yield copy_install_requirement( InstallRequirement( parts.requirement, comes_from, diff --git a/piptools/utils.py b/piptools/utils.py index 80a2abda..8d04f7a7 100644 --- a/piptools/utils.py +++ b/piptools/utils.py @@ -93,20 +93,8 @@ def comment(text: str) -> str: return click.style(text, fg="green") -def canonicalize_ireq(ireq: InstallRequirement) -> InstallRequirement: - """ - Return a copy of ireq with canonicalized extras strings - """ - ireq = copy_install_requirement( - ireq, extras=set(map(canonicalize_name, ireq.extras)) - ) - if ireq.req: - ireq.req.extras = set(ireq.extras) - return ireq - - def install_req_from_line(*args: Any, **kwargs: Any) -> InstallRequirement: - return canonicalize_ireq(_install_req_from_line(*args, **kwargs)) + return copy_install_requirement(_install_req_from_line(*args, **kwargs)) def make_install_requirement( @@ -536,6 +524,10 @@ def copy_install_requirement( if "req" not in kwargs: kwargs["req"] = copy.deepcopy(template.req) + kwargs["extras"] = set(map(canonicalize_name, kwargs["extras"])) + if kwargs["req"]: + kwargs["req"].extras = set(kwargs["extras"]) + ireq = InstallRequirement(**kwargs) # If the original_link was None, keep it so. Passing `link` as an