diff --git a/src/peakrdl_regblock/entry_points.py b/src/peakrdl_regblock/entry_points.py index dd8e2d7..54fabae 100644 --- a/src/peakrdl_regblock/entry_points.py +++ b/src/peakrdl_regblock/entry_points.py @@ -16,12 +16,21 @@ if sys.version_info >= (3,10,0): def _get_name_from_dist(dist: 'Distribution') -> str: return dist.name -elif sys.version_info >= (3,8,0): +elif sys.version_info >= (3,8,0): # pragma: no cover from importlib import metadata def _get_entry_points(group_name: str) -> List[Tuple['EntryPoint', 'Distribution']]: eps = [] + dist_names = set() for dist in metadata.distributions(): + # Due to a bug in importlib.metadata's distributions iterator, in + # some cases editable installs will cause duplicate dist entries. + # Filter this out. + dist_name = get_name_from_dist(dist) + if dist_name in dist_names: + continue + dist_names.add(dist_name) + for ep in dist.entry_points: if ep.group == group_name: eps.append((ep, dist)) @@ -30,7 +39,7 @@ elif sys.version_info >= (3,8,0): def _get_name_from_dist(dist: 'Distribution') -> str: return dist.metadata["Name"] -else: +else: # pragma: no cover import pkg_resources # type: ignore def _get_entry_points(group_name: str) -> List[Tuple['EntryPoint', 'Distribution']]: