From 4f80ef86050b93d913669d33d3da8422577ae870 Mon Sep 17 00:00:00 2001 From: Matt Mackay Date: Wed, 22 Nov 2023 19:47:52 -0500 Subject: [PATCH] fix: resolve requirements paths relative to the requirement file they are specified in (#2422) --- news/2422.bugfix.md | 1 + src/pdm/formats/requirements.py | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 news/2422.bugfix.md diff --git a/news/2422.bugfix.md b/news/2422.bugfix.md new file mode 100644 index 0000000000..a470af4cbf --- /dev/null +++ b/news/2422.bugfix.md @@ -0,0 +1 @@ +Resolve `-r` requirements paths relative to the requirement file they are specified in \ No newline at end of file diff --git a/src/pdm/formats/requirements.py b/src/pdm/formats/requirements.py index 6f412a6ec2..a14aacfbe6 100644 --- a/src/pdm/formats/requirements.py +++ b/src/pdm/formats/requirements.py @@ -52,7 +52,7 @@ def _clean_line(self, line: str) -> str: return "" return line.split(" #", 1)[0].strip() - def _parse_line(self, line: str) -> None: + def _parse_line(self, filename: str, line: str) -> None: if not line.startswith("-"): # Starts with a requirement, just ignore all per-requirement options req_string = line.split(" -", 1)[0].strip() @@ -76,7 +76,8 @@ def _parse_line(self, line: str) -> None: if args.editable: self.requirements.append(parse_requirement(" ".join(args.editable), True)) if args.requirement: - self.parse(args.requirement) + referenced_requirements = str(Path(filename).parent.joinpath(args.requirement)) + self.parse(referenced_requirements) def parse(self, filename: str) -> None: with open(filename, encoding="utf-8") as f: @@ -86,10 +87,10 @@ def parse(self, filename: str) -> None: this_line += line[:-1].rstrip() + " " continue this_line += line - self._parse_line(this_line) + self._parse_line(filename, this_line) this_line = "" if this_line: - self._parse_line(this_line) + self._parse_line(filename, this_line) def check_fingerprint(project: Project, filename: PathLike) -> bool: