Corda Python: Como encontrar todas as importações e erros ausentes em todos os refatores de submódulos
Estou tentando encontrar todas as instruções de importação e erros ausentes para cada módulo e seus submódulos.
Existe uma ferramenta dedicada para o que estou tentando fazer?
O código que escrevi, mas parece realmente terrível e talvez algo assim já exista ?:
import os
def find_missing_imports(walk):
for items in walk:
d = items[0]
f_list = items[1]
for f in f_list:
module = f[:-3]
# posix_path
module_path = d.lstrip('.').replace('/','.').lstrip('.')
try:
__import__(module_path, fromlist=[module])
except IndentationError, e:
#print(f,e)
pass
except NameError, e:
print(d,f,e)
pass
except Exception, e:
print(f,e)
pass
walk = [[root,files] for root,dirs,files in os.walk('.') for fn in files if fn.endswith('.py')]
find_missing_imports(walk)
Saídas:
.[snip]
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ImageSelectionFrame.py', NameError("name 'wx' is not defined",))
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ItemSpecificsDialog.py', NameError("name 'wx' is not defined",))
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ReturnCorrectWatchTitle.py', NameError("name 'wx' is not defined",))
.[snip]
Meu projeto antes da refatoração era uma bagunça, mas meio útil, agora está quebrado após a refatoração.
Depois de ler 'O programador pragmático' com base nas sugestões do meu post inicial na revisão de códigos:
https://codereview.stackexchange.com/questions/46223/wxpython-item-information-scraperTenho pesquisado o código fonte de:
/usr/local/lib/python2.7/dist-packages/rope
A documentação para o ROPE parece um pouco esparsa. Também uso o Ninja-IDE, mas não consegui encontrar uma solução para o problema que estou enfrentando.
No geral, acho que perdi o barco sobre o que é refatoração.
O layout do diretório pai atual pode ser vistoaqui.
Em comparação com o que eraantes.
Qualquer ajuda, no preenchimento da terminologia que falta, ou no que estou pedindo, seria ótimo.
Solução:pylint -E /path/to/module