2
respostas

erro no mypy

Pessoal meu esta acusando esse erro aqui:

 mypy main.py
fabrica_fila.py:4: error: Skipping analyzing "fila_prioritaria": module is installed, but
 missing library stubs or py.typed marker
from typing import Union

from fila_normal import FinalNormal
from fila_prioritaria import FilaPrioridade
from constantes import TIPO_FILA_NORMAL, TIPO_FILA_PRIORITARIA


class FabricaFila:
    @staticmethod
    def pega_fila(tipo_fila) -> Union[FinalNormal, FilaPrioridade]:
        if tipo_fila == 'normal':
            return FinalNormal()
        elif tipo_fila == 'prioritaria':
            return FilaPrioridade()
        else:
            raise NotImplementedError ('Tipo de fila não existe')
2 respostas

acho q esta tudo igual do professor unica diferença que fiz isso aqui por causa do flake8:

.pre.commit-config.yaml

repos:
-   repo: https://github.com/pycqa/flake8
    rev: '4.0.1'  # pick a git hash / tag to point to
    hooks:
    -   id: flake8

nao sei se isso pode ter influenciado em algo

Olá, tudo bem?

O erro module is installed, but missing library stubs or py.typed marker é apresentado quando o mypy encontra importações de módulos de terceiros mas não encontra a biblioteca stubs que é responsável por determinar as dicas de tipos de bibliotecas e funções de terceiros ou bibliotecas criadas pelo usuário.

O arquivo de configuração do flake8 (.pre.commit-config.yaml) não está ligado diretamente ao projeto, não é importado no projeto por exemplo, assim durante a verificação dos arquivos com o uso do mypy esse arquivo de configuração será ignorado.

Para remoção do erro, temos as seguintes recomendações segundo a documentação do mypy:

Alternativa um

  • Verifique se está sendo utilizado as versões mais atualizadas de bibliotecas de terceiros. Para isso execute o comando abaixo adicionando o nome da biblioteca que será verificada a versão.
    Python -m pip install --upgrade <nome_da_biblioteca>

Alternativa dois

  • Verifique a se está fazendo o uso da versão atualizada do mypy, para isso execute o código abaixo no terminal, caso esteja utilizando uma versão desatualizada a nova versão será instalada.

    Python -m pip install --upgrade mypy
  • Após executar o código acima, execute a verificação do arquivo, executando no terminal o código mypy <nome_do_arquivo.py>.

Alternativa três

  • Podemos criar nosso próprio stubs com uma ferramenta presente no mypy, para isso fazermos o uso do stubgen. Conforme o erro apresentado, não foi encontrado o stubs do arquivo fila_prioritaria.

  • Com o terminal aberto na pasta do projeto, execute o código abaixo, será criado uma pasta de nome out contendo o arquivo < nome_do_arquivo>.pyi. No código abaixo substitua o < nome_do_arquivo> pelo nome do arquivo que será criado o stubs.

    stubgen <nome_do_arquivo>.py
    
  • A pasta gerada deverá permanecer no mesmo diretório do projeto. Após executar o código acima, execute a verificação do arquivo, executando no terminal o código mypy <nome_do_arquivo.py>.

Alternativa quatro

  • Segundo a documentação do mypy podemos informar que determinada importação deverá ser ignorada no momento da verificação, o que eliminará o erro. Para isso será necessário adicionarmos um comentário na linha em que é realizado a importação. Como apresentado abaixo.

    from fila_prioritaria import FilaPrioridade   # type: ignore
    
  • Adicione o comentário # type: ignore e logo após, execute a verificação do arquivo, executando no terminal o código mypy <nome_do_arquivo.py>.

Peço que teste as alternativas acima, caso o erro mude peço que informe qual o erro gerado, para que você possa ser auxiliado da melhor forma.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!