1. Я закодировал калькулятор, используя Python 3.4 tkinter, он использует множество изображений в формате PNG.
2. Я попытался преобразовать это в exe, используя cx_Freeze, это сработало, однако я хотел сделать его одним файлом вместо папки.
3. Итак, я решил использовать pyinstaller и начал с создания файла спецификации с именем «calculator.spec». Вот как это выглядит, я очень новичок в этом и изо всех сил пытался найти способ убедиться, что PNG используются или скорее просто пытаюсь заставить его работать. Кроме того, все мои файлы PNG, calculate.py и spec хранятся в одной папке на моем рабочем столе под названием Calculator.
Вот как выглядит мой файл спецификации:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['calculator.py'],
pathex=['C:\\Users\\Owner\\Desktop\\Calculator'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=None,
runtime_hooks=None,
excludes=None,
win_no_prefer_redirects=None,
win_private_assemblies=None,
cipher=block_cipher)
a.datas += [('Calculator/+.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\+.png', 'DATA')]
a.datas += [('Calculator/-.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\-.png', 'DATA')]
a.datas += [('Calculator/=.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\=.png', 'DATA')]
a.datas += [('Calculator/0.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\0.png', 'DATA')]
a.datas += [('Calculator/1.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\1.png', 'DATA')]
a.datas += [('Calculator/2.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\2.png', 'DATA')]
a.datas += [('Calculator/3.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\3.png', 'DATA')]
a.datas += [('Calculator/4.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\4.png', 'DATA')]
a.datas += [('Calculator/5.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\5.png', 'DATA')]
a.datas += [('Calculator/6.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\6.png', 'DATA')]
a.datas += [('Calculator/7.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\7.png', 'DATA')]
a.datas += [('Calculator/8.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\8.png', 'DATA')]
a.datas += [('Calculator/9.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\9.png', 'DATA')]
a.datas += [('Calculator/C.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\C.png', 'DATA')]
a.datas += [('Calculator/D.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\D.png', 'DATA')]
a.datas += [('Calculator/Display.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Display.png', 'DATA')]
a.datas += [('Calculator/Div.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Div.png', 'DATA')]
a.datas += [('Calculator/Dot.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Dot.png', 'DATA')]
a.datas += [('Calculator/Error1.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error1.png', 'DATA')]
a.datas += [('Calculator/Error2.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error2.png', 'DATA')]
a.datas += [('Calculator/Error3.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error3.png', 'DATA')]
a.datas += [('Calculator/Error4.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error4.png', 'DATA')]
a.datas += [('Calculator/Error5.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error5.png', 'DATA')]
a.datas += [('Calculator/Error6.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error6.png', 'DATA')]
a.datas += [('Calculator/Exit.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Exit.png', 'DATA')]
a.datas += [('Calculator/Instructions.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Instructions.png', 'DATA')]
a.datas += [('Calculator/X.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\X.png', 'DATA')]
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='calculator',
debug=False,
strip=None,
upx=True,
console=False )
4. Я захожу в cmd, запускаю от имени администратора и набираю следующее:
cd desktop
cd Calculator
pyinstaller --onefile --windowed calculator.spec
Затем он создает две папки с именами build и dist в папке калькулятора.
Папка сборки содержит кучу файлов, а также base_library и warncalculator. В warncalculator это говорит (нагрузка отсутствующих модулей пропускает вперед):
отсутствует модуль с именем ресурса - импортирован posix,
C:\Users\Owner\Desktop\Calculator\calculator.py отсутствует модуль с именем posix - импортирован ОС, C:\Users\Owner\Desktop\Calculator\calculator.py отсутствует модуль с именем _datetime.doc - импортировано _datetime, datetime, C:\Users\Owner\Desktop\Calculator\calculator.py отсутствует модуль с именем _posixsubprocess - импортирован подпроцессом, C:\Users\Owner\Desktop\Calculator\calculator.py отсутствует модуль с именем unicodedata.ucd_3
0 - импортировано unicodedata, stringprep, encodings.idna, C:\Users\Owner\Desktop\Calculator\calculator.pycd desktop cd Calculator pyinstaller --onefile --windowed calculator.spec
И БОЛЬШЕ ЗАГРУЖАЕТ, НО НЕ МОГУ ИХ ПОСТАВИТЬ ИЗ-ЗА ОГРАНИЧЕНИЯ СЛОВ. Это просто куча отсутствующих модулей.
- В файле dist есть приложение под названием калькулятор, и когда я пытаюсь его запустить, оно выдает ошибку «Фатальная ошибка!». 'калькулятор вернул -1'
Я понятия не имею, что происходит, и любая помощь приветствуется, спасибо за внимание