You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Anaconda环境中使用PyInstaller打包含Sentence Transformers模型的Python脚本时创建可执行文件出错

在Anaconda环境中使用PyInstaller打包含Sentence Transformers模型的Python脚本时创建可执行文件出错

我太懂你这种头疼的情况了——在Anaconda环境里用PyInstaller打包带本地Sentence Transformers模型的脚本,简直是踩坑重灾区,尤其是模型路径和依赖打包这两块。别急,我给你捋几个亲测有效的解决步骤:

第一步:先把Anaconda环境和基础依赖捋顺

  • 先激活你的Anaconda目标环境,比如敲这个命令:conda activate your_env_name(记得把your_env_name换成你自己的环境名哈)
  • 接着把所有依赖装全,包括PyInstaller:pip install -r requirements.txt && pip install pyinstaller
  • 这里一定要先手动跑一遍你的脚本,比如python app.py,确认脚本本身能正常加载模型、运行逻辑,先排除脚本自己的问题,不然打包了也是白搭。

第二步:修改脚本里的模型路径,适配打包后的环境

你之前直接写./models/st_model的话,打包成exe后路径会乱套——PyInstaller会把文件打包到临时目录里,脚本找不到原来的相对路径了。改成动态获取路径就好,代码改成这样:

import os
import sys

def get_model_path():
    # 判断当前是开发环境还是打包后的exe环境
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS  # 打包后的临时目录路径
    else:
        base_path = os.path.dirname(os.path.abspath(__file__))  # 开发环境的脚本所在目录
    return os.path.join(base_path, "models", "st_model")

# 用这个动态路径加载模型
model = SentenceTransformer(get_model_path())

这样不管是在开发环境跑脚本,还是打包成exe后运行,都能精准找到模型文件。

第三步:用spec文件强制打包模型文件(关键操作!)

PyInstaller默认可能不会自动把models文件夹打包进去,所以得用spec文件手动指定:

  1. 先生成基础的spec文件:pyi-makespec --onefile app.py,这时候会生成一个app.spec文件
  2. 打开这个spec文件,找到Analysis部分,修改datas参数,把你的模型文件夹加进去,同时还要补全Sentence Transformers的隐藏依赖,修改后的Analysis大概是这样:
a = Analysis(
    ['app.py'],
    pathex=[],
    binaries=[],
    # 把本地模型文件夹映射到打包后的同路径下
    datas=[('models/st_model', 'models/st_model')],
    # 添加Sentence Transformers的隐藏依赖,避免打包后提示找不到模块
    hiddenimports=['sentence_transformers.models', 'sentence_transformers.util', 'sentence_transformers.SentenceTransformer'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
  1. 如果你还用到了extension_app.py,记得把它也加到Analysis的第一个列表里,改成['app.py', 'extension_app.py']

第四步:用spec文件打包生成exe

一切改好后,运行这个命令打包:pyinstaller app.spec,打包完成后,exe文件会在dist文件夹里。

最后:测试一下打包后的exe

进入dist目录,Windows下直接双击app.exe或者命令行敲app.exe,Linux/Mac下敲./app,看看是不是能正常加载模型运行了。

另外给你两个小提醒:

  • 每次重新打包前,最好清理一下之前的缓存文件:Windows下用rmdir /s /q build dist && del __pycache__,Linux/Mac用rm -rf build dist __pycache__,避免旧文件搞出奇怪的问题
  • 如果你的Anaconda环境里装了很多无关的包,建议新建一个干净的环境,只装脚本需要的依赖,这样打包出来的exe会小很多,也能减少依赖冲突的概率

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:23:12