From 9c21a5240fce1fc7e7fb1b8c8a2f03d192233601 Mon Sep 17 00:00:00 2001 From: xunbu Date: Thu, 18 Dec 2025 00:02:56 +0800 Subject: [PATCH] fix --- full.spec | 18 +++++++++++++----- lite.spec | 22 ++++++++++++++++------ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/full.spec b/full.spec index 24390b2..dcf394d 100644 --- a/full.spec +++ b/full.spec @@ -9,10 +9,14 @@ binaries = [] hiddenimports = ['markdown.extensions.tables', 'pymdownx.arithmatex', 'pymdownx.superfences', 'pymdownx.highlight', 'pygments', 'docling_ibm_models', - 'docling_parse','cv2'] + 'docling_parse', 'cv2'] -# 先收集第三方包的资源 -for package in ['easyocr', 'docling', 'pygments', 'docling_ibm_models']: +# --- 核心修改:在列表中添加 'tiktoken' --- +# tiktoken: 解决 Unknown encoding cl100k_base 问题 +# easyocr, docling 等: 收集其他依赖 +packages_to_collect = ['easyocr', 'docling', 'pygments', 'docling_ibm_models', 'tiktoken'] + +for package in packages_to_collect: try: tmp_ret = collect_all(package) datas += tmp_ret[0] @@ -21,6 +25,7 @@ for package in ['easyocr', 'docling', 'pygments', 'docling_ibm_models']: except Exception as e: print(f"Warning: Failed to collect resources for {package}: {e}") + try: datas += copy_metadata('docling-ibm-models') # 这里必须用连字符(pip名) datas += copy_metadata('docling-parse') # 预防性添加 @@ -28,6 +33,7 @@ except Exception as e: print(f"Warning: Failed to copy metadata: {e}") # 然后添加您的自定义资源(避免重复) +# 注意:确保 .venv 路径在您当前的构建环境中是存在的 custom_datas = [ ('./.venv/Lib/site-packages/docling_parse/pdf_resources_v2', 'docling_parse/pdf_resources_v2'), ('./docutranslate/static', 'docutranslate/static'), @@ -36,12 +42,13 @@ custom_datas = [ # 避免添加重复的数据 for data in custom_datas: + # 简单的去重检查,防止完全相同的源路径和目标路径被再次添加 if data not in datas: datas.append(data) a = Analysis( - ['docutranslate/app.py'], # 使用正斜杠 - pathex=[], # 添加当前工作目录到 pathex + ['docutranslate/app.py'], + pathex=[], binaries=binaries, datas=datas, hiddenimports=list(set(hiddenimports)), # 去重 @@ -52,6 +59,7 @@ a = Analysis( noarchive=False, optimize=0, ) + pyz = PYZ(a.pure) exe = EXE( diff --git a/lite.spec b/lite.spec index 88f58b1..e91e876 100644 --- a/lite.spec +++ b/lite.spec @@ -1,12 +1,21 @@ # -*- mode: python ; coding: utf-8 -*- import os -from PyInstaller.utils.hooks import collect_data_files +from PyInstaller.utils.hooks import collect_data_files, collect_all import docutranslate +# --- 核心修改开始:收集 tiktoken 的所有依赖 --- +# tiktoken 依赖动态加载的插件和二进制文件,必须全部收集 +tmp_ret = collect_all('tiktoken') +tik_datas = tmp_ret[0] +tik_binaries = tmp_ret[1] +tik_hiddenimports = tmp_ret[2] +# --- 核心修改结束 --- + datas = [ ('docutranslate/static', 'docutranslate/static'), ('docutranslate/template', 'docutranslate/template'), - *collect_data_files('pygments') # 直接展开 + *collect_data_files('pygments'), + *tik_datas ] hiddenimports = [ @@ -14,13 +23,14 @@ hiddenimports = [ 'pymdownx.arithmatex', 'pymdownx.superfences', 'pymdownx.highlight', - 'pygments' + 'pygments', + *tik_hiddenimports # 合并 tiktoken 的隐式导入 (包含 tiktoken_ext.openai_public 等) ] a = Analysis( - ['docutranslate/app.py'], # 使用正斜杠,Windows 也支持 + ['docutranslate/app.py'], pathex=[], - binaries=[], + binaries=tik_binaries, # 确保包含了 tiktoken 的二进制文件 datas=datas, hiddenimports=hiddenimports, hookspath=[], @@ -51,5 +61,5 @@ exe = EXE( target_arch=None, codesign_identity=None, entitlements_file=None, - icon='DocuTranslate.ico', # 修正为字符串 + icon='DocuTranslate.ico', ) \ No newline at end of file