-
Notifications
You must be signed in to change notification settings - Fork 3
/
buildGUI.py
115 lines (107 loc) · 3.74 KB
/
buildGUI.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import cx_Freeze
import pathlib
import sys
import site
from distutils.util import convert_path
path = pathlib.Path(__file__).absolute().parent
sys.path.append(str(path/'src'))
def get_include_files():
files = [path / "LICENSE"]
# scipy dlls
for d in site.getsitepackages():
d=pathlib.Path(d)/'scipy'/'.libs'
if d.is_dir():
for f in d.iterdir():
if f.is_file() and f.suffix=='' or f.suffix in ['.dll']:
files.append((f,pathlib.Path('lib')/f.name))
# opencv dll
for d in site.getsitepackages():
d=pathlib.Path(d)/'cv2'
if d.is_dir():
for f in d.iterdir():
if f.is_file() and f.suffix=='' or f.suffix in ['.dll']:
files.append((f,pathlib.Path('lib')/f.name))
# ffpyplayer bin deps
for d in site.getsitepackages():
d=pathlib.Path(d)/'share'/'ffpyplayer'
for lib in ('ffmpeg', 'sdl'):
d2 = d/lib/'bin'
if d2.is_dir():
for f in d2.iterdir():
if f.is_file() and f.suffix=='' or f.suffix in ['.dll', '.exe']:
files.append((f,pathlib.Path('lib')/f.name))
return files
def get_zip_include_files():
files = []
todo = ['src/glassesValidator/config','src/glassesValidator/resources']
for d in todo:
d = pathlib.Path(convert_path(d))
for d2 in d.iterdir():
if d2.is_file() and d2.suffix not in ['.py','.pyc']:
files.append((d2, pathlib.Path(*pathlib.Path(d2).parts[-3:])))
elif not d2.name.startswith('__'):
for f in d2.iterdir():
if f.is_file() and f.suffix not in ['.py','.pyc']:
files.append((f, pathlib.Path(*pathlib.Path(f).parts[-4:])))
return files
main_ns = {}
ver_path = convert_path('src/glassesValidator/version.py')
with open(ver_path) as ver_file:
exec(ver_file.read(), main_ns)
icon = convert_path('src/glassesValidator/resources/icons/icon')
if sys.platform.startswith("win"):
icon += ".ico"
elif sys.platform.startswith("darwin"):
icon += ".icns"
else:
icon += ".png"
build_options = {
"build_exe": {
"optimize": 1,
"packages": [
'numpy','matplotlib','scipy','pandas','pyarrow','polars','glassesValidator','OpenGL','cv2',
'ffpyplayer.player','ffpyplayer.threading', # some specific subpackages that need to be mentioned to be picked up correctly
'imgui_bundle._imgui_bundle'
],
"excludes":["tkinter"],
"zip_includes": get_zip_include_files(),
"zip_include_packages": "*",
"zip_exclude_packages": [
"OpenGL_accelerate",
"glfw",
"cv2",
"imgui_bundle"
],
"silent_level": 1,
"include_msvcr": True
},
"bdist_mac": {
"bundle_name": "glassesValidator",
"iconfile": icon,
"codesign_identity": None,
"plist_items": [
("CFBundleName", "glassesValidator"),
("CFBundleDisplayName", "glassesValidator"),
("CFBundleIdentifier", "com.github.dcnieho.glassesValidator"),
("CFBundleVersion", main_ns['__version__']),
("CFBundlePackageType", "APPL"),
("CFBundleSignature", "????"),
]
}
}
if sys.platform.startswith("win"):
build_options["build_exe"]["include_files"] = get_include_files()
cx_Freeze.setup(
name="glassesValidator",
version=main_ns['__version__'],
description=main_ns['__description__'],
executables=[
cx_Freeze.Executable(
script=path / "main.py",
target_name="glassesValidator",
icon=icon
)
],
options=build_options,
py_modules=[]
)