解决PyInstaller打包Python可执行文件时的index.html模板找不到问题
解决PyInstaller打包Jinja2模板文件缺失问题
问题原因
PyInstaller默认不会自动识别Jinja2的模板文件,在--onefile单文件模式下,所有外部资源需要明确指定打包规则;同时运行时程序会解压到系统临时目录,代码中原本的相对路径会直接失效。
解决方案
调整代码中的模板加载路径
新增路径适配函数,兼容开发环境和打包后的运行环境:import os import sys from jinja2 import Environment, FileSystemLoader def get_resource_path(relative_path): # 适配打包后的资源路径 if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path) # 加载模板 template_path = get_resource_path('.') env = Environment(loader=FileSystemLoader(template_path)) template = env.get_template('index.html')通过.spec文件指定打包资源
- 先生成基础的.spec文件:
pyinstaller --onefile -w main.py - 打开生成的
main.spec,找到datas参数,添加模板文件的打包规则:
格式说明:datas = [('index.html', '.')](本地文件路径, 打包后临时目录的相对路径),需和代码中设置的模板路径匹配。 - 用.spec文件重新打包:
pyinstaller main.spec
- 先生成基础的.spec文件:
直接在命令行指定资源(无需修改.spec)
Windows系统使用:pyinstaller --onefile -w --add-data "index.html;." main.pyLinux/macOS系统使用:
pyinstaller --onefile -w --add-data "index.html:." main.py
内容的提问来源于stack exchange,提问作者Jimmy S
相关产品推荐
相关产品推荐

