Фатальная ошибка! калькулятор (мое имя файла) вернул -1 при создании exe с помощью pyinstaller

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
  1. Затем он создает две папки с именами build и dist в папке калькулятора.

  2. Папка сборки содержит кучу файлов, а также 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

    cd desktop
    cd Calculator
    pyinstaller --onefile --windowed calculator.spec
    
    0 - импортировано unicodedata, stringprep, encodings.idna, C:\Users\Owner\Desktop\Calculator\calculator.py

И БОЛЬШЕ ЗАГРУЖАЕТ, НО НЕ МОГУ ИХ ПОСТАВИТЬ ИЗ-ЗА ОГРАНИЧЕНИЯ СЛОВ. Это просто куча отсутствующих модулей.

  1. В файле dist есть приложение под названием калькулятор, и когда я пытаюсь его запустить, оно выдает ошибку «Фатальная ошибка!». 'калькулятор вернул -1'

Я понятия не имею, что происходит, и любая помощь приветствуется, спасибо за внимание


person MAON    schedule 08.01.2016    source источник
comment
Вы можете загрузить исходный код pyinstaller и запустить его тесты. Они сообщают, что их тест Windows проходит прямо сейчас — ci.appveyor .com/project/matysek/pyinstaller/branch/develop/job/ . Тест должен дать больше информации о том, что не так   -  person AbdealiJK    schedule 09.01.2016
comment
Кроме того, вы уверены, что используете pyinstaller 3.0? До этого не было поддержки py3.x   -  person AbdealiJK    schedule 09.01.2016
comment
Привет всем, я пошел в cmd и запустил приложение, которое выдало мне ошибку, и оно говорит, что не может открыть «display.PNG», потому что такого файла или каталога нет. Как мне убедиться, что мои файлы PNG включены????   -  person MAON    schedule 09.01.2016


Ответы (2)


Я не уверен, поможет это или нет, но у меня была такая же проблема с pyinstaller. После того, как я создал приложение и запустил его, оно сказало «Фатальная ошибка: программа вернула -1», как вы и сказали. Оказалось, что pyinstaller не распознал путь к некоторым модулям, которые я использовал, потому что они не были модулями Python по умолчанию и хранились в другой папке. Чтобы исправить это, я просто набрал в командной строке следующее:

pyinstaller test.py --paths=C:/python35/lib/site-packages

Попробуйте использовать приведенную выше строку (с вашим файлом и путем) и посмотрите, поможет ли это. Это сработало для меня, и я надеюсь, что это сработает для вас. Если нет, я надеюсь, что вы найдете ответ.

person Mark Skelton    schedule 09.01.2016

  1. Проблема заключалась в том, что он не мог найти изображения, то есть файлы png
  2. Выдана ошибка: «Возвращена неустранимая ошибка -1».
  3. Чтобы это исправить, откройте файл .py
  4. Везде, где у вас есть изображение, вы должны ввести ПОЛНЫЙ путь. Вот одна из моих строк, объявляющая, какое изображение использовать.

PhotoImage(file='Display.PNG')

Вместо этого сформулируйте это так:

PhotoImage(file="C:\\Users\\Owner\\Desktop\\Calculator\\Display.PNG")

Он должен включать двойной \ \, чтобы он работал

  1. Сделайте это для каждого из ваших изображений
  2. запускай и будет работать!!
  3. Наконец, если вы получаете сообщение об ошибке «нет такого файла или каталога», это также решит эту проблему.
person MAON    schedule 09.01.2016