Как упаковать несколько файлов .py в один файл .exe? - PullRequest
0 голосов
/ 07 ноября 2019

Итак, у меня есть два .py файла. Один из них - main.py, а второй - animation.py

. В main.py есть функции, где я вызываю animation.py. main.py генерирует фактический графический интерфейс для моей программы. Animation.py - это в основном gif-файл, запускаемый в окне PyQt.

Функция внутри main.py:

import animation
import subprocess as sp
p = sp.Popen('animation.py')

Код анимации py:

import sys
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QMovie, QPainter, QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget
from PyQt5 import QtCore, QtGui, QtWidgets


class UIWindow(QWidget):
    def __init__(self, parent=None):
        super(UIWindow, self).__init__(parent)
        self.resize(QSize(600, 750))
        self.activateWindow()
        self.message = QPushButton("Waiting for Parsing to finish!", self)
        self.message.resize(300,50)
        self.message.move(150, 0)


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setGeometry(50, 50, 600, 500)
        self.setFixedSize(600, 500)
        self.startUIWindow()
        self.movie = QMovie("mr.bean_waiting.gif")
        self.movie.frameChanged.connect(self.repaint)
        self.movie.start()

    def startUIWindow(self):
        self.Window = UIWindow(self)
        self.setWindowTitle("Not soooo fast!")
        self.show()

    def paintEvent(self, event):
        currentFrame = self.movie.currentPixmap()
        frameRect = currentFrame.rect()
        frameRect.moveCenter(self.rect().center())
        if frameRect.intersects(event.rect()):
            painter = QPainter(self)
            painter.drawPixmap(frameRect.left(), frameRect.top(), currentFrame)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

Теперь я запускаю следующую команду для упаковки моего кода:

pyinstaller -y --clean --onefile \Users\user1\main.py

Когда я запускаю свой файл main.exe, это сообщение появляется в консоли, когда предполагается запустить анимацию:

python: can't open file 'animation.py': [Errno 2] No such file or directory

Так, как я могу решить эту проблему? Я думал - один файл должен упаковать все, что нужно main.py в исполняемый файл? Нужно ли упаковать animation.py в исполняемый файл и поместить его в ту же папку, где находится main.exe?

...