Как включить активы dash-приложения в исполняемый файл, созданный с помощью pyinstaller --onefile? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь упаковать приложение-черточку в один 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"))

Это дает мне путь к текущему рабочему каталогу / assets. Он работает в среде Anaconda, а также в .exe, давая мне правильный путь в консоли.

Но в следующей части я столкнусь с неприятностями:

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

Как правило, assets_url_path= может использоваться для установки пути ресурса для приложений-черточек. В частности, мой файл CSS для форматирования хранится здесь, но он должен быть одинаковым для любого ресурса. Однако по некоторым причинам ресурсы не используются в версии приложения pyinstaller, несмотря на то, что print(resource_path("assets")) показывает правильный путь в системном каталоге Temp. Я даже могу перемещаться туда и видеть мой styles.css, но каким-то образом тире не поднимает его.

Что меня смущает, так это то, что точно такой же код прекрасно работает в моей среде анаконды. Единственная разница должна заключаться в том, что временный путь - это мой домашний каталог. Что мне здесь не хватает?

1 Ответ

1 голос
/ 10 июня 2019

У меня была та же проблема, и после экспериментов с вещами я наконец нашел решение, если оно вам все еще нужно !!!

Это очень просто ... все, что вам нужно сделать, это набрать:

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

так что единственное отличие состоит в том, чтобы набирать 'assets_folder' вместо 'assets_url_path', и, похоже, это работает для --onefile!

...