Files
docutranslate/full.spec
xunbu 583615ebde fix
2025-12-18 00:18:45 +08:00

105 lines
2.9 KiB
Python

# -*- mode: python ; coding: utf-8 -*-
import os
from PyInstaller.utils.hooks import collect_all, copy_metadata
import docutranslate
# 初始化列表
datas = []
binaries = []
# --- 核心修改 1: 添加 tiktoken_ext.openai_public 到隐式导入 ---
# 必须显式导入这个模块,否则 tiktoken 找不到 cl100k_base 编码
hiddenimports = [
'markdown.extensions.tables',
'pymdownx.arithmatex',
'pymdownx.superfences',
'pymdownx.highlight',
'pygments',
'docling_ibm_models',
'docling_parse',
'cv2',
'tiktoken_ext.openai_public' # <--- 新增:确保编码插件被识别
]
# --- 核心修改 2: 在列表中添加 'tiktoken_ext' ---
# tiktoken: 核心库
# tiktoken_ext: 包含编码定义文件 (解决 Unknown encoding 问题)
# easyocr, docling 等: 其他依赖
packages_to_collect = [
'easyocr',
'docling',
'pygments',
'docling_ibm_models',
'tiktoken',
'tiktoken_ext' # <--- 新增:必须收集扩展包
]
for package in packages_to_collect:
try:
tmp_ret = collect_all(package)
datas += tmp_ret[0]
binaries += tmp_ret[1]
hiddenimports += tmp_ret[2]
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') # 预防性添加
# 也可以预防性添加 tiktoken 的元数据,虽然 collect_all 通常已经处理了
datas += copy_metadata('tiktoken')
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'),
('./docutranslate/template', 'docutranslate/template')
]
# 避免添加重复的数据
for data in custom_datas:
# 简单的去重检查,防止完全相同的源路径和目标路径被再次添加
if data not in datas:
datas.append(data)
a = Analysis(
['docutranslate/app.py'],
pathex=[],
binaries=binaries,
datas=datas,
hiddenimports=list(set(hiddenimports)), # 去重
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name=f'DocuTranslate_full-{docutranslate.__version__}-win',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='DocuTranslate.ico',
)