Не могу сделать EXE-файл из кода на Python
При использовании pyinstaller исполняемый файл собирается, однако не запускается, выдаёт ошибку. Вот сам код:
import flet as ft
import tracemalloc
import telegram_send
import asyncio
def main(page: ft.Page):
page.title = "Сельскохозяйственный кальулятор"
page.theme_mode = 'dark'
page.vertical_alignment = 'center'
page.horizontal_alignment = 'center'
page.window.width = 1920
page.window.height = 1080
page.bgcolor = ft.colors.GREEN_800
def change_fon(e):
page.theme_mode = 'light' if page.theme_mode == 'dark' else 'dark'
page.update()
def validate(e):
if all([calc_obl.value, calc_cult.value, calc_area.value]):
calc_button.disabled = False
else:
calc_button.disabled = True
page.update()
user_label_pr = ft.Text(text_align=ft.TextAlign.CENTER, value='Приветствуем Вас в сельскохозяйственном калькуляторе!\nВ этом приложении реализован калькулятор для расчёта примерной \n доходности при посадки определённой культуры.\n \n Перед тем, как переключиться на сам калькулятор, рекомендуем Вам прочитать справку. \n Также, для переключения темы нужно нажать на иконку солнышка.', size=25, weight=ft.FontWeight.BOLD)
user_fon_icbutton = ft.IconButton(ft.icons.SUNNY, on_click=change_fon, icon_size=30)
user_label_spavka = ft.Text('Данный сельскохозяйственный калькулятор рассчитывает\nпримерную доходность от урожая определённой культуры. \n Для расчёт используются данные, которые были взяты из открытых источников.\n \n Для более точного расчёта можно использовать функцию *включить расширенный расчёт расходов*. \n В разблокировавшихся полях Вы должны вписать данные. \n Если по какому-то из предложенных полей у Вас нет данных, то там должен быть записан 0. \n \n В конечном итоге будет получен отчёт, \n в котором будут примерные расходы, примерная прибыль без учёта расходов, примерная чистая прибыль, \n а также использованное удобрение и средство защиты. \n\n Если у Вас возникли вопросы или пожелания, то отправьте их в окне *Обратная связь*', text_align=ft.TextAlign.CENTER, size=25, weight=ft.FontWeight.BOLD)
calc_label = ft.Text(text_align=ft.TextAlign.CENTER, value='Калькулятор\n', size=30, weight=ft.FontWeight.BOLD)
calc_obl = ft.Dropdown(
width=200,
options=[
ft.dropdown.Option('Ростовская область'),
ft.dropdown.Option('Другое')
], bgcolor= ft.colors.GREEN_800,
on_change=validate
)
calc_cult = ft.Dropdown(
width=200,
options=[
ft.dropdown.Option('Озимый ячмень'),
ft.dropdown.Option('Яровой ячмень'),
ft.dropdown.Option('Пшеница (3 класс)'),
ft.dropdown.Option('Пшеница (4 класс)'),
ft.dropdown.Option('Рожь'),
ft.dropdown.Option('Кукуруза (на зерно)'),
ft.dropdown.Option('Овёс'),
ft.dropdown.Option('Просо'),
ft.dropdown.Option('Гречиха'),
ft.dropdown.Option('Рис'),
ft.dropdown.Option('Сахарная свекла'),
ft.dropdown.Option('Подсолнечник'),
ft.dropdown.Option('Соя'),
ft.dropdown.Option('Рапс')
], bgcolor= ft.colors.GREEN_800,
on_change=validate
)
def dis_for_rash(e):
if calc_fl.value == True:
calc_rashod_ud.disabled = False
calc_rashod_zah.disabled = False
calc_rashod_wt.disabled = False
calc_rashod_strah.disabled = False
calc_rashod_rab.disabled = False
else:
calc_rashod_ud.disabled = True
calc_rashod_zah.disabled = True
calc_rashod_wt.disabled = True
calc_rashod_strah.disabled = True
calc_rashod_rab.disabled = True
page.update()
calc_area = ft.TextField(width=200, on_change=validate)
calc_res = ft.Text(text_align=ft.TextAlign.CENTER, value='', size=15, weight=ft.FontWeight.BOLD)
calc_fl = ft.Checkbox(label='Включить расширенный расчёт расходов.', value=False, on_change=dis_for_rash)
calc_rashod_ud = ft.TextField(width=200, disabled=True)
calc_rashod_zah = ft.TextField(width=200, disabled=True)
calc_rashod_wt = ft.TextField(width=200, disabled=True)
calc_rashod_strah = ft.TextField(width=200, disabled=True)
calc_rashod_rab = ft.TextField(width=200, disabled=True)
def send_msg(e):
tracemalloc.start()
a = obr_entry.value
async def send_message():
await telegram_send.send(messages=[a])
asyncio.run(send_message())
page.update()
def validate_for_obr(e):
if all([obr_entry.value]):
obr_btn.disabled = False
else:
obr_btn.disabled = True
page.update()
obr = ft.Text(text_align=ft.TextAlign.CENTER, value='Если Вы хотите отправить отзыв, то напишите его в поле ниже. \n Также, укажите контактные данные, что бы мы с Вами связались!', size=20, weight=ft.FontWeight.BOLD)
obr_entry = ft.TextField(width=400, on_change=validate_for_obr, multiline=True)
obr_btn = ft.ElevatedButton(text='Отправить', width=150, disabled=True, bgcolor= ft.colors.GREEN_900 ,on_click=send_msg)
def calc(e):
a1 = calc_obl.value
if a1 == 'Ростовская область':
a = calc_cult.value
area = calc_area.value
exp_ud = int(calc_rashod_ud.value) if calc_rashod_ud.value.strip() else 0
exp_zah = int(calc_rashod_zah.value) if calc_rashod_zah.value.strip() else 0
exp_wt = int(calc_rashod_wt.value) if calc_rashod_wt.value.strip() else 0
exp_strah = int(calc_rashod_strah.value) if calc_rashod_strah.value.strip() else 0
exp_rab = int(calc_rashod_rab.value) if calc_rashod_rab.value.strip() else 0
if a == 'Озимый ячмень':
ur, minst, maxst, pos = 3.1, 13640, 14960, 0.27
ud, st = 'Суперфосфат', 88
zah_nm, zah_st = 'Рубит Санти', 2352
elif a == 'Яровой ячмень':
ur, minst, maxst, pos = 1.38, 13640, 14960, 0.215
ud, st = 'Суперфосфат', 88
zah_nm, zah_st = 'Ансамбль', 1000
elif a == 'Пшеница (3 класс)':
ur, minst, maxst, pos = 2.4, 15620, 17160, 0.15
ud, st = 'Карбамид мочевина', 104
zah_nm, zah_st = 'Децис Эксперт', 4800
elif a == 'Пшеница (4 класс)':
ur, minst, maxst, pos = 2.4, 15070, 16610, 0.15
ud, st = 'Карбамид мочевина', 104
zah_nm, zah_st = 'Децис Эксперт', 4800
elif a == 'Рожь':
ur, minst, maxst, pos = 1.39, 11440, 12540, 0.15
ud, st = 'Нитрофоска', 65
zah_nm, zah_st = 'Комфорт Лисстера', 1100
elif a == 'Кукуруза (на зерно)':
ur, minst, maxst, pos = 5.44, 13900, 15500, 0.017
ud, st = 'Карбамид мочевина', 104
zah_nm, zah_st = 'Всполох Лисстера', 1000
elif a == 'Овёс':
ur, minst, maxst, pos = 2.86, 16000, 16000, 0.19
ud, st = 'Калий сернокислый', 135
zah_nm, zah_st = 'Беномил 500', 1830
elif a == 'Просо':
ur, minst, maxst, pos = 0.99, 15000, 19500, 0.025
ud, st = 'Азофоска', 92
zah_nm, zah_st = 'Аминопелик', 500
elif a == 'Гречиха':
ur, minst, maxst, pos = 4.7, 16000, 20000, 0.09
ud, st = 'Монокалийфосфат', 334
zah_nm, zah_st = 'Аминопелик', 500
elif a == 'Рис':
ur, minst, maxst, pos = 6.21, 18000, 27000, 0.216
ud, st = 'Азофоска', 92
zah_nm, zah_st = 'ФАЛЬКОН Bayer', 2300
elif a == 'Сахарная свекла':
ur, minst, maxst, pos = 29.6, 10000, 15000, 0.009
ud, st = 'Азофоска', 92
zah_nm, zah_st = 'Комфорт Лисстера', 1100
elif a == 'Подсолнечник':
ur, minst, maxst, pos = 2.12, 8000, 13500, 0.006
ud, st = 'Азофоска', 92
zah_nm, zah_st = 'Кобра Агрорус', 2000
elif a == 'Соя':
ur, minst, maxst, pos = 1.0, 10500, 14500, 0.1
ud, st = 'Суперфосфат двойной', 101
zah_nm, zah_st = 'Гезагард', 1476
elif a == 'Рапс':
ur, minst, maxst, pos = 2.94, 30000, 33000, 0.22
ud, st = 'Борофоска', 88
zah_nm, zah_st = 'Девринол', 790
rash_ud = int(exp_ud) * st
rash_zah = int(exp_zah) * zah_st
rash = ((minst * pos * int(area)) + rash_ud + rash_zah + int(exp_wt) + int(exp_rab) + int(exp_strah))
itog = int(area) * ur * maxst
pr = itog - rash
print(rash, itog, pr)
calc_res.value = f'На посадку семян на {area} гектар уйдёт {rash:.0f} рублей.\n С {area} гектаров вы можете получить до {itog:.0f} рублей.\n Чистая прибыль с {area} гектаров составляет {pr:.0f} рублей.'
if exp_ud > 0:
calc_res.value += f'\n Рекомендованное удобрение: {ud}'
if exp_zah > 0:
calc_res.value += f'\n Рекомендованное средство защиты: {zah_nm}'
else:
calc_res.value = 'Что-то пошло не так.'
page.update()
calc_button = ft.ElevatedButton(text='Посчитать', width=150, disabled=True, bgcolor=ft.colors.GREEN_900 ,on_click=calc)
panel_pr = ft.Row(
[ft.Column(
[
user_label_pr,
], alignment=ft.MainAxisAlignment.CENTER
)], alignment=ft.MainAxisAlignment.CENTER
)
panel_pr_1 = ft.Row([user_fon_icbutton], alignment=ft.MainAxisAlignment.CENTER)
panel_spravka = ft.Row([ft.Column([user_label_spavka], alignment=ft.MainAxisAlignment.CENTER)], alignment=ft.MainAxisAlignment.CENTER)
panel_calc = ft.ListView(
controls=[
calc_label,
ft.Text(value='Выберите область:', weight=ft.FontWeight.BOLD),
calc_obl,
ft.Text(value='Выберите культуру:', weight=ft.FontWeight.BOLD),
calc_cult,
ft.Text(value='Введите количество гектар:', weight=ft.FontWeight.BOLD),
calc_area,
calc_fl,
ft.Text(value='Введите вес купленного удобрения (в кг.):', weight=ft.FontWeight.BOLD),
calc_rashod_ud,
ft.Text(value='Введите количество средства защиты (в л.):', weight=ft.FontWeight.BOLD),
calc_rashod_zah,
ft.Text(value='Введите расходы на воду (в руб.):', weight=ft.FontWeight.BOLD),
calc_rashod_wt,
ft.Text(value='Введите расходы на страхование (в руб.):', weight=ft.FontWeight.BOLD),
calc_rashod_strah,
ft.Text(value='Введите расходы на рабочих (в руб.):', weight=ft.FontWeight.BOLD),
calc_rashod_rab
],
width=500,
height=500
)
panel_but = ft.Row(
[calc_button], alignment=ft.MainAxisAlignment.CENTER
)
panel_res = ft.Row(
[calc_res], alignment=ft.MainAxisAlignment.CENTER
)
def navigate(e):
index = page.navigation_bar.selected_index
page.clean()
if index == 0: page.add(panel_pr, panel_pr_1)
elif index == 1: page.add(panel_spravka)
elif index == 2: page.add(panel_calc, panel_but, panel_res)
elif index == 3: page.add(obr, obr_entry, obr_btn)
page.update()
page.navigation_bar = ft.NavigationBar(
destinations=[
ft.NavigationBarDestination(icon=ft.icons.MAN, label='Приветствие', bgcolor=ft.colors.GREEN_800),
ft.NavigationBarDestination(icon=ft.icons.BOOK, label='Справка', bgcolor=ft.colors.GREEN_800),
ft.NavigationBarDestination(icon=ft.icons.CALCULATE, label='Калькулятор', bgcolor=ft.colors.GREEN_800),
ft.NavigationBarDestination(icon=ft.icons.SEND, label='Обратная связь', bgcolor=ft.colors.GREEN_800)
], on_change=navigate, bgcolor=ft.colors.GREEN_900, indicator_color=ft.colors.GREEN_800
)
page.add(panel_pr, panel_pr_1)
ft.app(target=main)
Вот ошибка:
Traceback (most recent call last):
File "aks.py", line 262, in <module> File "flet\app.py" line 64, in app
File "asyncio\runners.py", line 194, in run
File "asyncio\runners.py", line 118, in run
File "asyncio\base_events.py", line 664, in run_until_complete File "flet\app.py", line 189, in app_async
File "flet_desktop\__init__.py", line 43, in open_flet_view_async
File "asyncio\subprocess.py", line 222, in create_subprocess_exec
File "asyncio\base_events.py", line 1708, in subprocess_exec
File "asyncio\windows_events.py", line 399, in _make_subprocess_transport File "asyncio\base_subprocess.py", line 36, in __init__ File "asyncio\windows_events.py", line 873, in _start
File "asyncio\windows_utils.py", line 153, in __init__
File "subprocess.py", line 1026, in __init__
File "subprocess.py", line 1538, in _execute_child
FileNotFoundError: [WinError 2] He удается найти указанный þайл
[PYI-6668: ERROR] Failed to execute script 'aks' due to unhandled exception!