#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
? Вы можете использовать его, и он автоматически добавит эти строки в файл спецификации, тогда вы сможете увидеть, что там не так.