Streamlit дистрибутив не найден в исполняемой программе pyinstaller - PullRequest
0 голосов
/ 01 марта 2020

Я создал потоковое приложение, которое будет выполнять роль внешнего интерфейса для программы прогнозирования, а затем создал исполняемый файл pyinstaller для запуска приложения. Проблема возникает, когда я запускаю исполняемый файл, я получаю следующую ошибку: pkg_resources.DistributionNotFound: The 'streamlit' distribution was not found and is required by the application с этой трассировкой:

Traceback (most recent call last):
  File "main.py", line 8, in <module>
  File "<frozen importlib._bootstrap>", line 968, in _find_and_load
  File "<frozen importlib._bootstrap>", line 957, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "/opt/anaconda3/envs/Python35/lib/python3.5/site-packages/PyInstaller/loader/pyimod03_importers.py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages/streamlit/__init__.py", line 75, in <module>
  File "site-packages/pkg_resources/__init__.py", line 476, in get_distribution
  File "site-packages/pkg_resources/__init__.py", line 352, in get_provider
  File "site-packages/pkg_resources/__init__.py", line 895, in require
  File "site-packages/pkg_resources/__init__.py", line 781, in resolve

pkg_resources.DistributionNotFound: The 'streamlit' distribution was not found and is required by the application
[48095] Failed to execute script main

Файл был создан с помощью следующей команды: pyinstaller --onefile -w main.py

Это было настроено на macOS Catalina с python 3.5.6 в среде Conda

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

1 Ответ

1 голос
/ 04 марта 2020

Похоже, вам нужно добавить hook файл с именем hook-streamlit.py со следующим содержимым

from PyInstaller.utils.hooks import copy_metadata

datas = copy_metadata('streamlit')

Вам также необходимо передать флаг --additional-hooks-dir вашей команде pyinstaller.

Если вы поместили файл ловушек в тот же каталог, что и ваш скрипт python, вы можете указать его примерно так:

pyinstaller --onefile --additional-hooks-dir=. -w main.py

...