Не удается создать рабочий исполняемый файл PyQt5 Python с PyInstaller / - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь создать исполняемый файл из кода Python, который я написал с использованием PyQt5, и просто не могу заставить его работать. Я следил за этим: https://blog.aaronhktan.com/posts/2018/05/14/pyqt5-pyinstaller-executable пример, когда дело доходит до добавления изображений и добавления всех вещей PyQt5 к скрытому импорту файла спецификации, но, похоже, ничего не работает.

Когда это создается на моем рабочем столе, я разработал код, все работает и все в порядке. Изображение появляется и запускается прямо из папки dist. Но когда я отправляю по электронной почте исполняемый файл на свой ноутбук и открываю его, я получаю сообщение «Не удалось выполнить скрипт abra_teleport». Я просто не уверен, что это не нравится.

РЕДАКТИРОВАТЬ: я изменил код, вместо того, чтобы импортировать из PyQt5.QtWidgets * он имеет из PyQt5.QtWidgets импортировать QLabel, QPushButton, QApplication, QMainWindow, но это ничего не меняет.

Код:

import sys
import os
import PyQt5
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Abra(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title='I choose you! Abra!'
        self.left=100
        self.top=100
        self.width=320
        self.height=200
        self.window()

    def window(self):
        def resource_path(relative_path):
            if hasattr(sys, '_MEIPASS'):
                return os.path.join(sys._MEIPASS, relative_path)
            return os.path.join(os.path.abspath('.'), relative_path)
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.label=QLabel('',self)
        self.label.move(100,20)
        self.abra=QLabel(self)
        self.abra.setPixmap(QPixmap(resource_path('resources/sprites/abra.png')))
        self.abra.move(130, 90)
        self.button=QPushButton('Go Abra!',self)
        self.button.move(110,150)
        self.button.clicked.connect(self.on_click)
        self.show()


    def part1(self):
        def resource_path(relative_path):
            if hasattr(sys, '_MEIPASS'):
                return os.path.join(sys._MEIPASS, relative_path)
            return os.path.join(os.path.abspath('.'), relative_path)
        try:
            self.label.setText('')
            self.abra.setPixmap(QPixmap(resource_path('resources/sprites/abra.png')))
            self.button.setText('Go Abra!')
            self.button.clicked.connect(self.on_click)
        except:
            print('mmm')

    def on_click(self):
        try:
            self.label.setText('Abra used Teleport!')
            self.label.adjustSize()
            self.abra.setPixmap(QPixmap(''))
            self.button.setText('Try again!')
            self.button.clicked.connect(self.part1)
        except:
            print('nope')

if __name__=='__main__':
    app=QApplication(sys.argv)
    ex=Abra()
    ex.show()
    sys.exit(app.exec_())

Спецификация:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['abra_teleport.py'],
             pathex=['C:\\Users\\marina\\Documents\\PokemonGUIProject\\Tests'],
             binaries=[],
             datas=[],
             hiddenimports=['PyQt5','PyQt5.QtWidgets','PyQt5.QtGui','PyQt5.QtCore'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

a.datas += [('resources/sprites/abra.png','resources/sprites/abra.png','DATA')]

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='abra_teleport',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False )
...