Инструмент, помогающий устранить подстановочные знаки
Я занимаюсь рефакторингом и устраняю импорт подстановочных знаков для некоторого довольно монолитного кода.
Pylint, кажется, отлично справляется со списком всех неиспользованных импортов, которые идут вместе с импортом с подстановочными знаками, но я хотел бы предоставить список использованных импортов, чтобы я мог быстро заменить импорт с подстановочными знаками. Какие-нибудь быстрые способы сделать это? Я собираюсь разобрать вывод pyLint и сделать set.difference()
на этом и dir()
импортируемого модуля. Но держу пари, что есть какой-то инструмент / процедура, о которой я не знаю.
2 ответа
Примечание: 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 *
Вот карта dewild, очень простой инструмент, основанный на первоначальных идеях Алекса:
Это старый вопрос, но я написал кое-что, что делает это на основе автозапуска.
Смотрите здесь: https://github.com/fake-name/autoflake/blob/master/autostar.py
Он работает в противоположном направлении от dewildcard, поскольку пытается полностью квалифицировать все варианты использования элементов с подстановочными знаками.
Например
from os.path import *
Преобразован в
import os.path
и все виды использования os.path.<func>
добавляются с соответствующей функцией.