fix: Fix installing PEP 561 stub-only packages #2466
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request Checklist
news/
describing what is new.Describe what you have changed in this PR.
I have the following, very specific setup:
The
foo-bar
dependency provides a normal python modulefoo.bar
inside a namespace packagefoo
.The
foo-baz
dependency provides an extension modulefoo.baz
along with type stubs (.pyi
), also inside namespacefoo
.PDM currently mishandles those when installing with symlink support:
That's because the logic for installing namespace packages doesn't mark
foo/
in thefoo-baz
dependency as a namespace package since it not being a package at all:pdm/src/pdm/installers/installers.py
Lines 97 to 101 in 82a4574
pdm/src/pdm/installers/installers.py
Lines 67 to 69 in 82a4574
pdm/src/pdm/installers/installers.py
Lines 39 to 43 in 82a4574
I see 2 issues here with PDM not being able to detect:
.so
).pyi
) (PEP 561)This fix hopefully addresses the second issue, which is enough for my use case.
I don't know whether extension modules can be safely detected similar way by the presence of
.so
files (not all.so
files necessarily indicate a python module), so I didn't touch that one.