22

かなりモノリシックなコードでワイルドカードのインポートをリファクタリングして排除しています。

Pylintは、ワイルドカードインポートに付随するすべての未使用のインポートを一覧表示するという素晴らしい仕事をしているようですが、ワイルドカードインポートをすばやく置き換えることができるように、使用済みインポートのリストを提供したいと思います。これを行う簡単な方法はありますか?pyLintの出力を解析し、set.difference()これとdir()インポートされたモジュールのを実行しようとしています。しかし、私が知らないツール/手順があるに違いありません。

4

3 に答える 3

8

注意: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 *

于 2011-08-31T08:19:55.677 に答える
5

これがdewildcardです。これは、Alexの最初のアイデアに基づいた非常にシンプルなツールです。

https://github.com/quentinsf/dewildcard

于 2015-08-26T16:16:31.750 に答える
0

これは古い質問ですが、オートフレークに基づいてこれを行う何かを書きました。

ここを参照してください:https ://github.com/fake-name/autoflake/blob/master/autostar.py

これは、ワイルドカードアイテムのすべての使用を完全に修飾しようとするという点で、ワイルドカードとは逆の方法で機能します。

例えば

from os.path import *

に変換されます

import os.path

のすべての使用にos.path.<func>は、適切な機能が付加されます。

于 2019-07-09T00:35:35.217 に答える