1
0

pyinstaller build: follow-up: dirty hack for duplicate plugins

Ah ok, I give up for now... the prev does not really work.

The prior commit works on Windows but not on macOS.
On Windows, it would package all plugins as code and only as code.
On MacOS however, it would not package any plugins at all. And with this commit,
where I mark the plugins folder to be packaged as *data*, it packages all plugins as *both* code and data.
Not sure why.

Let's just package all plugins as both code and data, and ignore the code instances explicitly...
This commit is contained in:
SomberNight
2023-11-30 11:34:27 +00:00
parent 4cc9ef2078
commit 0912e5615d
3 changed files with 7 additions and 0 deletions

View File

@@ -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')

View File

@@ -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')

View File

@@ -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 ?!