diff --git a/contrib/build-wine/deterministic.spec b/contrib/build-wine/deterministic.spec index 92204104d..23fe939ff 100644 --- a/contrib/build-wine/deterministic.spec +++ b/contrib/build-wine/deterministic.spec @@ -29,6 +29,7 @@ datas = [ (home+'electrum/wordlist/english.txt', 'electrum/wordlist'), (home+'electrum/wordlist/slip39.txt', 'electrum/wordlist'), (home+'electrum/locale', 'electrum/locale'), + (home+'electrum/plugins', 'electrum/plugins'), (home+'electrum/gui/icons', 'electrum/gui/icons'), ] datas += collect_data_files('electrum.plugins') diff --git a/contrib/osx/osx.spec b/contrib/osx/osx.spec index d8433c36f..143d7602f 100644 --- a/contrib/osx/osx.spec +++ b/contrib/osx/osx.spec @@ -29,6 +29,7 @@ datas = [ (electrum + PYPKG + '/wordlist/english.txt', PYPKG + '/wordlist'), (electrum + PYPKG + '/wordlist/slip39.txt', PYPKG + '/wordlist'), (electrum + PYPKG + '/locale', PYPKG + '/locale'), + (electrum + PYPKG + '/plugins', PYPKG + '/plugins'), (electrum + PYPKG + '/gui/icons', PYPKG + '/gui/icons'), ] datas += collect_data_files('electrum.plugins') diff --git a/electrum/plugin.py b/electrum/plugin.py index 4be5d323d..e24a8effb 100644 --- a/electrum/plugin.py +++ b/electrum/plugin.py @@ -82,6 +82,11 @@ class Plugins(DaemonThread): cls._all_found_plugins = dict() iter_modules = list(pkgutil.iter_modules([cls.pkgpath])) for loader, name, ispkg in iter_modules: + # FIXME pyinstaller binaries are packaging each built-in plugin twice: + # once as data and once as code. To honor the "no duplicates" rule below, + # we exclude the ones packaged as *code*, here: + if loader.__class__.__qualname__ == "FrozenImporter": + continue full_name = f'electrum.plugins.{name}' spec = importlib.util.find_spec(full_name) if spec is None: # pkgutil found it but importlib can't ?!