Я пытаюсь создать исполняемый файл из кода 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 )