119 lines
4.0 KiB
Python
119 lines
4.0 KiB
Python
# -*- mode: python ; coding: utf-8 -*-
|
|
|
|
import sys
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# This is a PyInstaller spec file. It is used to bundle the Python backend
|
|
# into a single executable that can be shipped with the Electron app.
|
|
|
|
# The project_root is the 'fourdst/' directory that contains 'electron/', 'fourdst/', etc.
|
|
# SPECPATH is a variable provided by PyInstaller that contains the absolute path
|
|
# to the directory containing the spec file.
|
|
project_root = Path(SPECPATH).parent
|
|
|
|
# We need to add the project root to the path so that PyInstaller can find the 'fourdst' module.
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
# Platform-specific configurations
|
|
platform = sys.platform
|
|
print(f"Building for platform: {platform}")
|
|
|
|
# Determine executable name based on platform
|
|
exe_name = 'fourdst-backend'
|
|
if platform == 'win32':
|
|
exe_name += '.exe'
|
|
|
|
# The main script to be bundled.
|
|
analysis = Analysis(['bridge.py'],
|
|
pathex=[str(project_root)],
|
|
binaries=[],
|
|
# Add any modules that PyInstaller might not find automatically.
|
|
hiddenimports=[
|
|
# Core dependencies
|
|
'docker',
|
|
'docker.api',
|
|
'docker.client',
|
|
'docker.errors',
|
|
'docker.models',
|
|
'docker.types',
|
|
'docker.utils',
|
|
# Cryptography dependencies
|
|
'cryptography',
|
|
'cryptography.hazmat',
|
|
'cryptography.hazmat.primitives',
|
|
'cryptography.hazmat.primitives.asymmetric',
|
|
'cryptography.hazmat.primitives.asymmetric.rsa',
|
|
'cryptography.hazmat.primitives.asymmetric.ed25519',
|
|
'cryptography.hazmat.primitives.asymmetric.padding',
|
|
'cryptography.hazmat.primitives.hashes',
|
|
'cryptography.hazmat.primitives.serialization',
|
|
'cryptography.exceptions',
|
|
# YAML dependencies
|
|
'yaml',
|
|
'yaml.loader',
|
|
'yaml.dumper',
|
|
# Core Python modules that might be missed
|
|
'pathlib',
|
|
'tempfile',
|
|
'zipfile',
|
|
'tarfile',
|
|
'hashlib',
|
|
'datetime',
|
|
'json',
|
|
'subprocess',
|
|
'shutil',
|
|
'logging',
|
|
# Platform-specific modules
|
|
'platform',
|
|
'os',
|
|
'sys',
|
|
# fourdst modules
|
|
'fourdst',
|
|
'fourdst.core',
|
|
'fourdst.core.bundle',
|
|
'fourdst.core.build',
|
|
'fourdst.core.config',
|
|
'fourdst.core.platform',
|
|
'fourdst.core.utils'
|
|
],
|
|
hookspath=[],
|
|
runtime_hooks=[],
|
|
excludes=[
|
|
# Exclude unnecessary modules to reduce size
|
|
'tkinter',
|
|
'matplotlib',
|
|
'numpy',
|
|
'scipy',
|
|
'pandas',
|
|
'jupyter',
|
|
'IPython'
|
|
],
|
|
win_no_prefer_redirects=False,
|
|
win_private_assemblies=False,
|
|
cipher=None,
|
|
noarchive=False)
|
|
|
|
pyz = PYZ(analysis.pure, analysis.zipped_data,
|
|
cipher=None)
|
|
|
|
exe = EXE(pyz,
|
|
analysis.scripts,
|
|
[],
|
|
exclude_binaries=True,
|
|
name=exe_name,
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=False,
|
|
upx=True,
|
|
console=True )
|
|
|
|
coll = COLLECT(exe,
|
|
analysis.binaries,
|
|
analysis.zipfiles,
|
|
analysis.datas,
|
|
strip=False,
|
|
upx=True,
|
|
upx_exclude=[],
|
|
name='fourdst-backend')
|