Проблема с открытие exe файла после создание через pyinstaller
Помогите, пожалуйста, разобраться. Сформировал exe файл на pyinstaller, но при его открытии вылетает ошибка:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\90C5~1\\AppData\\Local\\Temp\\_MEI111882\\distributed\\distributed.yaml'
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Scheduler.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import plotly.express as px
import pandas as pd
import numpy as np
from datetime import *
import os
import re
import random
import matplotlib.pyplot as plt
from dateutil.relativedelta import *
from matplotlib import colors as mcolors
from matplotlib.pyplot import figure
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton, QProgressBar
from PyQt5.QtCore import *
from PyQt5 import QtCore, QtGui, QtWidgets
desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
os.chdir(desktop)
if not os.path.isdir("Графикователь"):
os.mkdir("Графикователь")
os.chdir(desktop + "\\Графикователь")
plt.rcParams["figure.figsize"] = [400,200]
plt.rc('axes', labelsize=15)
plt.rc('font', size=70)
pd.options.mode.chained_assignment = None
#Auxiliary data
#Dictionary
dictionaryRM = {'TD_11_1Suprarex SXE-P3 4500_1.1':[0.5, 2, 2, 12, 0, 0.75, 1]}
#List of RM in queue
listQueueRM = ['TD_11_1Suprarex SXE-P3 4500_1.1']
class Ui_Scheduler(object):
def setupUi(self, Scheduler):
Scheduler.setObjectName("Scheduler")
Scheduler.resize(1109, 645)
self.pushButton = QtWidgets.QPushButton(Scheduler)
self.pushButton.setGeometry(QtCore.QRect(820, 380, 241, 101))
self.pushButton.setIconSize(QtCore.QSize(20, 20))
self.pushButton.setAutoDefault(True)
self.pushButton.setDefault(True)
self.pushButton.setObjectName("pushButton")
self.OLaunch = QtWidgets.QDateEdit(Scheduler)
self.OLaunch.setGeometry(QtCore.QRect(430, 50, 121, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.OLaunch.setFont(font)
self.OLaunch.setObjectName("OLaunch")
self.TLaunch = QtWidgets.QDateEdit(Scheduler)
self.TLaunch.setGeometry(QtCore.QRect(430, 90, 121, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.TLaunch.setFont(font)
self.TLaunch.setObjectName("TLaunch")
self.calendar = QtWidgets.QCalendarWidget(Scheduler)
self.calendar.setGeometry(QtCore.QRect(630, 40, 421, 231))
self.calendar.setObjectName("calendar")
self.progressBar = QtWidgets.QProgressBar(Scheduler)
self.progressBar.setGeometry(QtCore.QRect(820, 500, 241, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(100)
self.textEdit_4 = QtWidgets.QTextEdit(Scheduler)
self.textEdit_4.setGeometry(QtCore.QRect(140, 240, 151, 31))
self.textEdit_4.setObjectName("textEdit_4")
self.textEdit_5 = QtWidgets.QTextEdit(Scheduler)
self.textEdit_5.setGeometry(QtCore.QRect(290, 240, 151, 31))
self.textEdit_5.setObjectName("textEdit_5")
self.Start = QtWidgets.QDateEdit(Scheduler)
self.Start.setGeometry(QtCore.QRect(160, 280, 121, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.Start.setFont(font)
self.Start.setObjectName("Start")
self.Finish = QtWidgets.QDateEdit(Scheduler)
self.Finish.setGeometry(QtCore.QRect(310, 280, 121, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.Finish.setFont(font)
self.Finish.setObjectName("Finish")
self.label_1 = QtWidgets.QLabel(Scheduler)
self.label_1.setGeometry(QtCore.QRect(26, 53, 401, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_1.setFont(font)
self.label_1.setAlignment(QtCore.Qt.AlignCenter)
self.label_1.setObjectName("label_1")
self.label_2 = QtWidgets.QLabel(Scheduler)
self.label_2.setGeometry(QtCore.QRect(30, 90, 401, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_2.setFont(font)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Scheduler)
self.label_3.setGeometry(QtCore.QRect(110, 170, 401, 41))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(Scheduler)
self.label_4.setGeometry(QtCore.QRect(100, 200, 401, 41))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_4.setFont(font)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setObjectName("label_4")
self.PlanExcel = QtWidgets.QLineEdit(Scheduler)
self.PlanExcel.setGeometry(QtCore.QRect(510, 380, 261, 31))
self.PlanExcel.setObjectName("PlanExcel")
self.label_5 = QtWidgets.QLabel(Scheduler)
self.label_5.setGeometry(QtCore.QRect(30, 380, 401, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_5.setFont(font)
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setObjectName("label_5")
self.LaborExcel = QtWidgets.QLineEdit(Scheduler)
self.LaborExcel.setGeometry(QtCore.QRect(510, 430, 261, 31))
self.LaborExcel.setObjectName("LaborExcel")
self.label_6 = QtWidgets.QLabel(Scheduler)
self.label_6.setGeometry(QtCore.QRect(30, 430, 401, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_6.setFont(font)
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setObjectName("label_6")
self.label_7 = QtWidgets.QLabel(Scheduler)
self.label_7.setGeometry(QtCore.QRect(10, 480, 441, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_7.setFont(font)
self.label_7.setAlignment(QtCore.Qt.AlignCenter)
self.label_7.setObjectName("label_7")
self.NameFile = QtWidgets.QLineEdit(Scheduler)
self.NameFile.setGeometry(QtCore.QRect(510, 480, 261, 31))
self.NameFile.setObjectName("NameFile")
self.DatePZ = QtWidgets.QDateEdit(Scheduler)
self.DatePZ.setGeometry(QtCore.QRect(640, 530, 131, 31))
font = QtGui.QFont()
font.setPointSize(12)
font.setKerning(True)
self.DatePZ.setFont(font)
self.DatePZ.setLayoutDirection(QtCore.Qt.LeftToRight)
self.DatePZ.setObjectName("DatePZ")
self.label_8 = QtWidgets.QLabel(Scheduler)
self.label_8.setGeometry(QtCore.QRect(10, 530, 621, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(11)
self.label_8.setFont(font)
self.label_8.setAlignment(QtCore.Qt.AlignCenter)
self.label_8.setObjectName("label_8")
self.label_9 = QtWidgets.QLabel(Scheduler)
self.label_9.setGeometry(QtCore.QRect(640, 560, 131, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(6)
self.label_9.setFont(font)
self.label_9.setText("")
self.label_9.setAlignment(QtCore.Qt.AlignCenter)
self.label_9.setObjectName("label_9")
self.label_10 = QtWidgets.QLabel(Scheduler)
self.label_10.setGeometry(QtCore.QRect(20, 600, 1071, 31))
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(12)
self.label_10.setFont(font)
self.label_10.setText("")
self.label_10.setAlignment(QtCore.Qt.AlignCenter)
self.label_10.setObjectName("label_10")
self.step = 0
self.retranslateUi(Scheduler)
QtCore.QMetaObject.connectSlotsByName(Scheduler)
self.pushButton.clicked.connect(self.TotalFunction)
self.OLaunch.setDateTime(QDateTime.currentDateTime())
self.TLaunch.setDateTime(QDateTime.currentDateTime())
self.Start.setDateTime(QDateTime.currentDateTime())
self.Finish.setDateTime(QDateTime.currentDateTime())
self.DatePZ.setDateTime(QDateTime.currentDateTime())
def retranslateUi(self, Scheduler):
_translate = QtCore.QCoreApplication.translate
Scheduler.setWindowTitle(_translate("Scheduler", "Графикователь"))
self.pushButton.setText(_translate("Scheduler", "Запустить расчет"))
self.textEdit_4.setHtml(_translate("Scheduler", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">Начало периода</span></p></body></html>"))
self.textEdit_5.setHtml(_translate("Scheduler", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">Окончание периода</span></p></body></html>"))
self.label_1.setText(_translate("Scheduler", "Укажите дату запуска изделий ОКШ и ДШ"))
self.label_2.setText(_translate("Scheduler", "Укажите дату запуска изделий ТШС и ПШС"))
self.label_3.setText(_translate("Scheduler", "Укажите временные границы отгрузки"))
self.label_4.setText(_translate("Scheduler", "запланированных изделий"))
self.label_5.setText(_translate("Scheduler", "Введите название файла excel - План"))
self.label_6.setText(_translate("Scheduler", "Введите название файла excel - Трудоемкость"))
self.label_7.setText(_translate("Scheduler", "Введите название файла для сохранения графика"))
self.label_8.setText(_translate("Scheduler", "Введите дату ----> Сформируется файл с указанием РЦ и количеством по ПЗ"))
def TotalFunction(self):
"""
This function combines all functions
"""
self.progressBar.setValue(self.step)
df = pd.read_excel(self.PlanExcel.text())
# Получение дополнительных параметров, необходимых для расчета
def BuildGantGraph(ds):
"""
Gant graph is built of the function.
"""
ds["Quantity"] = ds["Quantity"].astype(int)
l_drop_col = []
for i in ds.columns[29:]:
if i not in dataBase['Наименование РЦ'].tolist():
l_drop_col.append(i)
ds.drop(l_drop_col, axis=1, inplace=True)
colors = []
for i in range(4):
for y in mcolors.CSS4_COLORS.values():
colors.append(y)
random.shuffle(colors)
fig, gnt = plt.subplots()
# Setting Y-axis limits
gnt.set_ylim(0, len(dataBase) * 10)
# Setting X-axis limits
if launchOK > launchTS:
gnt.set_xlim(launchTS, launchTS + relativedelta(months=2))
else:
gnt.set_xlim(launchOK, launchOK + relativedelta(months=2))
# Setting labels for x-axis and y-axis
gnt.set_xlabel('Timeline')
gnt.set_ylabel('Operations')
# Setting ticks on y-axis
gnt.set_yticks([i for i in range(5, (len(dataBase) * 10)+5, 10)])
# Labelling tickes of y-axis
gnt.set_yticklabels(list(dataBase['Наименование РЦ']))
# Setting graph attribute
gnt.grid(False)
# Create dictionaries to calculte certain kind of products
dictionaryOfWorkCenter = dict()
dictionaryEndOfWorkCenter = dict()
dictionaryTimeMachineOfWC = dict()
for i in dataBase.index:
dictionaryOfWorkCenter.setdefault(dataBase['Наименование РЦ'][i], 0)
dictionaryEndOfWorkCenter.setdefault(dataBase['Наименование РЦ'][i], datetime(2022, 12, 1, 8, 0, 0))
dictionaryTimeMachineOfWC.setdefault(dataBase['Наименование РЦ'][i], 0)
# List of variables
launch = launchTS
deltaTime = timedelta(hours = 0)
timeOfMachine = 0
c = 0
# Algorithm for draw
for i in ds.index: # Loop on PZ
if ds['Вид изделия'][i] == 'ОКШ' or ds['Вид изделия'][i] == 'ДШ' or ds['Вид изделия'][i] == 'Муфта' \
or ds['Вид изделия'][i] == 'Прочая продукция':
continue
deltaTime += timedelta(hours=dictionaryOfWorkCenter['TD_11_1Suprarex SXE-P3 4500_1.2'])
start = launch + deltaTime
c += 1
for k, v in zip(ds.columns[29:], dataBase.index): # Loop on work center
# Check the execution of operations on the work center
if ds[k][i] == 0:
continue
# Correct start
if start < dictionaryEndOfWorkCenter[k]:
start = dictionaryEndOfWorkCenter[k]
# Check the enough time of work center
if dictionaryTimeMachineOfWC[k] >= dataBase['availableTime'][v]:
# Temporary variable to change start if time of machine are reached
delta = (timedelta(hours=24) - timedelta(hours=dictionaryTimeMachineOfWC[k]))
if delta > timedelta(hours=0):
start += delta
else:
start += timedelta(hours=0)
dictionaryTimeMachineOfWC[k] = 0
dictionaryEndOfWorkCenter[k] = start
# Update variables
timeOfTask = 0
counter = 0
for j in (range(ds['Quantity'][i])): # Loop on quantity of PZ
timeOfMachine += ds[k][i] / dataBase['Кол-во единиц оборудования, шт'][v]
timeOfTask += ds[k][i] / dataBase['Кол-во единиц оборудования, шт'][v]
counter += 1
gnt.broken_barh([((start, timedelta(hours=np.float64(timeOfTask))))], (v * 10, 5), \
facecolors = mcolors.to_rgba(colors[c], 0.5))
if dictionaryEndOfWorkCenter[k] >= startDatePZ and dictionaryEndOfWorkCenter[k] <= finishDatePZ:
dataOpPZ.setdefault(k, {}).setdefault(ds["Номер ПЗ"][i], 0)
dataOpPZ[k][ds["Номер ПЗ"][i]] += counter
start += timedelta(hours=np.float64(timeOfTask))
#plt.text(start, v * 10, f'{counter} - {ds["Номер ПЗ"][i]}')
# Add timeOfTask into dict to each work center
dictionaryOfWorkCenter[k] = timeOfTask
dictionaryEndOfWorkCenter[k] = start
dictionaryTimeMachineOfWC[k] += timeOfMachine
timeOfMachine = 0
fileName = f'Данные по количеству в ПЗ на рабочих центрах на {datePZ}.xlsx'
pd.DataFrame(dataOpPZ).to_excel(fileName)
self.label_9.setText(f"Файл сохранен")
self.label_10.setText(f"Все файлы расположены в директории {os.getcwd()}")
self.step += 12
self.progressBar.setValue(self.step)
gnt.axvspan(startPlan, finishPlan, color="blue", alpha=0.05)
plt.savefig(self.NameFile.text())
plt.show()
BuildGantGraph(df)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon("project_plan_22131.png"))
Scheduler = QtWidgets.QWidget()
ui = Ui_Scheduler()
ui.setupUi(Scheduler)
Scheduler.show()
sys.exit(app.exec_())
Что можно сделать?
Источник: Stack Overflow на русском