Browse Source

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...
master
SomberNight 2 years ago
parent
commit
0912e5615d
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 1
      contrib/build-wine/deterministic.spec
  2. 1
      contrib/osx/osx.spec
  3. 5
      electrum/plugin.py

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

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

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

Loading…
Cancel
Save