¿Cómo puedo analizar el código Python para identificar áreas problemáticas?

Tengo un gran repositorio de fuentes dividido en varios proyectos. Me gustaría producir un informe sobre la salud del código fuente, identificando áreas problemáticas que deben abordarse. Específicamente, me gustaría mencionar rutinas con una alta complejidad ciclomática, identificar la repetición...