-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.py
More file actions
104 lines (92 loc) · 3.22 KB
/
Copy pathbuild.py
File metadata and controls
104 lines (92 loc) · 3.22 KB
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
"""
ContentForge Build Script
Builds a single-file Windows executable using PyInstaller.
Usage:
python build.py
Requirements:
pip install pyinstaller
Output:
dist/ContentForge.exe
"""
import subprocess
import sys
import os
from pathlib import Path
def build():
root = Path(__file__).parent
dist = root / "dist"
build_dir = root / "build"
cmd = [
sys.executable, "-m", "PyInstaller",
"--onefile",
"--windowed",
"--name", "ContentForge",
"--distpath", str(dist),
"--workpath", str(build_dir),
"--clean",
"--noconfirm",
"--hidden-import", "core.db",
"--hidden-import", "core.secure_store",
"--hidden-import", "core.ai_client",
"--hidden-import", "core.topic_engine",
"--hidden-import", "core.script_engine",
"--hidden-import", "core.seo_engine",
"--hidden-import", "core.video_scraper",
"--hidden-import", "core.timeline_engine",
"--hidden-import", "core.export_engine",
"--hidden-import", "core.translate_engine",
"--hidden-import", "core.trending_engine",
"--hidden-import", "core.competitor_engine",
"--hidden-import", "core.tts_engine",
"--hidden-import", "ui.tab_topic",
"--hidden-import", "ui.tab_script",
"--hidden-import", "ui.tab_video",
"--hidden-import", "ui.tab_seo",
"--hidden-import", "ui.tab_history",
"--hidden-import", "ui.tab_trending",
"--hidden-import", "ui.tab_competitor",
"--hidden-import", "ui.tab_batch",
"--hidden-import", "ui.settings_dialog",
"--hidden-import", "ui.niche_dialog",
"--hidden-import", "ui.components.spinner",
"--hidden-import", "ui.components.badge",
"--hidden-import", "ui.components.card",
"--hidden-import", "ui.components.fonts",
"--hidden-import", "PyQt6",
"--hidden-import", "PyQt6.QtWidgets",
"--hidden-import", "PyQt6.QtCore",
"--hidden-import", "PyQt6.QtGui",
"--hidden-import", "requests",
"--hidden-import", "bs4",
"--hidden-import", "keyring",
"--hidden-import", "yt_dlp",
"--hidden-import", "json",
"--hidden-import", "sqlite3",
"--hidden-import", "csv",
"--hidden-import", "re",
"--hidden-import", "logging",
"--collect-data", "PyQt6",
"--icon", str(root / "assets" / "icon.ico") if (root / "assets" / "icon.ico").exists() else "NONE",
str(root / "main.py"),
]
print("=" * 60)
print("ContentForge Builder")
print("=" * 60)
print(f"Building from: {root}")
print(f"Output: {dist / 'ContentForge.exe'}")
print("=" * 60)
result = subprocess.run(cmd, cwd=str(root))
if result.returncode == 0:
exe = dist / "ContentForge.exe"
if exe.exists():
size_mb = exe.stat().st_size / (1024 * 1024)
print(f"\n✓ Build successful!")
print(f" Output: {exe}")
print(f" Size: {size_mb:.1f} MB")
else:
print("\n✗ Build completed but exe not found")
else:
print(f"\n✗ Build failed with exit code {result.returncode}")
sys.exit(1)
if __name__ == "__main__":
build()