Repository navigation
[3.10] Package names with different metadata types aren't deduplicated #99130
Description
Activity
- addedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Nov 5, 2022 According to the compatibility matrix, Python 3.10 was synced at importlib_metadata 4.4. I'll confirm that's the case and then plan to backport the fix to importlib_metadata 4.4.x.
I can see in GH-31854, Python 3.10 got synced with importlib_metadata 4.11.3, so that should make the fix easier.
I can see in GH-31854, Python 3.10 got synced with importlib_metadata 4.11.3, so that should make the fix easier.
It's not that simple. Some bugfixes were backported, but other changes from importlib_metadata 4.5-4.11 were not, so there's no place on the importlib_metadata cpython branch that corresponds to what's in CPython 3.10.
This complicated scenario is a consequence of CPython's branching strategy, which only allows for squash merges (so it's not possible to merge importlib_metadata into cpython) and only allows for manual backports (no relation between the history in version branches and main).
It looks like python/importlib_metadata@ba30e9b corresponds most closely to where CPython 3.10 was synced. To that commit I've applied the other bugfixes as found in CPython 3.10.8 as python/importlib_metadata@996308821b. Against that commit, I'm applying the changes from the merge requests that comprised 4.11.4:
importlib_metadata maint/cpython/3.10 $ git cherry-pick -m 1 a92fbf3f500d98fbc419157a67d37608f92ea944 CONFLICT (modify/delete): CHANGES.rst deleted in HEAD and modified in a92fbf3f50 (Merge pull request #379 from python/bugfix/egg-on-face). Version a92fbf3f50 (Merge pull request #379 from python/bugfix/egg-on-face) of CHANGES.rst left in tree. Auto-merging Lib/importlib/metadata/__init__.py error: could not apply a92fbf3f50... Merge pull request #379 from python/bugfix/egg-on-face hint: After resolving the conflicts, mark them with hint: "git add/rm <pathspec>", then run hint: "git cherry-pick --continue". hint: You can instead skip this commit with "git cherry-pick --skip". hint: To abort and get back to the state before "git cherry-pick", hint: run "git cherry-pick --abort". importlib_metadata maint/cpython/3.10 $ git mergetool Merging: CHANGES.rst Deleted merge conflict for 'CHANGES.rst': {local}: deleted {remote}: modified file Use (m)odified or (d)eleted file, or (a)bort? d importlib_metadata maint/cpython/3.10 $ git cherry-pick --continue [maint/cpython/3.10 648c868e2b] Merge pull request #379 from python/bugfix/egg-on-face Date: Sat May 21 11:02:35 2022 -0400 1 file changed, 12 insertions(+), 3 deletions(-) importlib_metadata maint/cpython/3.10 $ git cherry-pick -m 1 2ee86fc0c4607fe1e506b91d12375fd7f32aa86a CONFLICT (modify/delete): CHANGES.rst deleted in HEAD and modified in 2ee86fc0c4 (Merge pull request #381 from python/bugfix/entry-points-unique-normalized). Version 2ee86fc0c4 (Merge pull request #381 from python/bugfix/entry-points-unique-normalized) of CHANGES.rst left in tree. Auto-merging Lib/importlib/metadata/__init__.py Auto-merging Lib/test/test_importlib/test_metadata_api.py CONFLICT (content): Merge conflict in Lib/test/test_importlib/test_metadata_api.py error: could not apply 2ee86fc0c4... Merge pull request #381 from python/bugfix/entry-points-unique-normalized hint: After resolving the conflicts, mark them with hint: "git add/rm <pathspec>", then run hint: "git cherry-pick --continue". hint: You can instead skip this commit with "git cherry-pick --skip". hint: To abort and get back to the state before "git cherry-pick", hint: run "git cherry-pick --abort". importlib_metadata maint/cpython/3.10 $ git mergetool Merging: CHANGES.rst Lib/test/test_importlib/test_metadata_api.py Deleted merge conflict for 'CHANGES.rst': {local}: deleted {remote}: modified file Use (m)odified or (d)eleted file, or (a)bort? d Normal merge conflict for 'Lib/test/test_importlib/test_metadata_api.py': {local}: modified file {remote}: modified file importlib_metadata maint/cpython/3.10 $ git cherry-pick --continue [maint/cpython/3.10 1f46e76d95] Merge pull request #381 from python/bugfix/entry-points-unique-normalized Date: Sat May 21 11:42:38 2022 -0400 2 files changed, 10 insertions(+), 5 deletions(-)Drat. Looks like the second cherry-pick is dependent on python/importlib_metadata@1e19fd2.
- added a commit that references this issue
on Nov 10, 2022 Thanks for finding this, @jaraco. I merged it.
In python/importlib_metadata#377, Benoit reports that the "_normalized_name" of importlib_metadata and importlib.metadata is including an extraneous
.egg. This issue means that in environments where both.dist-infoand.egg-infoexist for a package, they're not deduplicated and the entry points are returned for both. The scenario is common and problemmatic as evidenced by other bug reports (python/importlib_metadata#410, python/importlib_metadata#413). The fix, added in importlib_metadata 4.11.4, has been ported to Python 3.11.1 in #98875, but the fix should also be backported to Python 3.10.