diff --git a/micropip/transaction.py b/micropip/transaction.py index 42b326e..bf0cd5e 100644 --- a/micropip/transaction.py +++ b/micropip/transaction.py @@ -6,7 +6,7 @@ from importlib.metadata import PackageNotFoundError from urllib.parse import urlparse -from packaging.requirements import Requirement +from packaging.requirements import InvalidRequirement, Requirement from packaging.utils import canonicalize_name from . import package_index @@ -72,18 +72,26 @@ async def gather_requirements( await asyncio.gather(*requirement_promises) async def add_requirement(self, req: str | Requirement) -> None: - req = self.constrain_requirement( - req if isinstance(req, Requirement) else Requirement(req) - ) + if isinstance(req, Requirement): + return await self.add_requirement_inner(req) - if req.url and urlparse(req.url).path.endswith(".whl"): + try: + req = self.constrain_requirement(Requirement(req)) + url = req.url + except InvalidRequirement: + url = f"{req}" + + if not (url and urlparse(url).path.endswith(".whl")): + return await self.add_requirement_inner( + req if isinstance(req, Requirement) else Requirement(req) + ) + + if url: # custom download location - wheel = WheelInfo.from_url(req.url) + wheel = WheelInfo.from_url(url) check_compatible(wheel.filename) return await self.add_wheel(wheel, extras=set(), specifier="") - await self.add_requirement_inner(req) - def check_version_satisfied(self, req: Requirement) -> tuple[bool, str]: ver = None try: