source: sasview/installers/sasview_qt5.spec @ b5cc06e

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since b5cc06e was aefde77, checked in by Piotr Rozyczko <rozyczko@…>, 7 years ago

Minor modifications to allow jupyter console to be bundled

  • Property mode set to 100644
File size: 5.3 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
45datas.append(('../src/sas/sasview/media','media'))
46datas.append(('../src/sas/sasview/test','test'))
47datas.append(('../src/sas/sasview/custom_config.py','.'))
48datas.append(('../src/sas/sasview/local_config.py','.'))
49datas.append(('../src/sas/sasview/wxcruft.py','.'))
50datas.append(('../src/sas/logger_config.py','.'))
51
52# pyinstaller gets mightily confused by upper/lower case,
53# so some modules need to be copied explicitly to avoid
54# messages like
55# WARNING: Attempted to add Python module twice with different upper/lowercases
56datas.append((os.path.join(PYTHON_LOC,'Lib','SocketServer.py'),'.'))
57datas.append((os.path.join(PYTHON_LOC,'Lib','Queue.py'),'.'))
58
59# TODO
60# NEED BETTER WAY TO DEAL WITH THESE RELATIVE PATHS
61datas.append((os.path.join('..', '..','sasmodels','sasmodels'),'sasmodels'))
62datas.append((os.path.join('..', 'src','sas','sasgui','perspectives','fitting','plugin_models'),'plugin_models'))
63datas.append((os.path.join(PYTHON_LOC,'Library','plugins','platforms'),'platforms'))
64datas.append((os.path.join(PYTHON_LOC,'Lib','site-packages','zmq','libzmq.cp36-win_amd64.pyd'),'.'))
65
66# These depend on whether we have MKL or Atlas numpy
67if os.path.exists(os.path.join(LIBLOC, LIBPREFIX + 'mkl_core.' + LIBSUFFIX)):
68    datas.append(add_binary(LIBPREFIX + 'mkl_avx2.' + LIBSUFFIX))
69    datas.append(add_binary(LIBPREFIX + 'mkl_def.' + LIBSUFFIX))
70elif os.path.exists(os.path.join(LIBLOC, LIBPREFIX + 'numpy-atlas.' + LIBSUFFIX)):
71    datas.append(add_binary(LIBPREFIX + 'numpy-atlas.' + LIBSUFFIX))
72else:
73    raise Exception("No numerical library for numpy found.")
74
75#import sas.sascalc.dataloader.readers
76#f = os.path.join(sas.sascalc.dataloader.readers.get_data_path(), 'defaults.json')
77#datas.append((f, '.'))
78
79# Add a custom pyopencl hook, as described in
80# https://github.com/pyinstaller/pyinstaller/issues/2130
81from PyInstaller.utils.hooks import copy_metadata
82datas.append(copy_metadata('pyopencl')[0])
83
84import sasmodels
85add_data(sasmodels.data_files())
86
87try:
88    import tinycc
89    add_data(tinycc.data_files())
90except ImportError:
91    warnings.warn("TinyCC package is not available and will not be included")
92
93import periodictable
94add_data(periodictable.data_files())
95
96import matplotlib
97matplotlibdatadir = matplotlib.get_data_path()
98matplotlibdata = findall(matplotlibdatadir)
99for f in matplotlibdata:
100    dirname = os.path.join('mpl-data', f[len(matplotlibdatadir)+1:])
101    datas.append((f, os.path.split(dirname)[0]))
102
103binaries = []
104
105# EXCLUDED FILES ############################################################
106# Spelled out to enable easier editing
107excludes = []
108
109# Need to explicitly exclude sasmodels here!!
110excludes.append('sasmodels')
111
112# HIDDEN MODULES ############################################################
113hiddenimports = [
114 'PyQt5',
115 'periodictable.core',
116 'sasmodels.core',
117 'pyopencl',
118 'tinycc',
119 'SocketServer',
120 'logging',
121 'logging.config',
122 'ipykernel', 'ipykernel.datapub',
123 'pygments', 'pygments.lexers','pygments.lexers.python',
124 'pygments.styles','pygments.styles.default',
125 'atexit', 'cython', 'sip', 'xhtml2pdf',
126 'zmq', 'zmq.utils', 'zmq.utils.strtypes',
127 'zmq.utils.jsonapi','zmq.utils.garbage',
128 'zmq.backend.cython','zmq.backend.cffi',
129 'site','lxml._elementpath','lxml.etree',
130 'scipy._lib.messagestream',
131]
132
133a = Analysis([SCRIPT_TO_SOURCE],
134             pathex=[WORK_DIR],
135             binaries=binaries,
136             datas=datas,
137             hiddenimports=hiddenimports,
138             hookspath=[],
139             runtime_hooks=[],
140             excludes=excludes,
141             win_no_prefer_redirects=False,
142             win_private_assemblies=False,
143             cipher=None)
144
145pyz = PYZ(a.pure, a.zipped_data,
146             cipher=None)
147
148exe = EXE(pyz,
149          a.scripts,
150          exclude_binaries=True,
151          name='sasview',
152          debug=False,
153          upx=UPX,
154          icon=os.path.join("../src/sas/sasview/images","ball.ico"),
155          version="version.txt",
156          console=False )
157
158# COLLECT creates a directory instead of a single file.
159coll = COLLECT(exe,
160               a.binaries,
161               a.zipfiles,
162               a.datas,
163               strip=False,
164               upx=UPX,
165               name='sasview')
166
167if platform.system() == 'Darwin':
168    app = BUNDLE(exe,
169        name='SasView.app',
170        icon='../src/sas/sasview/images/ball.ico',
171        bundle_identifier=None)
172
Note: See TracBrowser for help on using the repository browser.