帮助消除通配符导入的工具

时间:2011-08-30 20:36:15

标签: python code-analysis pylint

我正在重构并消除一些相当单一的代码上的通配符导入。

Pylint似乎在列出通配符导入所带来的所有未使用的导入方面做得很好,但我希望它能提供一个使用过的导入列表,这样我就可以快速替换通配符导入。有什么快速的方法吗?我即将解析pyLint的输出并对此进行set.difference()以及导入模块的dir()。但我敢打赌,我不知道有一些工具/程序。

3 个答案:

答案 0 :(得分:5)

注意:pylint不推荐一组使用过的导入。更改此设置时,您必须了解导入正在修改的代码的其他模块,这些模块可能只使用属于您要重构的模块的命名空间的符号,因为您有未使用的导入。

我建议使用以下过程重构from foo import *

  • 在交互式shell中,键入:

    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,寻找非现有sympol的导入
  • 运行您的单元测试

重复from bar import *

答案 1 :(得分:3)

这是露水卡,这是一个基于亚历克斯最初想法的非常简单的工具:

https://github.com/quentinsf/dewildcard

答案 2 :(得分:0)

这是一个古老的问题,但是我写了一些基于autoflake的功能。

参见此处:https://github.com/fake-name/autoflake/blob/master/autostar.py

它的作用与dewildcard相反,因为它试图完全限定通配符项目的所有用途

例如

from os.path import *

已转换为

import os.path

os.path.<func>的所有使用都带有适当的功能。