Browse Source

update pyinstaller scripts for python3 and pyinstaller3 (credit: bauerj)

seed_v14
ThomasV 8 years ago
parent
commit
b5338006f0
  1. 22
      contrib/build-wine/build-electrum-git.sh
  2. 48
      contrib/build-wine/deterministic.spec
  3. 29
      contrib/build-wine/prepare-wine.sh
  4. 5
      electrum

22
contrib/build-wine/build-electrum-git.sh

@ -5,11 +5,16 @@ ELECTRUM_GIT_URL=git://github.com/spesmilo/electrum.git
BRANCH=master BRANCH=master
NAME_ROOT=electrum NAME_ROOT=electrum
if [ "$#" -gt 0 ]; then
BRANCH="$1"
fi
# These settings probably don't need any change # These settings probably don't need any change
export WINEPREFIX=/opt/wine64 export WINEPREFIX=/opt/wine64
export PYTHONHASHSEED=22
PYHOME=c:/python27 PYHOME=c:/python34
PYTHON="wine $PYHOME/python.exe -OO -B" PYTHON="wine $PYHOME/python.exe -OO -B"
@ -42,22 +47,23 @@ rm -rf $WINEPREFIX/drive_c/electrum
cp -r electrum-git $WINEPREFIX/drive_c/electrum cp -r electrum-git $WINEPREFIX/drive_c/electrum
cp electrum-git/LICENCE . cp electrum-git/LICENCE .
# add python packages (built with make_packages)
cp -r ../../../packages $WINEPREFIX/drive_c/electrum/
# add locale dir # add locale dir
cp -r ../../../lib/locale $WINEPREFIX/drive_c/electrum/lib/ cp -r ../../../lib/locale $WINEPREFIX/drive_c/electrum/lib/
# Build Qt resources # Build Qt resources
wine $WINEPREFIX/drive_c/Python27/Lib/site-packages/PyQt4/pyrcc4.exe C:/electrum/icons.qrc -o C:/electrum/lib/icons_rc.py wine $WINEPREFIX/drive_c/Python34/Lib/site-packages/PyQt4/pyrcc4.exe C:/electrum/icons.qrc -o C:/electrum/gui/qt/icons_rc.py -py3
wine $WINEPREFIX/drive_c/Python27/Lib/site-packages/PyQt4/pyrcc4.exe C:/electrum/icons.qrc -o C:/electrum/gui/qt/icons_rc.py
pushd $WINEPREFIX/drive_c/electrum
$PYTHON setup.py install
popd
cd .. cd ..
rm -rf dist/ rm -rf dist/
# build standalone version # build standalone version
$PYTHON "C:/pyinstaller/pyinstaller.py" --noconfirm --ascii --name $NAME_ROOT-$VERSION.exe -w deterministic.spec wine "C:/python34/scripts/pyinstaller.exe" --noconfirm --ascii --name $NAME_ROOT-$VERSION.exe -w deterministic.spec
# build NSIS installer # build NSIS installer
# $VERSION could be passed to the electrum.nsi script, but this would require some rewriting in the script iself. # $VERSION could be passed to the electrum.nsi script, but this would require some rewriting in the script iself.
@ -72,6 +78,6 @@ cp portable.patch $WINEPREFIX/drive_c/electrum
pushd $WINEPREFIX/drive_c/electrum pushd $WINEPREFIX/drive_c/electrum
patch < portable.patch patch < portable.patch
popd popd
$PYTHON "C:/pyinstaller/pyinstaller.py" --noconfirm --ascii --name $NAME_ROOT-$VERSION-portable.exe -w deterministic.spec wine "C:/python34/scripts/pyinstaller.exe" --noconfirm --ascii --name $NAME_ROOT-$VERSION-portable.exe -w deterministic.spec
echo "Done." echo "Done."

48
contrib/build-wine/deterministic.spec

@ -27,47 +27,17 @@ a = Analysis([home+'electrum',
home+'plugins/trezor/qt.py', home+'plugins/trezor/qt.py',
home+'plugins/keepkey/qt.py', home+'plugins/keepkey/qt.py',
home+'plugins/ledger/qt.py', home+'plugins/ledger/qt.py',
home+'packages/requests/utils.py' #home+'packages/requests/utils.py'
], ],
pathex=[home+'lib', home+'gui', home+'plugins', home+'packages'], datas = [
hiddenimports=['lib', 'gui'], (home+'lib/currencies.json', 'electrum'),
(home+'lib/wordlist/english.txt', 'electrum/wordlist'),
#(home+'packages/requests/cacert.pem', 'requests/cacert.pem')
],
#pathex=[home+'lib', home+'gui', home+'plugins'],
#hiddenimports=["lib", "gui", "plugins", "electrum_gui.qt.icons_rc"],
hookspath=[]) hookspath=[])
##### include folder in distribution #######
def extra_datas(mydir):
def rec_glob(p, files):
import os
import glob
for d in glob.glob(p):
if os.path.isfile(d):
files.append(d)
rec_glob("%s/*" % d, files)
files = []
rec_glob("%s/*" % mydir, files)
extra_datas = []
for f in files:
d = f.split('\\')
t = ''
for a in d[2:]:
if len(t)==0:
t = a
else:
t = t+'\\'+a
extra_datas.append((t, f, 'DATA'))
return extra_datas
###########################################
# append dirs
# cacert.pem
a.datas += [ ('requests/cacert.pem', home+'packages/requests/cacert.pem', 'DATA') ]
# Py folders that are needed because of the magic import finding
a.datas += extra_datas(home+'gui')
a.datas += extra_datas(home+'lib')
a.datas += extra_datas(home+'plugins')
a.datas += extra_datas(home+'packages')
# http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal # http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal
for d in a.datas: for d in a.datas:
@ -85,7 +55,7 @@ exe = EXE(pyz,
strip=None, strip=None,
upx=False, upx=False,
icon=home+'icons/electrum.ico', icon=home+'icons/electrum.ico',
console=False) console=True)
# The console True makes an annoying black box pop up, but it does make Electrum output command line commands, with this turned off no output will be given but commands can still be used # The console True makes an annoying black box pop up, but it does make Electrum output command line commands, with this turned off no output will be given but commands can still be used
coll = COLLECT(exe, coll = COLLECT(exe,

29
contrib/build-wine/prepare-wine.sh

@ -1,19 +1,17 @@
#!/bin/bash #!/bin/bash
# Please update these links carefully, some versions won't work under Wine # Please update these links carefully, some versions won't work under Wine
PYTHON_URL=https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi PYTHON_URL=https://www.python.org/ftp/python/3.4.4/python-3.4.4.amd64.msi
PYQT4_URL=http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.1/PyQt4-4.11.1-gpl-Py2.7-Qt4.8.6-x32.exe PYWIN32_URL=https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win-amd64-py3.4.exe
PYWIN32_URL=http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/pywin32-219.win32-py2.7.exe/download PYQT4_URL=https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt4-4.11.4-gpl-Py3.4-Qt4.8.7-x64.exe
PYINSTALLER_URL=https://pypi.python.org/packages/source/P/PyInstaller/PyInstaller-2.1.zip
NSIS_URL=http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download NSIS_URL=http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download
SETUPTOOLS_URL=https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11.win32-py2.7.exe
## These settings probably don't need change ## These settings probably don't need change
export WINEPREFIX=/opt/wine64 export WINEPREFIX=/opt/wine64
#export WINEARCH='win32' #export WINEARCH='win32'
PYHOME=c:/python27 PYHOME=c:/python34
PYTHON="wine $PYHOME/python.exe -OO -B" PYTHON="wine $PYHOME/python.exe -OO -B"
# Let's begin! # Let's begin!
@ -46,10 +44,11 @@ wine pywin32.exe
wget -O PyQt.exe "$PYQT4_URL" wget -O PyQt.exe "$PYQT4_URL"
wine PyQt.exe wine PyQt.exe
# upgrade pip
$PYTHON -m pip install pip --upgrade
# Install pyinstaller # Install pyinstaller
wget -O pyinstaller.zip "$PYINSTALLER_URL" $PYTHON -m pip install pyinstaller==3.2.1
unzip pyinstaller.zip
mv PyInstaller-2.1 $WINEPREFIX/drive_c/pyinstaller
# Install ZBar # Install ZBar
#wget -q -O zbar.exe "http://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/download" #wget -q -O zbar.exe "http://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/download"
@ -66,10 +65,14 @@ $PYTHON -m pip install websocket-client
# Install setuptools # Install setuptools
wget -O setuptools.exe "$SETUPTOOLS_URL" #wget -O setuptools.exe "$SETUPTOOLS_URL"
wine setuptools.exe #wine setuptools.exe
# Upgrade setuptools (so Electrum can be installed later)
$PYTHON -m pip install setuptools --upgrade
# Install NSIS installer # Install NSIS installer
echo "Make sure to untick 'Start NSIS' and 'Show release notes'"
wget -q -O nsis.exe "$NSIS_URL" wget -q -O nsis.exe "$NSIS_URL"
wine nsis.exe wine nsis.exe
@ -79,5 +82,5 @@ wine nsis.exe
#cp upx*/upx.exe . #cp upx*/upx.exe .
# add dlls needed for pyinstaller: # add dlls needed for pyinstaller:
cp $WINEPREFIX/drive_c/windows/system32/msvcp90.dll $WINEPREFIX/drive_c/Python27/ cp $WINEPREFIX/drive_c/windows/system32/msvcp90.dll $WINEPREFIX/drive_c/Python34/
cp $WINEPREFIX/drive_c/windows/system32/msvcm90.dll $WINEPREFIX/drive_c/Python27/ cp $WINEPREFIX/drive_c/windows/system32/msvcm90.dll $WINEPREFIX/drive_c/Python34/

5
electrum

@ -90,7 +90,7 @@ if not is_android:
check_imports() check_imports()
# load local module as electrum # load local module as electrum
if is_bundle or is_local or is_android: if is_local or is_android:
import imp import imp
imp.load_module('electrum', *imp.find_module('lib')) imp.load_module('electrum', *imp.find_module('lib'))
imp.load_module('electrum_gui', *imp.find_module('gui')) imp.load_module('electrum_gui', *imp.find_module('gui'))
@ -106,6 +106,7 @@ from electrum.commands import get_parser, known_commands, Commands, config_varia
from electrum import daemon from electrum import daemon
from electrum import keystore from electrum import keystore
from electrum.mnemonic import Mnemonic from electrum.mnemonic import Mnemonic
import electrum_plugins
# get password routine # get password routine
def prompt_password(prompt, confirm=True): def prompt_password(prompt, confirm=True):
@ -292,7 +293,7 @@ def run_offline_command(config, config_options):
def init_plugins(config, gui_name): def init_plugins(config, gui_name):
from electrum.plugins import Plugins from electrum.plugins import Plugins
return Plugins(config, is_bundle or is_local or is_android, gui_name) return Plugins(config, is_local or is_android, gui_name)
if __name__ == '__main__': if __name__ == '__main__':

Loading…
Cancel
Save