Examples¶
Runnable code examples for common EzCompiler scenarios.
Tip
All examples assume the package is installed: pip install ezcompiler
🚀 Basic compilation¶
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="1.0.0",
project_name="HelloWorld",
main_file="main.py",
include_files={"files": [], "folders": []},
output_folder="dist",
)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="PyInstaller")
💡 Configuration from YAML¶
from ezcompiler import EzCompiler, CompilerConfig
import yaml
with open("ezcompiler.yaml") as f:
config_dict = yaml.safe_load(f)
config = CompilerConfig.from_dict(config_dict)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project()
YAML file (ezcompiler.yaml):
version: "1.0.0"
project_name: "MyApp"
main_file: "main.py"
output_folder: "dist"
compiler: "PyInstaller"
packages:
- "requests"
excludes:
- "debugpy"
💡 Cx_Freeze — directory build¶
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="1.0.0",
project_name="MyApp",
main_file="main.py",
include_files={"files": ["config.yaml"], "folders": ["assets", "data"]},
output_folder="dist",
compiler="Cx_Freeze",
packages=["requests", "pandas"],
excludes=["debugpy", "pytest"],
compiler_options={
"zip_include_packages": ["*"],
"zip_exclude_packages": ["test"],
"include_msvcr": True,
"optimize": 2,
},
)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="Cx_Freeze")
💡 PyInstaller — single-file executable¶
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="1.0.0",
project_name="MyApp",
main_file="main.py",
include_files={"files": ["icon.ico"], "folders": ["resources"]},
output_folder="dist",
compiler="PyInstaller",
packages=["numpy", "scipy"],
excludes=["matplotlib"],
compiler_options={"onefile": True, "windowed": False, "log-level": "DEBUG"},
)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="PyInstaller")
💡 Nuitka — optimized native compilation¶
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="1.0.0",
project_name="MyApp",
main_file="main.py",
include_files={"files": [], "folders": ["data"]},
output_folder="dist",
compiler="Nuitka",
packages=["fastapi", "uvicorn"],
compiler_options={"onefile": True, "show-progress": True},
)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="Nuitka")
💡 Full pipeline — compile, zip, upload to disk¶
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="1.0.0",
project_name="ProductionApp",
main_file="main.py",
include_files={"files": ["config.yaml", "LICENSE"], "folders": ["assets"]},
output_folder="dist",
compiler="PyInstaller",
packages=["requests", "pandas"],
excludes=["debugpy", "pytest"],
)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="PyInstaller")
ezcompiler.zip_compiled_project()
ezcompiler.upload(destination="./releases", structure="disk")
💡 Upload to HTTP server¶
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="2.1.0",
project_name="WebApp",
main_file="app.py",
include_files={"files": [], "folders": ["static", "templates"]},
output_folder="dist",
compiler="Cx_Freeze",
packages=["flask", "sqlalchemy"],
)
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="Cx_Freeze")
ezcompiler.zip_compiled_project()
ezcompiler.upload(
destination="https://releases.example.com/upload",
structure="server",
upload_config={"username": "deploy_user", "password": "secure_password"},
)
💡 Error handling¶
from ezcompiler import EzCompiler, CompilerConfig
from ezcompiler.shared.exceptions import (
CompilationError,
ConfigurationError,
FileOperationError,
UploadError,
)
config = CompilerConfig(
version="1.0.0",
project_name="RobustApp",
main_file="main.py",
include_files={"files": [], "folders": []},
output_folder="dist",
)
try:
ezcompiler = EzCompiler(config)
ezcompiler.compile_project(compiler="PyInstaller")
ezcompiler.zip_compiled_project()
ezcompiler.upload(destination="./releases", structure="disk")
except ConfigurationError as e:
raise SystemExit(1) from e
except CompilationError as e:
raise SystemExit(2) from e
except FileOperationError as e:
raise SystemExit(3) from e
except UploadError as e:
raise SystemExit(4) from e
💡 Generate client updater files¶
from pathlib import Path
from ezcompiler import EzCompiler, CompilerConfig
config = CompilerConfig(
version="2.0.0",
project_name="MyApp",
main_file="src/main.py",
include_files={"files": [], "folders": []},
output_folder=Path("dist"),
tuf_enabled=True,
tuf_repo_dir=Path("repo"),
tuf_keys_dir=Path("keystore"),
repo_public_url="https://updates.example.com/MyApp",
)
compiler = EzCompiler(config)
generated_files = compiler.generate_updater(output_dir=Path("src/updater"))
for path in generated_files:
print(f"Generated: {path}")
# update.py, settings.py, root.json
💡 Template generation¶
from ezcompiler.services import TemplateService
template_service = TemplateService()
config_content = template_service.process_template(
template_name="config.yaml",
variables={"PROJECT_NAME": "MyApp", "VERSION": "1.0.0", "MAIN_FILE": "main.py"},
)
with open("ezcompiler.yaml", "w") as f:
f.write(config_content)