import pathlib import platform import shutil import subprocess import sys import tempfile def create_executable(): # Make sure the current working directory is the root of the project: root = pathlib.Path(__file__).parent.parent with tempfile.TemporaryDirectory() as temp_dir: # copy rendercv to temp directory shutil.copytree(root / "rendercv", pathlib.Path(temp_dir) / "rendercv") temp_directory = pathlib.Path(temp_dir) rendercv_file_path = temp_directory / "rendercv.py" rendercv_file_path.touch() rendercv_file_path.write_text("import rendercv.cli as cli; cli.app()") # Run pyinstaller: subprocess.run( [ sys.executable, "-m", "PyInstaller", "--onefile", "--clean", "--collect-all", "rendercv", "--collect-all", "rendercv_fonts", "--distpath", "bin", str(rendercv_file_path), ], check=True, ) # Rename the executable: platform_name = { "linux": "linux", "darwin": "macos", "win32": "windows", } executable_path = { "linux": root / "bin" / "rendercv", "darwin": root / "bin" / "rendercv", "win32": root / "bin" / "rendercv.exe", } new_executable_path = ( root / "bin" / f"rendercv-{platform_name[sys.platform]}-{platform.machine()}" ) executable_path[sys.platform].rename(new_executable_path) print('Executable created at "bin" folder.') # NOQA: T201 if __name__ == "__main__": create_executable()