如何用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
相关产品推荐
相关产品推荐

