Changed pyinstaller spec for PyQt5

This commit is contained in:
Dmitri Bogomolov 2020-10-20 01:27:12 +03:00
parent 7b8bf082ff
commit 18665e5b82
Signed by untrusted user: g1itch
GPG Key ID: 720A756F18DEED13

View File

@ -1,52 +1,62 @@
# -*- mode: python -*-
import ctypes import ctypes
import os import os
import time
import sys import sys
import time
if ctypes.sizeof(ctypes.c_voidp) == 4: if ctypes.sizeof(ctypes.c_voidp) == 4:
arch=32 arch = 32
else: else:
arch=64 arch = 64
# cheatsheet for PyQt5: https://www.programmersought.com/article/46115827513/
sslName = 'OpenSSL-Win%s' % ("32" if arch == 32 else "64") sslName = 'OpenSSL-Win%s' % ("32" if arch == 32 else "64")
site_root = os.path.abspath(HOMEPATH) site_root = os.path.abspath(HOMEPATH)
spec_root = os.path.abspath(SPECPATH) spec_root = os.path.abspath(SPECPATH)
cdrivePath = site_root[0:3] cdrivePath = site_root[0:3]
srcPath = os.path.join(spec_root[:-20], "src") srcPath = os.path.join(spec_root[:-20], "src")
qtBase = "PyQt4" qtBase = "PyQt5"
openSSLPath = os.path.join(cdrivePath, sslName) openSSLPath = os.path.join(cdrivePath, sslName)
msvcrDllPath = os.path.join(cdrivePath, "windows", "system32") msvcrDllPath = os.path.join(cdrivePath, "windows", "system32")
pythonDllPath = os.path.join(cdrivePath, "Python27") pythonDllPath = os.path.join(cdrivePath, "Python27")
outPath = os.path.join(spec_root, "bitmessagemain") outPath = os.path.join(spec_root, "bitmessagemain")
importPath = srcPath importPath = srcPath
sys.path.insert(0,importPath) sys.path.insert(0, importPath)
os.chdir(sys.path[0]) os.chdir(sys.path[0])
from version import softwareVersion
today = time.strftime("%Y%m%d")
snapshot = False snapshot = False
os.rename(os.path.join(srcPath, '__init__.py'), os.path.join(srcPath, '__init__.py.backup')) os.rename(
os.path.join(srcPath, '__init__.py'),
os.path.join(srcPath, '__init__.py.backup'))
# -*- mode: python -*-
a = Analysis( a = Analysis(
[os.path.join(srcPath, 'bitmessagemain.py')], [os.path.join(srcPath, 'bitmessagemain.py')],
pathex=[outPath], pathex=[outPath],
hiddenimports=['bitmessageqt.languagebox', 'pyopencl','numpy', 'win32com' , 'setuptools.msvc' ,'_cffi_backend'], hiddenimports=[
hookspath=None, 'bitmessageqt.languagebox', 'pyopencl', 'numpy', 'win32com', 'PyQt5.sip',
runtime_hooks=None 'setuptools.msvc', '_cffi_backend'
) ],
hookspath=None,
runtime_hooks=None,
excludes=['bsddb', 'bz2', 'tcl', 'tk', 'Tkinter']
)
os.rename(
os.path.join(srcPath, '__init__.py.backup'),
os.path.join(srcPath, '__init__.py'))
os.rename(os.path.join(srcPath, '__init__.py.backup'), os.path.join(srcPath, '__init__.py'))
def addTranslations(): def addTranslations():
import os
extraDatas = [] extraDatas = []
for file_ in os.listdir(os.path.join(srcPath, 'translations')): for file_ in os.listdir(os.path.join(srcPath, 'translations')):
if file_[-3:] != ".qm": if file_[-3:] != ".qm":
continue continue
extraDatas.append((os.path.join('translations', file_), extraDatas.append((
os.path.join('translations', file_),
os.path.join(srcPath, 'translations', file_), 'DATA')) os.path.join(srcPath, 'translations', file_), 'DATA'))
for libdir in sys.path: for libdir in sys.path:
qtdir = os.path.join(libdir, qtBase, 'translations') qtdir = os.path.join(libdir, qtBase, 'translations')
@ -57,57 +67,90 @@ def addTranslations():
for file_ in os.listdir(qtdir): for file_ in os.listdir(qtdir):
if file_[0:3] != "qt_" or file_[5:8] != ".qm": if file_[0:3] != "qt_" or file_[5:8] != ".qm":
continue continue
extraDatas.append((os.path.join('translations', file_), extraDatas.append((
os.path.join('translations', file_),
os.path.join(qtdir, file_), 'DATA')) os.path.join(qtdir, file_), 'DATA'))
return extraDatas return extraDatas
def addUIs():
import os dir_append = os.path.join(srcPath, 'bitmessageqt')
extraDatas = []
for file_ in os.listdir(os.path.join(srcPath, 'bitmessageqt')): a.datas += [
if file_[-3:] != ".ui": (os.path.join('ui', file_), os.path.join(dir_append, file_), 'DATA')
continue for file_ in os.listdir(dir_append) if file_.endswith('.ui')
extraDatas.append((os.path.join('ui', file_), os.path.join(srcPath, ]
'bitmessageqt', file_), 'DATA'))
return extraDatas
# append the translations directory # append the translations directory
a.datas += addTranslations() a.datas += addTranslations()
a.datas += addUIs()
a.binaries += [('libeay32.dll', os.path.join(openSSLPath, 'libeay32.dll'), 'BINARY'), # excluded_binaries = [
('python27.dll', os.path.join(pythonDllPath, 'python27.dll'), 'BINARY'), # 'QtSvg5.dll',
(os.path.join('bitmsghash', 'bitmsghash%i.dll' % (arch)), os.path.join(srcPath, 'bitmsghash', 'bitmsghash%i.dll' % (arch)), 'BINARY'), # 'QtXml5.dll',
(os.path.join('bitmsghash', 'bitmsghash.cl'), os.path.join(srcPath, 'bitmsghash', 'bitmsghash.cl'), 'BINARY'), # ]
(os.path.join('sslkeys', 'cert.pem'), os.path.join(srcPath, 'sslkeys', 'cert.pem'), 'BINARY'), # a.binaries = TOC([x for x in a.binaries if x[0] not in excluded_binaries])
(os.path.join('sslkeys', 'key.pem'), os.path.join(srcPath, 'sslkeys', 'key.pem'), 'BINARY')
]
for bin in a.binaries:
fname = 'Bitmessage_%s_%s.exe' % ("x86" if arch == 32 else "x64", softwareVersion) if bin[0] == 'PyQt5.sip':
break
dir_append = os.path.dirname(bin[1])
a.binaries += [
('sip',) + bin[1:],
('libEGL.dll', os.path.join(dir_append, 'libEGL.dll'), 'BINARY')]
dir_append = os.path.join(dir_append, 'plugins', 'platforms')
a.datas += [
(os.path.join('PyQt5', 'plugins', 'platforms', file_), os.path.join(dir_append, file_), 'DATA')
for file_ in os.listdir(dir_append)
]
a.binaries += [
('libeay32.dll', os.path.join(openSSLPath, 'libeay32.dll'), 'BINARY'),
('python27.dll', os.path.join(pythonDllPath, 'python27.dll'), 'BINARY'),
(os.path.join('bitmsghash', 'bitmsghash.pyd'),
os.path.join(srcPath, 'bitmsghash', 'bitmsghash.pyd'), 'EXTENSION'),
(os.path.join('bitmsghash', 'bitmsghash.cl'),
os.path.join(srcPath, 'bitmsghash', 'bitmsghash.cl'), 'BINARY'),
(os.path.join('sslkeys', 'cert.pem'),
os.path.join(srcPath, 'sslkeys', 'cert.pem'), 'BINARY'),
(os.path.join('sslkeys', 'key.pem'),
os.path.join(srcPath, 'sslkeys', 'key.pem'), 'BINARY')
]
from version import softwareVersion
today = time.strftime("%Y%m%d")
fname = 'Bitmessage_%s_%s.exe' % (
"x86" if arch == 32 else "x64", softwareVersion)
if snapshot: if snapshot:
fname = 'Bitmessagedev_%s_%s.exe' % ("x86" if arch == 32 else "x64", today) fname = 'Bitmessagedev_%s_%s.exe' % (
"x86" if arch == 32 else "x64", today)
pyz = PYZ(a.pure) pyz = PYZ(a.pure)
exe = EXE(pyz, exe = EXE(
a.scripts, pyz,
a.binaries, a.scripts,
a.zipfiles, a.binaries,
a.datas, a.zipfiles,
a.binaries, a.datas,
[], name=fname,
name=fname, debug=False,
debug=False, strip=None,
strip=None, upx=False,
upx=False, console=False, icon=os.path.join(srcPath, 'images', 'can-icon.ico')
console=False, icon= os.path.join(srcPath, 'images', 'can-icon.ico')) )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=False,
name='main')
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=False,
name='main'
)