如何将破折号应用程序的资产包含到使用pyinstaller --onefile创建的exe文件中?

时间:2019-04-09 16:03:03

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

我正在尝试将破折号应用程序打包到单个pyinstaller .exe中,并且遇到了一些麻烦,包括资产文件夹。

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

# 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=可用于设置仪表板应用程序的资产路径。具体来说,我将用于格式化的css文件存储在此处,但是对于任何资产,它应该是相同的过程。但是,由于某些原因,尽管print(resource_path("assets"))在系统的Temp目录中显示了正确的路径,但资产并未在应用程序的pyinstaller版本中使用。我什至可以导航到那里,看到我的styles.css,但是不知何故破折号没有显示它。

让我感到困惑的是,在我的anaconda环境中,完全相同的代码可以很好地工作。唯一的区别应该是临时路径改为我的主目录。我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

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

这非常简单...您所要做的就是键入:

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

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