import os import zipfile import sys # ===================== 【可配置项】 ===================== # 输出目录(可自定义修改,例如 D:/release / /home/user/release) OUTPUT_DIR = "" # 最小打包内容 MIN_FILES = [ "extension", "nicsensor.sh", "project.config", "setup.sh" ] # 完整工程打包内容(所有文件) FULL_FILES = [ "docs", "extension", "tool", "nicsensor.sh", "project.config", "readme.md", "setup.sh" ] # ====================================================== def get_project_root(): """ 自动获取工程根目录(脚本在 tool/auto_package/ 下) """ # 当前脚本目录:tool/auto_package current_dir = os.path.dirname(os.path.abspath(__file__)) # 工程根目录 = 往上两级 project_root = os.path.abspath(os.path.join(current_dir, "../..")) return project_root def pack_files(zip_path, file_list, project_root): """ 统一打包函数 """ os.chdir(project_root) # 切换到工程根目录,保证打包路径正确 with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zipf: for item in file_list: if not os.path.exists(item): print(f"⚠️ 跳过不存在:{item}") continue # 递归打包文件夹 if os.path.isdir(item): for root, dirs, files_in_dir in os.walk(item): for f in files_in_dir: file_path = os.path.join(root, f) arc_path = os.path.relpath(file_path, project_root) zipf.write(file_path, arc_path) print(f" ✔ {arc_path}") else: zipf.write(item, item) print(f" ✔ {item}") def build_all(version): """ 一次性构建 min + full 两个包 """ project_root = get_project_root() OUTPUT_DIR = os.path.join(project_root, "Release") output_abs = os.path.abspath(OUTPUT_DIR) # 创建输出目录 if not os.path.exists(output_abs): os.makedirs(output_abs) # 文件名 zip_min = os.path.join(output_abs, f"nicsensor-{version}-min.zip") zip_full = os.path.join(output_abs, f"nicsensor-{version}-full.zip") print("=" * 60) print(" 开始自动打包") print(f"版本号:{version}") print(f"工程根目录:{project_root}") print(f"输出目录:{output_abs}") print("=" * 60) # 打包最小版 print("\n📦 开始打包【最小版本】") pack_files(zip_min, MIN_FILES, project_root) # 打包完整版 print("\n📦 开始打包【完整工程】") pack_files(zip_full, FULL_FILES, project_root) print("\n✅ 全部打包完成!") print(f"📍 最小包:{zip_min}") print(f"📍 完整包:{zip_full}") print("=" * 60) def show_usage(): print("=" * 50) print(" Nicsensor 一键打包脚本") print("=" * 50) print("使用方法:") print(" python pack.py 版本号") print() print("示例:") print(" python pack.py v1.0.0") print(" python pack.py 2.5.0") print("=" * 50) if __name__ == "__main__": if len(sys.argv) != 2: show_usage() sys.exit(1) version = sys.argv[1] build_all(version)