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

如何用PyInstaller打包Plotly Dash仪表盘时包含Assets目录下的CSS文件?

解决PyInstaller打包Dash应用时Assets目录CSS文件未被包含的问题

以下是几种可行的解决方式:

1. 打包时通过--add-data参数指定Assets目录

直接在PyInstaller命令中添加Assets目录的资源映射,不同操作系统语法略有区别:

  • Windows系统:
    pyinstaller --add-data "assets/*;assets/" your_dash_app.py
    
  • Linux/macOS系统:
    pyinstaller --add-data "assets/*:assets/" your_dash_app.py
    

如果使用.spec文件进行打包,打开生成的.spec文件,修改datas列表,添加Assets目录的映射:

a = Analysis(
    ['your_dash_app.py'],
    pathex=[],
    binaries=[],
    # 添加Assets目录映射
    datas=[('assets/*', 'assets')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)

修改后重新运行pyinstaller your_dash_app.spec即可。

2. 适配打包后的Assets路径

PyInstaller打包后会将资源文件放到临时目录sys._MEIPASS下,需要在代码中动态指定Assets文件夹路径:

import sys
import os
import dash

def get_assets_folder():
    # 判断是否处于打包后的运行环境
    if getattr(sys, 'frozen', False):
        # 打包后,资源文件位于sys._MEIPASS下的assets目录
        return os.path.join(sys._MEIPASS, 'assets')
    else:
        # 开发环境,直接使用本地assets目录
        return 'assets'

# 初始化Dash应用时指定动态获取的assets路径
app = dash.Dash(__name__, assets_folder=get_assets_folder())

3. 检查Assets目录结构与文件

确保你的Assets目录和主脚本在同一层级,且CSS文件名正确(无拼写错误),Dash默认只会识别assets目录下的.css/.js/.json文件,子目录中的资源不会自动加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:17