93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
import subprocess
|
|
import time
|
|
import sys
|
|
import os
|
|
import platform
|
|
|
|
def setup_environment():
|
|
"""设置编译所需的环境变量"""
|
|
# 根据操作系统类型设置PATH
|
|
if platform.system() == "Windows":
|
|
os.environ["PATH"] = (
|
|
r"C:\Program Files (x86)\Windows Kits\10\bin\x64;" +
|
|
r"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\Hostx64\x64;" +
|
|
r"D:\mingw64\bin;" +
|
|
os.environ["PATH"]
|
|
)
|
|
else:
|
|
print("警告: 此脚本主要针对Windows环境优化")
|
|
|
|
# 设置CFLAGS
|
|
if "NAV" in sys.argv:
|
|
os.environ["CFLAGS"] = (
|
|
r"-march=native -O3 -s -march=native "
|
|
r"-L 'D:\mingw64\x86_64-w64-mingw32\include' "
|
|
r"-L 'C:\Users\Lenovo\Desktop\Termination4\TESTWORK\.ENV\Lib\site-packages\nuitka\build\include' "
|
|
r"-L 'D:\Python312\include' -no-pie"
|
|
)
|
|
else:
|
|
os.environ["CFLAGS"] = (
|
|
r"-march=native -O0 "
|
|
r"-L 'D:\mingw64\x86_64-w64-mingw32\include' "
|
|
r"-L 'C:\Users\Lenovo\Desktop\Termination4\TESTWORK\.ENV\Lib\site-packages\nuitka\build\include' "
|
|
r"-L 'D:\Python312\include' -no-pie"
|
|
)
|
|
|
|
def get_nuitka_options():
|
|
"""获取Nuitka编译选项"""
|
|
options = [
|
|
"--standalone",
|
|
"--onefile",
|
|
"--lto=yes" if "NAV" in sys.argv else "--lto=no",
|
|
"--show-progress",
|
|
"--jobs=8",
|
|
#"--clang",
|
|
"--mingw64",
|
|
"--standalone",
|
|
"--follow-imports",
|
|
"--debug",
|
|
"test.py"
|
|
]
|
|
|
|
# 调试模式选项
|
|
if "DEBUG" in sys.argv:
|
|
options.extend([
|
|
"--debug",
|
|
#"--no-strip",
|
|
"--verbose"
|
|
])
|
|
else:
|
|
options.extend([
|
|
"--assume-yes-for-downloads", # 自动确认下载
|
|
"--remove-output", # 编译前清理输出目录
|
|
])
|
|
|
|
return options
|
|
|
|
def run_nuitka_compilation(options):
|
|
"""运行Nuitka编译过程"""
|
|
start_time = time.time()
|
|
print("开始编译...")
|
|
|
|
try:
|
|
# 构建并执行Nuitka命令
|
|
result = subprocess.run(
|
|
[r".\.ENV\SCRIPTS\python.exe", "-m", "nuitka"] + options,
|
|
)
|
|
|
|
print("编译成功!")
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"编译失败: {e}")
|
|
if e.stdout:
|
|
print(f"错误详情: {e.stdout}")
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"发生未知错误: {e}")
|
|
sys.exit(1)
|
|
finally:
|
|
print(f"编译耗时: {time.time() - start_time:.2f}秒")
|
|
|
|
if __name__ == "__main__":
|
|
setup_environment()
|
|
options = get_nuitka_options()
|
|
run_nuitka_compilation(options) |