Есть ли IDE / утилита для реорганизации импорта Python * для использования стандартного синтаксиса module.member?

Мне недавно было поручено поддерживать кучу кода, который использует from module import * довольно сильно.

Эта кодовая база получила достаточно большое значение, чтобы конфликты импорта / именования неоднозначности / «где черт выполнил эту функцию, есть, как и восемь импортированных модулей с одним и тем же именем?!» Ism становятся все более распространенными.

Двигаясь вперед, я использую явные элементы (т.е. import module ... module.object.function() чтобы сделать работу по техническому обслуживанию более читаемой.

Но мне было интересно: существует ли IDE или утилита, которая надежно анализирует код Python и рефакторирует * импортирует инструкции в операторы импорта модулей, а затем добавляет полный путь модуля ко всем ссылкам на членов этого модуля?

Мы не используем метапрограммирование / отражение / inspect / monkeypatching сильно, поэтому, если вышеупомянутый IDE / util ведет себя плохо с такими вещами, это нормально.

2 Solutions collect form web for “Есть ли IDE / утилита для реорганизации импорта Python * для использования стандартного синтаксиса module.member?”

Не идеальное решение, но то, что я обычно делаю, это:

  1. Открыть Пидев
  2. Удалить все * импорт
  3. Используйте команду optimize imports ( ctrl+shift+o ) для повторного добавления всех импортных данных

Грубо решает проблему 🙂


Если вы хотите самостоятельно создать решение, попробуйте http://docs.python.org/library/modulefinder.html

Вот упоминаемые другие связанные инструменты:

  • напрямую работая с AST , что очень низкоуровневое для вашего использования.
  • работая с modulefinder, который может иметь много кода шаблона, который вы ищете,
  • веревку , библиотеку рефакторинга (@Lucas Graf),
  • человек по ремонту велосипедов , рефакторинга
  • библиотека logilab-astng, используемая в pylint

Подробнее о pylint

pylint – очень хороший инструмент, созданный на вершине ast который уже может рассказать вам, где в вашем коде есть данные from somemodule import * , а также сообщать вам, какие from somemodule import * не нужны.

пример:

 # next is what's on line 32 from re import * 

это будет жаловаться:

 W: 32,0: Wildcard import re W: 32,0: Unused import finditer from wildcard import W: 32,0: Unused import LOCALE from wildcard import ... # this is a long list ... 

На пути к решению?

Обратите внимание, что в приведенном выше выводе pylint номера строк. это может быть какое-то усилие, но инструмент рефакторинга может посмотреть на эти конкретные предупреждения, получить номер строки, импортировать модуль и посмотреть список __all__ или использовать изолированный execfile() чтобы увидеть глобальные имена модуля (будет modulefinder поддержка modulefinder с этим? может быть …). Со списком глобальных имен от __all__ и имен, которые pylint жалуется, вы можете иметь два set() и перейти к разнице. Замените строку с импортированием подстановочных знаков с конкретным импортом.

  • Чтение файла .txt по строкам в Python
  • Python - чтение второго столбца из файла
  • readlines дает мне дополнительные разрывы строк python2.6.5
  • Python 3.2 - readline () пропускает строки в исходном файле
  • Закладка вкладки python в окнах
  • Удаление \ r \ n из списка Python после импорта с помощью readlines
  • байтов для чтения человеком и обратно. без потери данных
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.