Browse Source

exe7

master
dongchangxi 1 week ago
parent
commit
24e525ab70
  1. 12
      factory_sliceing/build_exe.py
  2. 11
      factory_sliceing/hook-auto_sliceing_operate.py
  3. 10
      factory_sliceing/hook-download_batch_data.py
  4. 32
      factory_sliceing/main.py

12
factory_sliceing/build_exe.py

@ -40,6 +40,9 @@ def build_exe(): @@ -40,6 +40,9 @@ def build_exe():
'--hidden-import=download_batch_data.main_download_batch_data_and_trans',
# 收集所有子模块,确保 PyInstaller 能找到所有模块
# 使用 collect-submodules 明确收集所有子模块
'--collect-submodules=auto_sliceing_operate', # 收集所有子模块
'--collect-submodules=download_batch_data', # 收集所有子模块
'--collect-all=auto_sliceing_operate', # 使用 collect-all 确保包含所有子模块和依赖
'--collect-all=download_batch_data', # 使用 collect-all 确保包含所有子模块和依赖
'--hidden-import=auto_sliceing_operate.utils',
@ -138,10 +141,19 @@ def build_exe(): @@ -138,10 +141,19 @@ def build_exe():
# 也添加到 download_batch_data/utils/ 目录(备用路径)
cmd.append(f'--add-data={small_transform_file}{path_sep}download_batch_data/utils')
# 添加 Python 路径,确保 PyInstaller 能找到所有模块
# 将当前目录添加到 Python 路径中
cmd.append(f'--paths={current_dir}')
# 添加 hook 文件路径(如果存在)
hook_path = current_dir
# 确保 hook 文件存在并添加到 PyInstaller 的 hook 搜索路径
if os.path.exists(os.path.join(current_dir, 'hook-auto_sliceing_operate.py')):
cmd.append(f'--additional-hooks-dir={hook_path}')
if os.path.exists(os.path.join(current_dir, 'hook-download_batch_data.py')):
# 如果还没有添加 hook 路径,再次添加(不会重复)
if f'--additional-hooks-dir={hook_path}' not in cmd:
cmd.append(f'--additional-hooks-dir={hook_path}')
# 添加工作目录设置和主脚本
cmd.extend([

11
factory_sliceing/hook-auto_sliceing_operate.py

@ -1,11 +1,12 @@ @@ -1,11 +1,12 @@
# PyInstaller hook for auto_sliceing_operate package
from PyInstaller.utils.hooks import collect_submodules, collect_data_files
# 收集所有子模块
# 收集所有子模块(包括递归子模块)
hiddenimports = collect_submodules('auto_sliceing_operate')
# 确保包含所有必要的模块
hiddenimports += [
# 确保包含所有必要的模块(即使 collect_submodules 已经包含,显式声明更安全)
explicit_imports = [
'auto_sliceing_operate',
'auto_sliceing_operate.main_begin_sliceing',
'auto_sliceing_operate.main_download_zip',
'auto_sliceing_operate.utils',
@ -16,5 +17,9 @@ hiddenimports += [ @@ -16,5 +17,9 @@ hiddenimports += [
'auto_sliceing_operate.utils.oss_redis',
'auto_sliceing_operate.utils.request',
'auto_sliceing_operate.utils.logs',
'auto_sliceing_operate.utils.zip',
]
# 合并列表并去重
hiddenimports = list(set(hiddenimports + explicit_imports))

10
factory_sliceing/hook-download_batch_data.py

@ -1,11 +1,12 @@ @@ -1,11 +1,12 @@
# PyInstaller hook for download_batch_data package
from PyInstaller.utils.hooks import collect_submodules, collect_data_files
# 收集所有子模块
# 收集所有子模块(包括递归子模块)
hiddenimports = collect_submodules('download_batch_data')
# 确保包含所有必要的模块
hiddenimports += [
# 确保包含所有必要的模块(即使 collect_submodules 已经包含,显式声明更安全)
explicit_imports = [
'download_batch_data',
'download_batch_data.main_download_batch_data_and_trans',
'download_batch_data.utils',
'download_batch_data.utils.funcs',
@ -16,3 +17,6 @@ hiddenimports += [ @@ -16,3 +17,6 @@ hiddenimports += [
'download_batch_data.utils.logs',
]
# 合并列表并去重
hiddenimports = list(set(hiddenimports + explicit_imports))

32
factory_sliceing/main.py

@ -4,18 +4,26 @@ import importlib @@ -4,18 +4,26 @@ import importlib
from utils.config import cfg, get_work_dir
# 在模块级别显式导入,确保 PyInstaller 能检测到并打包这些模块
# 使用 try-except 避免在运行时出错(虽然这些导入应该总是成功的)
try:
# 这些导入语句会被 PyInstaller 分析,确保模块被包含
import auto_sliceing_operate.main_begin_sliceing as _unused1
import auto_sliceing_operate.main_download_zip as _unused2
import download_batch_data.main_download_batch_data_and_trans as _unused3
except ImportError:
# 如果导入失败(不应该发生),继续执行
pass
# 注意:不要使用 try-except,因为 PyInstaller 需要看到这些导入才能正确打包
import auto_sliceing_operate.main_begin_sliceing
import auto_sliceing_operate.main_download_zip
import download_batch_data.main_download_batch_data_and_trans
# 同时导入这些模块的依赖,确保所有子模块都被包含
import auto_sliceing_operate.utils
import auto_sliceing_operate.utils.exe_operate
import auto_sliceing_operate.utils.click_soft_button
import auto_sliceing_operate.utils.import_all_file
import auto_sliceing_operate.utils.miniIo
import auto_sliceing_operate.utils.oss_redis
import auto_sliceing_operate.utils.request
import auto_sliceing_operate.utils.logs
import download_batch_data.utils
def get_command_handler(command):
"""动态导入并返回命令处理函数"""
try:
if command == 'batch_download':
module = importlib.import_module('download_batch_data.main_download_batch_data_and_trans')
return module.main
@ -27,6 +35,14 @@ def get_command_handler(command): @@ -27,6 +35,14 @@ def get_command_handler(command):
return module.main
else:
return None
except ModuleNotFoundError as e:
print(f'错误: 无法找到模块 - {e}')
print('这可能是 PyInstaller 打包问题,请检查打包配置。')
print(f'尝试导入的模块: {command}')
raise
except Exception as e:
print(f'错误: 导入模块时发生异常 - {e}')
raise
if __name__ == '__main__':
# 可用命令列表

Loading…
Cancel
Save