Я пытаюсь сгенерировать однофайловый исполняемый файл с помощью Pyinstaller, и всегда происходит сбой, если я пытаюсь добавить значок, но когда я не прошу мой компьютер добавить значок, приложение успешно собирается. Я пытался следовать инструкциям на следующих страницах:
https://github.com/PySimpleGUI/PySimpleGUI/issues/445
https://shanetully.com/2013/08/cross-platform-deployment-of-python-applications-with-pyinstaller/
Значок настройки Pyinstaller
но никто из них не помог мне. Основываясь на странице за второй этих ссылок, я добавил следующие строки (последние, которые я добавил, поскольку использую Windows, но я не мог понять, что такое if sys.platform == 'win32' else a.binaries,
(упомянуто на веб-сайте shanetully) должен сделать):
a.datas + [('images/ticon.ico', 'tfolder/images/ticon.ico', 'DATA')]
a.binaries + [('msvcp100.dll', 'C:\\Windows\\System32\\msvcp100.dll', 'BINARY'),
('msvcr100.dll', 'C:\\Windows\\System32\\msvcr100.dll', 'BINARY')]
в файл .spec и скопировал значок в tfolder/images
.
Сообщение об ошибке, которое я получил (а также получал похожие или идентичные сообщения с предыдущими попытками), было следующим. (имя пользователя моего компьютера заменено на имя пользователя stackoverflow:
PS C:\Users\hilssu\Documents\pyinstaller_ij> pyinstaller.exe "C:\Users\hilssu\Documents\pyinstaller_ij\main.spec"
103 INFO: PyInstaller: 3.4
103 INFO: Python: 3.5.6
106 INFO: Platform: Windows-10-10.0.17134-SP0
109 INFO: UPX is not available.
112 INFO: Extending PYTHONPATH with paths
['C:\\Users\\hilssu\\Documents\\pyinstaller_ij',
'C:\\Users\\hilssu\\Documents\\pyinstaller_ij']
114 INFO: checking Analysis
297 INFO: checking PYZ
364 INFO: checking PKG
446 INFO: Building because C:\Users\hilssu\Documents\pyinstaller_ij\build\main\main.exe.manifest changed
446 INFO: Building PKG (CArchive) PKG-00.pkg
156467 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
156523 INFO: Bootloader c:\program files\anaconda3\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe
156523 INFO: checking EXE
156525 INFO: Building EXE because EXE-00.toc is non existent
156530 INFO: Building EXE from EXE-00.toc
156537 INFO: SRCPATH [('images\\ticon.ico', None)]
156538 INFO: Updating icons from ['images\\ticon.ico'] to C:\Users\hilssu\AppData\Local\Temp\tmpzh0lbqym
Traceback (most recent call last):
File "c:\program files\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\program files\anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Program Files\Anaconda3\Scripts\pyinstaller.exe\__main__.py", line 9, in <module>
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\__main__.py", line 111, in run
run_build(pyi_config, spec_file, **vars(args))
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\__main__.py", line 63, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 838, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\building\build_main.py", line 784, in build
exec(text, spec_namespace)
File "<string>", line 35, in <module>
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\building\api.py", line 433, in __init__
self.__postinit__()
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
self.assemble()
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\building\api.py", line 522, in assemble
icon.CopyIcons(tmpnm, self.icon)
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\utils\win32\icon.py", line 177, in CopyIcons
return CopyIcons_FromIco(dstpath, [srcpath])
File "c:\program files\anaconda3\lib\site-packages\PyInstaller\utils\win32\icon.py", line 137, in CopyIcons_FromIco
win32api.UpdateResource(hdst, RT_GROUP_ICON, i, data)
File "c:\program files\anaconda3\lib\site-packages\win32ctypes\pywin32\win32api.py", line 269, in UpdateResource
handle, type, name, language, lp_data, len(lp_data))
File "c:\program files\anaconda3\lib\site-packages\win32ctypes\core\cffi\_resource.py", line 129, in _UpdateResource
lpData = ffi.from_buffer(cData)
File "c:\program files\anaconda3\lib\site-packages\cffi\api.py", line 340, in from_buffer
return self._backend.from_buffer(self.BCharA, python_buffer)
TypeError: from_buffer() cannot return the address of the raw string within a bytes or unicode object
И да, я попытался найти последнюю строку сообщения об ошибке самостоятельно, но так и не смог найти никакой помощи.
Кстати, это приложение, в котором я делаю хочу, чтобы консоль появлялась при его запуске.