我正在尝试将破折号应用程序打包到单个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环境中,完全相同的代码可以很好地工作。唯一的区别应该是临时路径改为我的主目录。我在这里想念什么?
答案 0 :(得分:1)
我遇到了同样的问题,在尝试了一些东西之后,如果您仍然需要它,我终于找到了解决方案!
这非常简单...您所要做的就是键入:
app = dash.Dash(__name__, assets_folder=resource_path('assets'))
所以唯一的区别是键入'assets_folder'而不是'assets_url_path',它似乎适用于--onefile!