Files
bci_algo/build_with_copy.py
2026-06-05 09:34:29 +08:00

89 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
import shutil
import subprocess
import sys
def main():
# 1. 定义路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DIST_DIR = os.path.join(BASE_DIR, 'dist')
APP_NAME = 'runDecoder'
TARGET_DIR = os.path.join(DIST_DIR, APP_NAME)
# 定义需要复制的资源 {源路径: 目标子路径}
# 目标子路径相对于 TARGET_DIR
RESOURCES = {
'config.ini': 'config.ini',
'online_Models': 'online_Models',
'Tools': 'Tools',
}
# 2. 清理旧构建
print("[1/3] Cleaning up old builds...")
if os.path.exists(DIST_DIR):
try:
shutil.rmtree(DIST_DIR)
print(" Cleaned dist/")
except Exception as e:
print(f" Warning: Could not clean dist/: {e}")
BUILD_DIR = os.path.join(BASE_DIR, 'build')
if os.path.exists(BUILD_DIR):
try:
shutil.rmtree(BUILD_DIR)
print(" Cleaned build/")
except Exception as e:
print(f" Warning: Could not clean build/: {e}")
# 3. 运行 PyInstaller
print("[2/3] Running PyInstaller...")
# 注意:我们这里不传 --noupx因为已经在 spec 文件里把 upx=False 写死了
cmd = [
"pyinstaller",
"build_algorithm.spec",
"--clean"
]
try:
subprocess.check_call(cmd, shell=True)
except subprocess.CalledProcessError:
print("Error: PyInstaller failed.")
sys.exit(1)
# 4. 复制外部资源文件夹
print("[3/3] Verifying and Copying external resources...")
for src_name, dst_name in RESOURCES.items():
src_path = os.path.join(BASE_DIR, src_name)
dst_path = os.path.join(TARGET_DIR, dst_name)
if os.path.exists(src_path):
if os.path.isfile(src_path):
# 如果是文件
try:
shutil.copy2(src_path, dst_path)
print(f" Copied file: {src_name} -> {dst_name}")
except Exception as e:
print(f" Error copying file {src_name}: {e}")
else:
# 如果是文件夹
if os.path.exists(dst_path):
try:
shutil.rmtree(dst_path) # 先删除 spec 生成的旧文件夹 (如果有)
except Exception as e:
print(f" Warning: Could not remove existing dir {dst_path}: {e}")
try:
shutil.copytree(src_path, dst_path, ignore=shutil.ignore_patterns('*.pyc', '__pycache__'))
print(f" Copied dir: {src_name} -> {dst_name}")
except Exception as e:
print(f" Error copying dir {src_name}: {e}")
else:
print(f" Warning: Source resource not found at {src_path}")
print("\n" + "="*50)
print(f"SUCCESS! Build artifacts are in: {TARGET_DIR}")
print("="*50)
if __name__ == "__main__":
main()