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

Flask应用经PyInstaller打包为exe后访问出现404 Not Found错误

Flask打包exe后404问题的排查与解决

1. 静态/模板路径不匹配(最常见原因)

PyInstaller打包后,Flask默认的templates和static目录路径会失效——因为exe运行时会解压到临时目录,而非脚本所在的原目录。

解决步骤:

  • 修改Flask实例初始化代码,适配打包后的路径:
import sys
import os
from flask import Flask

def create_app():
    # 判断是否为打包后的运行环境
    is_frozen = getattr(sys, 'frozen', False)
    app_root = sys._MEIPASS if is_frozen else os.path.dirname(os.path.abspath(__file__))

    app = Flask(
        __name__,
        template_folder=os.path.join(app_root, 'templates'),
        static_folder=os.path.join(app_root, 'static')
    )

    # 注册你的路由,示例:
    @app.route('/')
    def index():
        return "Hello World"

    return app

if __name__ == '__main__':
    app = create_app()
    app.run(host='0.0.0.0', port=5000)
  • 更新my_script.spec文件,确保资源目录被打包进去:
    在Analysis的datas参数中添加静态/模板目录映射:
a = Analysis(
    ['my_script.py'],
    datas=[
        ('templates', 'templates'),  # 原路径:打包后路径
        ('static', 'static')
    ],
    # 其他原有配置...
)

之后重新执行pyinstaller my_script.spec打包。

2. 路由未正确加载

如果使用了蓝图、动态导入或者模块化路由,PyInstaller可能没有自动包含这些模块,导致路由未注册。

解决方法:

  • 确保所有路由模块都被显式导入(避免隐式导入),比如在主脚本中导入蓝图:
from my_blueprint import bp

app.register_blueprint(bp)
  • 检查spec文件的hiddenimports参数,把未被自动检测到的模块加进去:
a = Analysis(
    ['my_script.py'],
    hiddenimports=['my_blueprint', 'other_route_module'],
    # 其他配置...
)

3. 运行时工作目录错误

exe运行时的当前工作目录可能不是exe所在目录,导致Flask无法读取配置或资源。

解决方法:

在代码开头添加工作目录切换逻辑:

if getattr(sys, 'frozen', False):
    # 切换到exe所在目录
    exe_dir = os.path.dirname(os.path.abspath(sys.executable))
    os.chdir(exe_dir)

4. 验证方法

  • 打包后运行exe时,在代码中打印关键路径(比如模板目录、当前工作目录),确认是否正确:
print(f"Template folder: {app.template_folder}")
print(f"Current working dir: {os.getcwd()}")
  • 检查Flask的路由列表,确认所有路由都已注册:
print("Registered routes:")
for rule in app.url_map.iter_rules():
    print(f"{rule.methods} -> {rule.rule}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:38