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

PyInstaller打包exe遇FileNotFoundError问题求助

错误原因分析
  1. PyInstaller默认不识别第三方包的非Python资源:PyInstaller仅自动打包Python代码文件,对于pyvis这类依赖包中的静态资源(如template.html),默认不会纳入打包范围。
  2. 手动添加资源的路径结构不匹配:使用--add-binary时若未指定目标目录结构,文件会被直接放到临时根目录,而pyvis代码是从pyvis/templates/路径下读取模板的,导致运行时找不到文件。
解决方案

以下是两种可靠的解决方式:

方式一:通过.spec文件配置资源(推荐)

.spec文件能更精准地控制打包时的资源目录结构:

  1. 生成基础.spec文件:
    pyi-makespec -F test.py
    
  2. 打开生成的test.spec文件,修改datas参数。先通过pip show pyvis查看pyvis的安装路径(Location字段),然后添加资源映射:
    import os
    from importlib.util import find_spec
    
    # 动态获取pyvis的安装目录
    pyvis_path = os.path.dirname(find_spec("pyvis").origin)
    datas = [
        (os.path.join(pyvis_path, "templates", "template.html"), "pyvis/templates"),
    ]
    
  3. 用.spec文件重新打包:
    pyinstaller test.spec
    

方式二:修改代码适配打包环境

在代码中判断是否处于PyInstaller打包后的运行环境,手动指定模板路径:

  1. 修改Python代码,添加路径适配逻辑:
    import sys
    import os
    from pyvis.network import Network
    
    def get_pyvis_template_path():
        if hasattr(sys, '_MEIPASS'):
            # 打包后的临时目录路径
            return os.path.join(sys._MEIPASS, "pyvis", "templates", "template.html")
        else:
            # 开发环境下的默认路径
            from pyvis import templates
            return os.path.join(os.path.dirname(templates.__file__), "template.html")
    
    # 使用自定义路径创建Network实例
    net = Network(template_path=get_pyvis_template_path())
    # 后续业务代码...
    
  2. 打包时用--add-binary将模板文件放到指定子目录:
    # 替换为你实际的pyvis模板路径
    pyinstaller -F --add-binary "C:/Users/xxx/AppData/Roaming/Python/Python3x/site-packages/pyvis/templates/template.html;pyvis/templates" test.py
    

内容的提问来源于stack exchange,提问作者AbsoluteBeginner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:34:01