#python #python-3.x #pyinstaller #plotly-dash
#python #python-3.x #pyinstaller #plotly-dash
Вопрос:
Я пытаюсь упаковать приложение 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-файл для форматирования, но это должен быть один и тот же процесс для любого ресурса. Однако по какой-то причине ресурсы не используются в версии приложения pyinstaller, несмотря print(resource_path("assets"))
на то, что в системном каталоге указан правильный путь Temp
. Я даже могу перейти туда и посмотреть my styles.css
, но почему-то dash не распознает его.
Что меня смущает, так это то, что точно такой же код отлично работает в моей среде anaconda. Единственное отличие должно заключаться в том, что временный путь — это мой домашний каталог. Чего мне здесь не хватает?
Ответ №1:
У меня была такая же проблема, и после экспериментов с материалом я, наконец, нашел решение, если оно вам все еще нужно!!!
Это очень просто… все, что вам нужно сделать, это ввести:
app = dash.Dash(__name__, assets_folder=resource_path('assets'))
таким образом, единственное отличие состоит в том, чтобы ввести ‘assets_folder’ вместо ‘assets_url_path’, и, похоже, это работает для —onefile!
Комментарии:
1. Спасибо! С тех пор я полностью подключился к своему приложению, но я уверен, что в какой-то момент оно появится снова.
2. Документация не описывает это так подробно, как я хотел. Ваш ответ помог, и просмотр источника помог. github.com/plotly/dash/blob/dev/dash/dash.py#L111
3. мне также помогло добавление —add-data ‘assets:assets’