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

PyInstaller打包PyQt5程序后QtWebEngine无法加载Bokeh交互式HTML

问题根因
  • QtWebEngine启动参数配置时机错误:--disable-web-security、--no-sandbox这类参数必须在QApplication实例化之前添加到sys.argv,你之前加的位置太晚不会生效,打包后沙箱限制、跨域限制会阻止JS加载和执行。
  • PyInstaller打包遗漏QtWebEngine依赖:默认--onefile打包不会自动包含QtWebEngine的运行时资源,导致JS执行环境异常,出现乱码、静态渲染问题。
  • setHtml缺少baseUrl参数:调用setHtml如果不指定baseUrl,QtWebEngine会用默认的空白域名,所有相对路径/本地路径的资源都会加载失败。
  • HTML结构错误:你手动拼接HTML时重复添加</head>标签,导致DOM结构解析异常,JS无法正常执行。
解决方案

1. 修正启动参数配置

把参数添加操作移到QApplication初始化之前,同时添加适配打包环境的运行参数:

if __name__ == '__main__':
    # 必须在QApplication实例化前添加参数
    sys.argv.append("--disable-web-security")
    sys.argv.append("--no-sandbox")
    sys.argv.append("--allow-file-access-from-files")
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

2. 优化Bokeh HTML生成逻辑

优先用INLINE模式把所有Bokeh的JS依赖直接内嵌到HTML中,完全避免外部/本地资源加载问题:
修改bokeh_function里的file_html调用即可:

# 把原来的CDN替换为INLINE,所有JS直接嵌入HTML
from bokeh.resources import INLINE
html = file_html(layout, INLINE, "my plot")

3. 修正setHtml调用

如果仍然需要使用外部/本地JS资源,调用setHtml时指定baseUrl为资源所在目录的本地URL:

from PyQt5.QtCore import QUrl, QDir
# 示例指定baseUrl为当前工作目录,可根据实际资源存储路径调整
self.m_output.setHtml(html_file, baseUrl=QUrl.fromLocalFile(QDir.currentPath() + "/"))

4. 修正打包命令

添加参数把QtWebEngine的完整依赖打包进去,避免运行时资源缺失:

pyinstaller .\main.py --onefile --noconsole --add-data "你的Python安装路径/Lib/site-packages/PyQt5/Qt5/resources/*;./resources" --add-data "你的Python安装路径/Lib/site-packages/PyQt5/Qt5/lib/QtWebEngineProcess.exe;." --hidden-import PyQt5.QtWebEngineCore --hidden-import PyQt5.QtWebEngineWidgets

注意把命令里的你的Python安装路径替换为本地Python的实际安装路径

5. 修复手动拼接HTML的语法错误

如果需要手动插入JS引用,不要重复写</head>标签:

final_html = '<html><head><meta charset="utf-8" />'
final_html += '<script src="{}"></script>'.format(local_js_library_1)
final_html += '<script src="{}"></script>'.format(local_js_library_2)
final_html += '<script src="{}"></script></head>'.format(local_js_library_3)
# 再拼接html_file的实际内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:02