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

Flask代码转exe后出现jinja2.exceptions.TemplateNotFound: login.html错误求助

Flask打包exe后出现TemplateNotFound错误的解决办法

将Flask项目打包为exe可执行文件后,运行时抛出jinja2.exceptions.TemplateNotFound: login.html异常,错误回溯信息如下:

Traceback (most recent call last):
  File "flask\app.py", line 2213, in _call_
  File "flask\app.py", line 2193, in wsgi_app
  File "flask\app.py", line 2190, in wsgi_app
  File "flask\app.py", line 1486, in full_dispatch_request
  File "flask\app.py", line 1484, in full_dispatch_request
  File "flask\app.py", line 1469, in dispatch_request
  File "app.py", line 122, in login
  File "flask\templating.py", line 150, in render_template
  File "jinja2\environment.py", line 1081, in get_or_select_template
  File "jinja2\environment.py", line 1010, in get_template
  File "jinja2\environment.py", line 969, in _load_template
  File "jinja2\loaders.py", line 126, in load
  File "flask\templating.py", line 64, in get_source
  File "flask\templating.py", line 98, in _get_source_fast
jinja2.exceptions.TemplateNotFound: login.html

核心原因

PyInstaller等打包工具默认不会自动包含Flask项目的templates和static资源文件夹,导致exe运行时无法找到模板文件。

解决方法

  • 修改Flask应用配置,动态获取资源路径
    在Flask主文件(如app.py)中添加代码,区分开发环境和打包后的exe环境,指定正确的模板与静态文件路径:

    import os
    import sys
    from flask import Flask
    
    if getattr(sys, 'frozen', False):
        # 打包后的exe环境
        template_dir = os.path.join(sys._MEIPASS, 'templates')
        static_dir = os.path.join(sys._MEIPASS, 'static')
        app = Flask(__name__, template_folder=template_dir, static_folder=static_dir)
    else:
        # 开发环境
        app = Flask(__name__)
    
  • 打包时通过命令参数指定包含资源
    使用PyInstaller的--add-data参数,直接将templates和static文件夹打包进exe:

    # Windows系统
    pyinstaller --add-data "templates;templates" --add-data "static;static" app.py
    
    # macOS/Linux系统
    pyinstaller --add-data "templates:templates" --add-data "static:static" app.py
    
    # 打包成单文件exe(Windows)
    pyinstaller -F --add-data "templates;templates" --add-data "static;static" app.py
    
  • 使用.spec文件配置资源

    1. 生成.spec文件:
      pyinstaller app.py
      
    2. 打开生成的app.spec,修改datas字段:
      datas = [('templates', 'templates'), ('static', 'static')]
      
    3. 通过.spec文件重新打包:
      pyinstaller app.spec
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:44:53