Инструмент, помогающий устранить подстановочные символы при импорте - PullRequest
21 голосов
/ 31 августа 2011

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

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

Ответы [ 3 ]

5 голосов
/ 31 августа 2011

Примечание: компания 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 *

3 голосов
/ 26 августа 2015

Вот карта dewild, очень простой инструмент, основанный на первоначальных идеях Алекса:

https://github.com/quentinsf/dewildcard

0 голосов
/ 09 июля 2019

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

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

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

например.

from os.path import *

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

import os.path

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...