Подтвердить что ты не робот

Инструмент, помогающий устранить импорт подстановочных знаков

Я рефакторинг и устранение подстановочных импортов на некотором довольно монолитном коде.

Pylint, похоже, отлично справляется со списком всех неиспользуемых импортов, которые поставляются вместе с подстановочным импортом, но я бы хотел, чтобы он предоставил список используемых импортов, чтобы я мог быстро заменить импорт подстановочных знаков. Какие-нибудь быстрые способы сделать это? Я собираюсь разобрать вывод pyLint и сделать set.difference() на этом и dir() импортированного модуля. Но я уверен, что есть какой-то инструмент/процедура, о которой я не знаю.

4b9b3361

Ответ 1

NB: pylint не рекомендует набор используемых импортов. При изменении этого параметра вы должны знать о других модулях, импортирующих измененный вами код, который может использовать символы, принадлежащие пространству имен модуля, который вы рефакторинг, только потому, что у вас есть неиспользуемый импорт.

Я рекомендую следующую процедуру для рефакторирования from foo import *:

  • в интерактивной оболочке введите:

    import re
    import foo as module # XXX use the correct module name here!
    
    module_name = module.__name__
    import_line = 'from %s import (%%s)' % module_name
    length = len(import_line) - 3
    print import_line % (',\n' + length * ' ').join([a for a in dir(module) 
                                                                   if not re.match('__.*[^_]{2}', a)])
    
  • замените строку from foo import * на одну, указанную выше

  • запустите pylint и удалите неиспользуемые импорт, помеченные командой pylint
  • запустить pylint снова на весь код, основываясь на поиске не существующих символов
  • выполните тесты устройств

повторить с from bar import *

Ответ 2

Здесь dewildcard, очень простой инструмент, основанный на первоначальных идеях Alex:

https://github.com/quentinsf/dewildcard

Ответ 3

Это старый вопрос, но я написал кое-что, что делает это на основе автофлейма.

Смотрите здесь: https://github.com/fake-name/autoflake/blob/master/autostar.py

Он работает в противоположном направлении, как dewildcard, в том смысле, что он пытается полностью квалифицировать все варианты использования подстановочных знаков.

Например

from os.path import *

Преобразуется в

import os.path

и все случаи использования os.path.<func> начинаются с правильной функции.