данные в файлах спецификаций Pyinstaller: Проблема с объединением типов файлов

#python #pyinstaller

#питон #pyinstaller

Вопрос:

У меня есть функционирующий скрипт, который я смог преобразовать в приложение для Mac в прошлом с помощью pyinstaller. Чтобы изображение было правильно включено в пакет приложений, мне пришлось добавить его в качестве данных в свой файл спецификаций, часть анализа, которая начинается следующим образом:

 from PyInstaller.utils.hooks import collect_data_files  a = Analysis(['main_app.py'],pathex=  ['/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages'], binaries=[], datas=[], hiddenimports=['PIL','connectivipy'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False)  a.datas  = [('background.png','/Desktop/background.png', "DATA")]  

Мой основной скрипт находится в том же каталоге, что и фоновое изображение. Следуя предложениям в нескольких других постах, я также включил следующее в свой основной сценарий:

 def resource_path(relative_path):  try:  base_path = sys._MEIPASS  except Exception:  base_path = os.path.abspath(".")  return os.path.join(base_path, relative_path)  

Затем, при построении фона в моем основном сценарии, я использовал resource_path аргумент, состоящий из местоположения изображения, например, как показано здесь:

 plt.imread(resource_path('Desktop/background.png'))  

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

Теперь мне также нужно добавить множество файлов данных различных типов из обновленного пакета. Игнорируя изображение выше на данный момент, я мог бы включить их, вместо этого используя

 a.datas =collect_data_files('package_name')  

Проблема, с которой я сталкиваюсь на данный момент, заключается в объединении файлов данных фона и пакета вместе. Файлы данных пакета представляют собой упорядоченные пары формы (path1,path2) , в то ('background.png','/Desktop/background.png', "DATA") время как это упорядоченная тройка. Если я объединюсь collect_data_files('package_name') и [('background.png','/Desktop/background.png', "DATA")] попытаюсь сформировать a.datas , у меня будет список или обе упорядоченные пары и упорядоченная тройка, что приведет к тому, что pyinstaller не сможет создать приложение.

Я экспериментировал , меняя ('background.png','/Desktop/background.png', "DATA") вышеприведенное на простое ('background.png', '.') , наряду с различными другими вещами, но, похоже, не могу заставить все работать

Комментарии:

1. Ты пробовал --add-data ? Вы можете использовать его, и он автоматически добавит эти строки в файл спецификации, тогда вы сможете увидеть, что там не так.