WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit edfa314

Browse files
committed
fix: discard dependency-groups when resolving with uv
Signed-off-by: Frost Ming <[email protected]>
1 parent d954e79 commit edfa314

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

src/pdm/builders/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ def check_requirements(self, reqs: Iterable[str]) -> Iterable[Requirement]:
293293
ws = WorkingSet(libs)
294294
for req in reqs:
295295
parsed_req = parse_requirement(req)
296+
parsed_req.groups = ["default"]
296297
if parsed_req.marker and not parsed_req.marker.matches(self._env.spec):
297298
logger.debug(
298299
"Skipping requirement %s: mismatching marker %s",

src/pdm/formats/uv.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ def build_pyproject_toml(self) -> Path:
3737
data = self.project.pyproject._data.unwrap()
3838
data.setdefault("project", {})["requires-python"] = self.requires_python
3939
data.setdefault("project", {})["dependencies"] = []
40+
data.pop("dependency-groups", None)
41+
data.pop("build-system", None)
4042
data.setdefault("project", {}).pop("optional-dependencies", None)
4143
sources = {}
4244
collected_deps: dict[str, list[str]] = {}
@@ -47,7 +49,9 @@ def build_pyproject_toml(self) -> Path:
4749
else:
4850
entry = dep.as_line()
4951
for group in dep.groups:
50-
collected_deps.setdefault(group, []).append(entry)
52+
collected = collected_deps.setdefault(group, [])
53+
if entry not in collected:
54+
collected.append(entry)
5155

5256
for group, deps in collected_deps.items():
5357
if group == "default":
@@ -97,13 +101,15 @@ def build_uv_lock(self, include_self: bool = False) -> Path:
97101
dependencies: list[dict[str, Any]] = []
98102
optional_dependencies: dict[str, list[dict[str, Any]]] = {}
99103
for req in self.requirements:
100-
group = req.groups[0]
101104
if (dep := self._make_dependency(None, req)) is None:
102105
continue
103-
if group == "default":
104-
dependencies.append(dep)
105-
else:
106-
optional_dependencies.setdefault(group, []).append(dep)
106+
for group in req.groups:
107+
if group == "default":
108+
target_group = dependencies
109+
else:
110+
target_group = optional_dependencies.setdefault(group, [])
111+
if dep not in target_group:
112+
target_group.append(dep)
107113
if dependencies:
108114
this_package["dependencies"] = dependencies # type: ignore[assignment]
109115
if optional_dependencies:

src/pdm/resolver/uv.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,11 @@ def make_requirement(dep: dict[str, Any]) -> str:
116116
return req.as_line()
117117

118118
for package in data["package"]:
119-
if self.project.name and package["name"] == normalize_name(self.project.name) and not self.keep_self:
119+
if (
120+
self.project.name
121+
and package["name"] == normalize_name(self.project.name)
122+
and (not self.keep_self or package["source"].get("virtual"))
123+
):
120124
continue
121125
req: Requirement
122126
if url := package["source"].get("url"):

0 commit comments

Comments
 (0)