46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""
|
|
binaries hook for pygame seems to be required for pygame 2.0 Windows.
|
|
Otherwise some essential DLLs will not be transferred to the exe.
|
|
|
|
And also put hooks for datas, resources that pygame uses, to work
|
|
correctly with pyinstaller
|
|
"""
|
|
|
|
import os
|
|
import platform
|
|
|
|
from pygame import __file__ as pygame_main_file
|
|
|
|
# Get pygame's folder
|
|
pygame_folder = os.path.dirname(os.path.abspath(pygame_main_file))
|
|
|
|
# datas is the variable that pyinstaller looks for while processing hooks
|
|
datas = []
|
|
|
|
|
|
# A helper to append the relative path of a resource to hook variable - datas
|
|
def _append_to_datas(file_path):
|
|
res_path = os.path.join(pygame_folder, file_path)
|
|
if os.path.exists(res_path):
|
|
datas.append((res_path, "pygame"))
|
|
|
|
|
|
# First append the font file, then based on the OS, append pygame icon file
|
|
_append_to_datas("freesansbold.ttf")
|
|
if platform.system() == "Darwin":
|
|
_append_to_datas("pygame_icon_mac.bmp")
|
|
else:
|
|
_append_to_datas("pygame_icon.bmp")
|
|
|
|
if platform.system() == "Windows":
|
|
from PyInstaller.utils.hooks import collect_dynamic_libs
|
|
|
|
pre_binaries = collect_dynamic_libs("pygame")
|
|
binaries = []
|
|
|
|
for b in pre_binaries:
|
|
binary, location = b
|
|
# settles all the DLLs into the top level folder, which prevents duplication
|
|
# with the DLLs already being put there.
|
|
binaries.append((binary, "."))
|