-
Notifications
You must be signed in to change notification settings - Fork 2
/
nyan_packager.py
72 lines (58 loc) · 1.99 KB
/
nyan_packager.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
# https://github.com/kitao/pyxel/blob/master/pyxel/packager.py
import argparse
import os
import platform
import shutil
import warnings
import PyInstaller.__main__
warnings.filterwarnings("ignore", category=SyntaxWarning)
def run():
parser = argparse.ArgumentParser(description='nyan Packager')
parser.add_argument(
'python_file', type=argparse.FileType(), help='nyan program file entry point'
)
parser.add_argument(
'-i', '--icon', type=argparse.FileType(), help='nyan program icon file'
)
parser.add_argument(
'-d', '--debug', action='store_true', help='enable console output'
)
parser.add_argument(
'-f', '--onefile', action='store_true'
)
args = parser.parse_args()
dirname = os.path.dirname(args.python_file.name) or "."
filename = os.path.basename(args.python_file.name)
name = os.path.splitext(filename)[0]
original_cwd = os.getcwd()
os.chdir(dirname)
options = [
'--clean',
f'--name={name}',
'--log-level=ERROR',
'--distpath=dist',
os.path.join(filename),
]
if args.onefile:
options.append('--onefile')
if os.path.exists('assets'):
shutil.copytree('assets', os.path.join('dist', 'assets'))
else:
options.append('--onedir')
if os.path.exists('assets'):
assets_src = os.path.join(dirname, 'assets')
assets_dest = 'assets'
separator = ';' if platform.system() == 'Windows' else ':'
options.append(f'--add-data={assets_src}{separator}{assets_dest}')
if not args.debug:
options.append('--windowed')
if args.icon:
options.append(f'--icon={args.icon.name}')
PyInstaller.__main__.run(options)
build_path = os.path.join(original_cwd, 'build')
shutil.rmtree(build_path, ignore_errors=True)
spec_file = os.path.join(original_cwd, f'{name}.spec')
if os.path.exists(spec_file):
os.remove(spec_file)
if __name__ == "__main__":
run()