Инструмент, помогающий устранить импорт подстановочных знаков
Я рефакторинг и устранение подстановочных импортов на некотором довольно монолитном коде.
Pylint, похоже, отлично справляется со списком всех неиспользуемых импортов, которые поставляются вместе с подстановочным импортом, но я бы хотел, чтобы он предоставил список используемых импортов, чтобы я мог быстро заменить импорт подстановочных знаков. Какие-нибудь быстрые способы сделать это? Я собираюсь разобрать вывод pyLint и сделать set.difference()
на этом и dir()
импортированного модуля. Но я уверен, что есть какой-то инструмент/процедура, о которой я не знаю.
Ответы
Ответ 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>
начинаются с правильной функции.