【问题标题】:How can I include assets of a dash app into an exe file created with pyinstaller --onefile?如何将破折号应用程序的资产包含到使用 pyinstaller --onefile 创建的 exe 文件中?
【发布时间】:2019-04-09 16:03:02
【问题描述】:

我正在尝试将 dash 应用程序打包到单个 pyinstaller .exe 中,但遇到了一些麻烦,包括 assets 文件夹。

这是我到目前为止所做的:

# get temp working directory
    import sys
    import os
    def resource_path(relative_path):

# get absolute path to resource
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

print(resource_path("assets"))

这为我提供了当前工作目录/资产的路径。它可以在 anaconda 环境和 .exe 中工作,在控制台中为我提供了正确的路径。

但是下一部分是我遇到麻烦的地方:

# create app
app = dash.Dash(__name__, assets_url_path=resource_path("assets"))

通常,assets_url_path= 可用于设置 dash 应用的资产路径。具体来说,我在这里存储了用于格式化的 css 文件,但对于任何资产,它都应该是相同的过程。然而,出于某种原因,尽管print(resource_path("assets")) 在系统的Temp 目录中显示了正确的路径,但这些资产并未在应用程序的 pyinstaller 版本中使用。我什至可以导航到那里并查看我的styles.css,但不知何故,dash 无法识别它。

让我感到困惑的是,完全相同的代码在我的 anaconda 环境中运行良好。唯一的区别应该是临时路径是我的主目录。我在这里错过了什么?

【问题讨论】:

    标签: python python-3.x pyinstaller plotly-dash


    【解决方案1】:

    我遇到了同样的问题,在尝试了一些东西后,如果您仍然需要它,我终于找到了解决方案!!!

    这很简单......你所要做的就是输入:

    app = dash.Dash(__name__, assets_folder=resource_path('assets'))
    

    所以唯一的区别是输入“assets_folder”而不是“assets_url_path”,它似乎适用于--onefile!

    【讨论】:

    • 谢谢!此后,我的应用已完全上线,但我相信它会在某个时候再次出现。
    • 文档没有按照我想要的那样详细描述它。您的回答有所帮助,并且查看源代码有所帮助。 github.com/plotly/dash/blob/dev/dash/dash.py#L111
    • 还添加了 --add-data 'assets:assets' 帮助了我
    猜你喜欢
    • 2017-05-21
    • 2015-10-28
    • 2021-12-17
    • 2013-05-18
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2016-12-14
    相关资源
    最近更新 更多