forked from ynput/ayon-launcher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.py
144 lines (125 loc) · 3.06 KB
/
setup.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# -*- coding: utf-8 -*-
"""Setup info for building AYON Desktop application."""
import os
import re
import platform
from pathlib import Path
from cx_Freeze import setup, Executable
ayon_root = Path(os.path.dirname(__file__))
resources_dir = ayon_root / "common" / "ayon_common" / "resources"
version_content = {}
with open(ayon_root / "version.py") as fp:
exec(fp.read(), version_content)
__version__ = version_content["__version__"]
low_platform_name = platform.system().lower()
IS_WINDOWS = low_platform_name == "windows"
IS_LINUX = low_platform_name == "linux"
IS_MACOS = low_platform_name == "darwin"
base = None
if IS_WINDOWS:
base = "Win32GUI"
# -----------------------------------------------------------------------
# build_exe
# Build options for cx_Freeze. Manually add/exclude packages and binaries
install_requires = [
"appdirs",
"cx_Freeze",
"keyring",
"pkg_resources",
"qtpy",
"filecmp",
"dns",
# Python defaults (cx_Freeze skip them by default)
"dbm",
"dataclasses",
"email.mime.application",
"email.mime.audio",
"email.mime.base",
"email.mime.image",
"email.mime.message",
"email.mime.multipart",
"email.mime.nonmultipart",
"email.mime.text",
"sqlite3",
"timeit"
]
includes = []
excludes = [
# Make sure 'common' subfolder is not included in 'lib'
# - can happen when there are testing imports like:
# 'from common.ayon_common import ...'
"common",
]
# WARNING: As of cx_freeze there is a bug?
# when this is empty, its hooks will not kick in
# and won't clean platform irrelevant modules
# like dbm mentioned above.
bin_includes = [
"vendor"
]
include_files = [
"version.py",
"common",
"LICENSE",
"README.md"
]
if IS_WINDOWS:
install_requires.extend([
# `pywin32` packages
"win32ctypes",
"win32comext",
"pythoncom"
])
icon_path = resources_dir / "AYON.ico"
mac_icon_path = resources_dir / "AYON.icns"
build_exe_options = dict(
build_exe="build/output",
packages=install_requires,
includes=includes,
excludes=excludes,
bin_includes=bin_includes,
include_files=include_files,
optimize=0,
replace_paths=[("*", "")],
)
bdist_mac_options = dict(
bundle_name=f"AYON {__version__}",
iconfile=mac_icon_path
)
executables = [
Executable(
"start.py",
base=base,
target_name="ayon",
icon=icon_path.as_posix()
),
]
if IS_WINDOWS:
executables.append(
Executable(
"start.py",
base=None,
target_name="ayon_console",
icon=icon_path.as_posix()
)
)
if IS_LINUX:
executables.append(
Executable(
"app_launcher.py",
base=None,
target_name="app_launcher",
icon=icon_path.as_posix()
)
)
setup(
name="AYON",
version=__version__,
description="AYON Desktop Client",
options={
"build_exe": build_exe_options,
"bdist_mac": bdist_mac_options,
},
executables=executables,
packages=[]
)