nicsensor/tool/auto_package/auto_package.py

122 lines
3.4 KiB
Python
Raw Normal View History

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)