list_plugin_distinfo() keeps unregistered plugins
Maintainers usually reply within 1 day
@RonnyPfannschmidt is already working on this.
Since Oct 9, 2026.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 35/100
Research direction
Start in unregister() and in load_setuptools_entrypoints(), which appends to _plugin_distinfo, then check what list_plugin_distinfo() and list_plugin_distributions() return after a plugin is unregistered. Linked PR #764 was closed without merging, so read its discussion before starting. Done means unregistering a plugin removes its distinfo entries and re-registering it through entry points adds no duplicate.
Written by the indexing model from the issue text.
Description
🤖 Written by Claude Opus 5.5 via Claude Code for the pluggy maintainers; I prompted it, it did the work, I read it.
load_setuptools_entrypoints() appends to _plugin_distinfo, but unregister() never removes those entries. After unregistering, list_plugin_distinfo() and list_plugin_distributions() still list the plugin, and that list feeds pytest's "plugins:" header. Re-registering through entry points then adds a duplicate entry.
Confirmed by reading the code and a synthetic repro, not by a real entry-point load.
Proposal: drop the plugin's entries in unregister().
Found while working on #759.
- Dominant language
- Python
- Stars
- 1.7k
- Forks
- 172
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 21
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from pytest-dev/pluggy
-
Plugin registry compares plugins by equality, not identityPossibly taken @00200200 claimed this 1 day ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
pytest-dev/pluggy#760 ·
Maintainers usually reply within 1 day
-
Defaulted positional-only hook parameters are forwarded as keywordsPossibly taken @adenzhou1350 claimed this 1 day ago. Open
Difficulty 4/5 1-2 days Newbie friendliness 45/100
pytest-dev/pluggy#774 · 1 comment ·
Maintainers usually reply within 1 day
-
unregister() argument validation relies on assertPossibly taken @ekanshul claimed this 3 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 42/100
pytest-dev/pluggy#762 ·
Maintainers usually reply within 1 day
-
Failures during add_hookspecs / historic replay leave partial statePossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 3/5 1-2 days Newbie friendliness 50/100
pytest-dev/pluggy#761 ·
Maintainers usually reply within 1 day
-
[Downstream] devpi broken - trying to register `None`Possibly taken @bluetech claimed this 12 days ago. Open
Difficulty 3/5 1-2 days Newbie friendliness 58/100
pytest-dev/pluggy#749 · 4 comments ·
Maintainers usually reply within 1 day
All issues in pytest-dev/pluggy
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
spec-kitty/spec-kitty#6112 ·
Maintainers usually reply within 1 day
-
[Bug]: OpenRouter streaming chunks report the requested router name instead of the model OpenRouter servedPossibly taken @Mrun25 claimed this today. Openbug llm translation
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
BerriAI/litellm#46095 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
uberdeveloper/fastbt#29 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
andrew-blake/melcloudhome#368 ·
Maintainers usually reply within 1 day
-
lane:discover
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SPARDiffData/differential-data-collection#33 ·
Maintainers usually reply within 1 day