Jak mogę przeanalizować kod Pythona, aby zidentyfikować problematyczne obszary?

Mam duże repozytorium źródłowe podzielone na wiele projektów. Chciałbym sporządzić raport na temat stanu kodu źródłowego, identyfikując obszary problemowe, którymi należy się zająć. W szczególności chciałbym przywołać procedury o dużej cyklicznej złożoności, zidentyfikować powtórzenia i być może...