source: sasview/installers/sasview_qt5_centos.spec @ f00d3fd

ESS_GUIESS_GUI_batch_fittingESS_GUI_iss879ESS_GUI_iss959ESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since f00d3fd was f00d3fd, checked in by trnielsen, 9 months ago

Add support for Pyinstaller build on CentOS7

Changes to be committed:

new file: build_tools/conda_qt5_centos.yml
new file: installers/sasview_qt5_centos.spec

  • Property mode set to 100644
File size: 6.0 KB
Line 
1# -*- mode: python -*-
2# Modifiable location
3import sys
4import os
5import platform
6
7import warnings
8from distutils.filelist import findall
9
10PYTHON_LOC = sys.exec_prefix
11# Portability settings
12if os.name == 'posix':
13    LIBPREFIX='lib'
14    LIBSUFFIX='so'
15    LIBLOC = os.path.join(PYTHON_LOC,'lib')
16    # Darwin needs UPX=False, Linux actually builds with both...
17    if platform.system() == 'Darwin':
18        UPX=False
19    else:
20        UPX=True
21else:
22    LIBPREFIX=''
23    LIBSUFFIX='dll'
24    LIBLOC = os.path.join(PYTHON_LOC,'Library','bin')
25    UPX=True
26
27SCRIPT_TO_SOURCE = 'sasview.py'
28
29# Warning! pyinstaller/py2exe etc. don't have the __file__ attribute
30WORK_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
31
32#### LOCAL METHODS
33def add_data(data):
34    for component in data:
35        target = component[0]
36        for filename in component[1]:
37           datas.append((filename, target))
38
39def add_binary(binary):
40    return (os.path.join(LIBLOC,binary),'.')
41
42# ADDITIONAL DATA ############################################################
43datas = [('../src/sas/sasview/images', 'images')]
44
45# datas = [('../src/sas/sasview/images/ball.png', '.')]
46datas = [('../src/sas/sasview/images/ball.ico', '.')]
47
48
49datas.append(('../src/sas/sasview/media','media'))
50datas.append(('../src/sas/sasview/test','test'))
51datas.append(('../src/sas/sasview/custom_config.py','.'))
52datas.append(('../src/sas/sasview/local_config.py','.'))
53# TRN COMMENT OUT
54#datas.append(('../src/sas/sasview/wxcruft.py','.'))
55datas.append(('../src/sas/logger_config.py','.'))
56datas.append(('../src/sas/logging.ini','.'))
57
58# pyinstaller gets mightily confused by upper/lower case,
59# so some modules need to be copied explicitly to avoid
60# messages like
61# WARNING: Attempted to add Python module twice with different upper/lowercases
62# TRN COMMENT OsUT
63# datas.append((os.path.join(PYTHON_LOC,'Lib','SocketServer.py'),'.'))
64# datas.append((os.path.join(PYTHON_LOC,'Lib','Queue.py'),'.'))
65
66# TODO
67# NEED BETTER WAY TO DEAL WITH THESE RELATIVE PATHS
68datas.append((os.path.join('..', '..','sasmodels','sasmodels'),'sasmodels'))
69datas.append((os.path.join('..', 'src','sas','sasgui','perspectives','fitting','plugin_models'),'plugin_models'))
70
71# TRN COMMENT OUT
72# datas.append((os.path.join(PYTHON_LOC,'Library','plugins','platforms'),'platforms'))
73#sdatas.append((os.path.join(PYTHON_LOC,'Lib','site-packages','zmq','libzmq.cp36-win_amd64.pyd'),'.'))
74
75# These depend on whether we have MKL or Atlas numpy
76if os.path.exists(os.path.join(LIBLOC, LIBPREFIX + 'mkl_core.' + LIBSUFFIX)):
77    datas.append(add_binary(LIBPREFIX + 'mkl_avx2.' + LIBSUFFIX))
78    datas.append(add_binary(LIBPREFIX + 'mkl_def.' + LIBSUFFIX))
79elif os.path.exists(os.path.join(LIBLOC, LIBPREFIX + 'numpy-atlas.' + LIBSUFFIX)):
80    datas.append(add_binary(LIBPREFIX + 'numpy-atlas.' + LIBSUFFIX))
81else:
82    raise Exception("No numerical library for numpy found.")
83
84#import sas.sascalc.dataloader.readers
85#f = os.path.join(sas.sascalc.dataloader.readers.get_data_path(), 'defaults.json')
86#datas.append((f, '.'))
87
88# # Add a custom pyopencl hook, as described in
89# # https://github.com/pyinstaller/pyinstaller/issues/2130
90# from PyInstaller.utils.hooks import copy_metadata
91# datas.append(copy_metadata('pyopencl')[0])
92
93import sasmodels
94add_data(sasmodels.data_files())
95
96try:
97    import tinycc
98    add_data(tinycc.data_files())
99except ImportError:
100    warnings.warn("TinyCC package is not available and will not be included")
101
102import periodictable
103add_data(periodictable.data_files())
104
105import matplotlib
106matplotlibdatadir = matplotlib.get_data_path()
107matplotlibdata = findall(matplotlibdatadir)
108for f in matplotlibdata:
109    dirname = os.path.join('mpl-data', f[len(matplotlibdatadir)+1:])
110    datas.append((f, os.path.split(dirname)[0]))
111
112binaries = []
113
114# EXCLUDED FILES ############################################################
115# Spelled out to enable easier editing
116excludes = []
117
118# Need to explicitly exclude sasmodels here!!
119excludes.append('sasmodels')
120
121# HIDDEN MODULES ############################################################
122hiddenimports = [
123 'PyQt5',
124 'periodictable.core',
125 'sasmodels.core',
126  #'pyopencl',
127  #'tinycc',
128  #'SocketServer',
129 'logging',
130 'logging.config',
131 'reportlab', 'reportlab.graphics',
132 'reportlab.graphics.barcode.common',
133 'reportlab.graphics.barcode.code128',
134 'reportlab.graphics.barcode.code93',
135 'reportlab.graphics.barcode.code39',
136 'reportlab.graphics.barcode.lto',
137 'reportlab.graphics.barcode.qr',
138 'reportlab.graphics.barcode.usps',
139 'reportlab.graphics.barcode.usps4s',
140 'reportlab.graphics.barcode.eanbc',
141 'reportlab.graphics.barcode.ecc200datamatrix',
142 'reportlab.graphics.barcode.fourstate',
143 'ipykernel', 'ipykernel.datapub',
144 'pygments', 'pygments.lexers','pygments.lexers.python',
145 'pygments.styles','pygments.styles.default',
146 'atexit', 'cython', 'sip', 'xhtml2pdf',
147 'zmq', 'zmq.utils', 'zmq.utils.strtypes',
148 'zmq.utils.jsonapi','zmq.utils.garbage',
149 'zmq.backend.cython','zmq.backend.cffi',
150 'site','lxml._elementpath','lxml.etree',
151 'scipy._lib.messagestream',
152]
153
154a = Analysis([SCRIPT_TO_SOURCE],
155             pathex=[WORK_DIR],
156             binaries=binaries,
157             datas=datas,
158             hiddenimports=hiddenimports,
159             hookspath=[],
160             runtime_hooks=[],
161             excludes=excludes,
162             win_no_prefer_redirects=False,
163             win_private_assemblies=False,
164             cipher=None)
165
166pyz = PYZ(a.pure, a.zipped_data,
167             cipher=None)
168
169exe = EXE(pyz,
170          a.scripts,
171          exclude_binaries=True,
172          name='sasview',
173          debug=False,
174          upx=UPX,
175          icon=os.path.join("../src/sas/sasview/images","ball.ico"),
176          version="version.txt",
177          console=False )
178
179# COLLECT creates a directory instead of a single file.
180coll = COLLECT(exe,
181               a.binaries,
182               a.zipfiles,
183               a.datas,
184               strip=False,
185               upx=UPX,
186               name='sasview')
187
188if platform.system() == 'Darwin':
189    app = BUNDLE(exe,
190        name='SasView.app',
191        icon='../src/sas/sasview/images/ball.ico',
192        bundle_identifier=None)
193
Note: See TracBrowser for help on using the repository browser.