Estou gerando um web app usando o flet no front-end, porém quando vou fazer o deploy eu tenho um erro que fala que ele não está encontrando o flet core. Eu já li os logs, corrigi o código, mas nada adianta. log do erro: Enviando imagem para o registro... Upload realizado com sucesso ==> Implantando... Rastreamento (última chamada mais recente ): Arquivo "/app/main.py", linha 4, em <módulo> de fletcarousel importar BasicAnimatedHorizontalCarousel como bc, HintLine, AutoCycle Arquivo "/usr/local/lib/python3.10/site-packages/fletcarousel/__init__.py", linha 1, em <módulo> de .importação horizontal ( Arquivo "/usr/local/lib/python3.10/site-packages/fletcarousel/horizontal.py", linha 20, em <módulo> de flet_core.gradients importar Gradiente ModuleNotFoundError: Nenhum módulo chamado 'flet_core' ==> Saiu com status 1 ==> Maneiras comuns de solucionar problemas de implantação: https://render.com/docs/troubleshooting-deploys Rastreamento (última chamada mais recente ): Arquivo "/app/main.py", linha 4, em <módulo> de fletcarousel importar BasicAnimatedHorizontalCarousel como bc, HintLine, AutoCycle Arquivo "/usr/local/lib/python3.10/site-packages/fletcarousel/__init__.py", linha 1, em <módulo> de .importação horizontal ( Arquivo "/usr/local/lib/python3.10/site-packages/fletcarousel/horizontal.py", linha 20, em <módulo> de flet_core.gradients importar Gradiente ModuleNotFoundError: Nenhum módulo chamado 'flet_core' requirements.txt flet>=0.24.1 fletcarousel==0.0.13 Dockerfile # Use imagem oficial Python como base FROM python:3.10-slim # Define diretório de trabalho WORKDIR /app # Copia os arquivos requirements.txt e o código para dentro do container COPY requirements.txt ./ COPY . . # Atualiza pip e instala dependências RUN pip install --upgrade pip RUN pip install -r requirements.txt # Expõe a porta padrão usada pelo Flet EXPOSE 8080 # Comando para rodar sua aplicação CMD ["python", "main.py"] `import os import base64 import flet as ft from fletcarousel import BasicAnimatedHorizontalCarousel as bc, HintLine, AutoCycle def main(page: ft.Page): page.title = 'Menu' page.theme = ft.Theme() page.theme_mode = ft.ThemeMode.DARK # cadastrar produto list_img_to_cadastrar = [] file_picker = ft.FilePicker() page.overlay.append(file_picker) img_container = ft.Row(wrap=True, spacing=5) frame_images_cadastro = ft.Container( content=img_container, width=200, visible=True ) def on_files_selected(e: ft.FilePickerResultEvent): if e.files: for f in e.files: if len(list_img_to_cadastrar) < 4: file_bytes = f.read_bytes() base64_str = base64.b64encode(file_bytes).decode("utf-8") list_img_to_cadastrar.append(base64_str) img_container.controls.append(ft.Image(src_base64=base64_str, width=100, height=100, fit=ft.ImageFit.COVER)) page.update() file_picker.on_result = on_files_selected def add_images_to_cadastrar(e): if len(list_img_to_cadastrar) >= 4: page.snack_bar = ft.SnackBar(ft.Text('limite de 4 images atingido !')) page.snack_bar.open = True page.update() else: file_picker.pick_files(allow_multiple=True, allowed_extensions=["png","jpg", "jpeg"]) btn_add_img_to_cadastrar = ft.Container( content=ft.Icon(name=ft.icons.ADD, size=40), width=150, height=150, bgcolor=ft.colors.GREY_200, alignment=ft.alignment.center, border_radius=10, on_click=add_images_to_cadastrar ) nome_produto_cadastro = ft.TextField(label='Nome do Produto', color='#ffffff') Valor_promocional = ft.TextField(label='Valor Promocional', color='#ffffff') codigo_produto = ft.TextField(label='Codigo Produto', color='#ffffff') def mudando_valor_no_dropdown_cadastro(e): frequencia_exibicao.value = frequencia_exibicao.value page.update() frequencia_exibicao = ft.Dropdown( label='Frequência de exibição', hint_text='Selecione...', options=[ ft.dropdown.Option("Aleatória"), ft.dropdown.Option("Agendada"), ft.dropdown.Option("Não exibir"), ft.dropdown.Option("Obrigatório"), ], on_change=mudando_valor_no_dropdown_cadastro ) controle_visualizacao = ft.Checkbox(label='Controle de Visualização') frame_cadastro_produto = ft.Container( content=ft.Column( controls=[ ft.Row( controls=[ btn_add_img_to_cadastrar, ft.Column( controls=[ frame_images_cadastro, nome_produto_cadastro, Valor_promocional, codigo_produto, frequencia_exibicao, controle_visualizacao ] ) ] ) ] ), visible=False, bgcolor='#838383' ) def show_cadastro(e): frame_cadastro_produto.visible = not frame_cadastro_produto.visible page.update() # BUSCAR PRODUTO < ------------ def gerar_lista_produtos(): carrosel = bc( page=page, items=[ ft.Image( src="https://picsum.photos/200/300", height=150, fit=ft.ImageFit.CONTAIN, ), ], margin=10, border_radius=30 ) return ft.Container( content=ft.Row( controls=[ carrosel, ft.Column( controls=[ ft.Text('Tênis Nike'), ft.Text('Código Promocional'), ft.Text('Valor Promocional'), ], alignment=ft.MainAxisAlignment.CENTER, spacing=3 ), ft.ElevatedButton('open') ], alignment=ft.MainAxisAlignment.START, ), bgcolor='#838383', margin=10, padding=0, width=500, border_radius=30 ) frame_lista_produtos = ft.Column( scroll=ft.ScrollMode.AUTO, expand=True ) def buscar_produto(e): frame_lista_produtos.controls.clear() frame_lista_produtos.controls.append(gerar_lista_produtos()) frame_lista_produtos.update() search_produtos = ft.TextField(label='Pesquisar') frame_pesquisa = ft.Container( content=ft.Row( controls=[ search_produtos, ft.ElevatedButton(icon=ft.icons.SEARCH, text='.', color=ft.colors.WHITE, on_click=buscar_produto) ] ), margin=10 ) frame_main_produtos = ft.Container( content=ft.Column( controls=[ ft.Row( controls=[ frame_pesquisa, ft.ElevatedButton(text='Filtros'), ft.ElevatedButton(text='Add Produto', on_click=show_cadastro) ] ), frame_lista_produtos, frame_cadastro_produto ] ), visible=False, bgcolor='#151B38', border_radius=30, alignment=ft.alignment.center, margin=10 ) def show_main_produtos(e): frame_main_produtos.visible = not frame_main_produtos.visible page.update() # cabeçalho - botões lista_buttons = ft.Container( content=ft.Row( controls=[ ft.ElevatedButton(text='PRODUTOS', on_click=show_main_produtos, color=ft.colors.WHITE, bgcolor='#222256', width=100, height=37), ft.ElevatedButton(text='USUÁRIOS', color=ft.colors.WHITE, bgcolor='#222256', width=100, height=37), ft.ElevatedButton(text='CAMPANHAS', color=ft.colors.WHITE, bgcolor='#222256', width=110, height=37), ft.ElevatedButton(text='AGENDA', color=ft.colors.WHITE, bgcolor='#222256', width=100, height=37), ft.ElevatedButton(text='RELATÓRIOS', color=ft.colors.WHITE, bgcolor='#222256', width=100, height=37), ], alignment=ft.MainAxisAlignment.CENTER, spacing=50 ), margin=ft.margin.all(30) ) layout = ft.Column( controls=[ lista_buttons, frame_main_produtos ] ) page.add(layout) port = int(os.environ.get("PORT", 8080)) ft.app(target=main, view=ft.WEB_BROWSER, port=port)` eu tentei colocar meu web app no ar para testar uma funcionalidade, mas não obtive sucesso Continue reading...