# -*- mode: python -*- import sys from PyInstaller.utils.hooks import collect_data_files, collect_submodules for i, x in enumerate(sys.argv): if x == '--name': cmdline_name = sys.argv[i+1] break else: raise Exception('no name') hiddenimports = collect_submodules('trezorlib') hiddenimports += collect_submodules('btchip') hiddenimports += collect_submodules('keepkeylib') hiddenimports += collect_submodules('websocket') hiddenimports += [ 'lib', 'lib.base_wizard', 'lib.plot', 'lib.qrscanner', 'lib.websockets', 'gui.qt', 'plugins', 'plugins.hw_wallet.qt', 'plugins.audio_modem.qt', 'plugins.cosigner_pool.qt', 'plugins.digitalbitbox.qt', 'plugins.email_requests.qt', 'plugins.keepkey.qt', 'plugins.labels.qt', 'plugins.trezor.qt', 'plugins.ledger.qt', 'plugins.virtualkeyboard.qt', ] datas = [ ('lib/servers.json', 'electrum_bitcoinprivate'), ('lib/servers_testnet.json', 'electrum_bitcoinprivate'), ('lib/servers_regtest.json', 'electrum_bitcoinprivate'), ('lib/currencies.json', 'electrum_bitcoinprivate'), ('lib/locale', 'electrum_bitcoinprivate/locale'), ('lib/wordlist', 'electrum_bitcoinprivate/wordlist'), ('C:\\zbarw', '.'), ] datas += collect_data_files('trezorlib') datas += collect_data_files('btchip') datas += collect_data_files('keepkeylib') binaries = [('C:/Python36/libusb-1.0.dll', '.')] # https://github.com/pyinstaller/pyinstaller/wiki/Recipe-remove-tkinter-tcl sys.modules['FixTk'] = None excludes = ['FixTk', 'tcl', 'tk', '_tkinter', 'tkinter', 'Tkinter'] excludes += [ 'PyQt5.QtCLucene', 'PyQt5.Qt5CLucene', 'PyQt5.QtDesigner', 'PyQt5.QtDesignerComponents', 'PyQt5.QtHelp', 'PyQt5.QtLocation', 'PyQt5.QtMultimedia', 'PyQt5.QtMultimediaQuick_p', 'PyQt5.QtMultimediaWidgets', 'PyQt5.QtNetwork', 'PyQt5.QtOpenGL', 'PyQt5.QtPositioning', 'PyQt5.QtPrintSupport', 'PyQt5.QtQml', 'PyQt5.QtQuick', 'PyQt5.QtQuickParticles', 'PyQt5.QtQuickWidgets', 'PyQt5.QtSensors', 'PyQt5.QtSerialPort', 'PyQt5.QtSql', 'PyQt5.Qt5Sql', 'PyQt5.QtTest', 'PyQt5.QtWebChannel', 'PyQt5.QtWebKit', 'PyQt5.QtWebKitWidgets', 'PyQt5.QtWebSockets', 'PyQt5.QtXml', 'PyQt5.QtXmlPatterns', 'PyQt5.QtWebProcess', 'PyQt5.QtWinExtras', ] a = Analysis(['electrum-bitcoinprivate'], pathex=['plugins'], hiddenimports=hiddenimports, datas=datas, binaries=binaries, excludes=excludes, runtime_hooks=['pyi_runtimehook.py']) # http://stackoverflow.com/questions/19055089/ for d in a.datas: if 'pyconfig' in d[0]: a.datas.remove(d) break # Add TOC to electrum_bitcoinprivate, electrum_bitcoinprivate_gui, electrum_bitcoinprivate_plugins for p in sorted(a.pure): if p[0].startswith('lib') and p[2] == 'PYMODULE': a.pure += [('electrum_bitcoinprivate%s' % p[0][3:] , p[1], p[2])] if p[0].startswith('gui') and p[2] == 'PYMODULE': a.pure += [('electrum_bitcoinprivate_gui%s' % p[0][3:] , p[1], p[2])] if p[0].startswith('plugins') and p[2] == 'PYMODULE': a.pure += [('electrum_bitcoinprivate_plugins%s' % p[0][7:] , p[1], p[2])] pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts, exclude_binaries=True, debug=False, strip=False, upx=False, console=False, icon='icons/electrum-bitcoinprivate.ico', name=os.path.join('build\\pyi.win32\\electrum', cmdline_name)) # exe with console output conexe = EXE(pyz, a.scripts, exclude_binaries=True, debug=False, strip=False, upx=False, console=True, icon='icons/electrum-bitcoinprivate.ico', name=os.path.join('build\\pyi.win32\\electrum', 'console-%s' % cmdline_name)) # trezorctl separate executable tctl_a = Analysis(['C:/Python36/Scripts/trezorctl'], hiddenimports=['pkgutil'], excludes=excludes, runtime_hooks=['pyi_tctl_runtimehook.py']) tctl_pyz = PYZ(tctl_a.pure) tctl_exe = EXE(tctl_pyz, tctl_a.scripts, exclude_binaries=True, debug=False, strip=False, upx=False, console=True, name=os.path.join('build\\pyi.win32\\electrum', 'trezorctl.exe')) coll = COLLECT(exe, conexe, tctl_exe, a.binaries, a.datas, strip=False, upx=False, name=os.path.join('dist', 'electrum-bitcoinprivate'))