web-dev-qa-db-ja.com

Pythonコードで未使用の関数を見つけるにはどうすればよいですか?

したがって、かなり多額のプロジェクトにレガシーコードがあります。死んだ関数をどのように見つけて削除できますか?

未使用のコードを検索phpプロジェクトで未使用の関数を検索するツール の2つの参照を見てきましたが、それぞれC#とPHPに固有のようです。

(リフレクションなどにもかかわらず)ソースコードの他の場所で参照されていない関数を見つけるのに役立つPythonツールはありますか?

51
Brian M. Hunt

pythonでは、動的または静的コードアナライザーを使用して未使用のコードを見つけることができます。動的アナライザーの2つの例は、coveragefigleafです。これらには欠点があります。未使用のパーツを見つけるには、コードの可能なすべてのブランチを実行する必要がありますが、非常に信頼性の高い結果が得られるという利点もあります。

または、コードを確認するだけで実際には実行しない静的コードアナライザーを使用することもできます。それらははるかに高速に実行されますが、Pythonの動的な性質により、結果は100%正確ではないため、再確認することをお勧めします。頭に浮かぶ2つのツールは、pyflakesvultureです。これらは補完的です。Pyflakesは未使用のインポートと未使用のローカル変数を検出し、vultureは未使用の関数、メソッド、クラス、変数、および属性を検出します。

ツールはPython Package Index http://pypi.python.org/pypi で入手できます。

54
Jendrik

pylint あなたがやりたいことをすることができます。

8
Anonymous

これが役立つかどうかはわかりませんが、 coveragefigleaf 、またはソースコードのどの部分があなたとして使用されているかを記録する他の同様のモジュールを使用してみてください。実際にスクリプト/アプリケーションを実行します。

4
Noah

かなり厳密な方法でpythonコードが表示されるため、def function_name(..)を探している正規表現に基づいて関数のリストを作成するのは難しいでしょうか?

次に、それぞれの名前を検索し、コードに含まれる回数を増やします。当然のことながらコメントは考慮されませんが、インスタンスが2つまたは3つ未満の関数を調べている限り...

それは少し質素ですが、それは素敵な眠い週末の仕事のように聞こえます=)

1
Oli

あなたが言ったように、あなたのコードがリフレクションを使用していることを知らない限り、私は些細なgrepを選びます。 vimのアスタリスクの力も過小評価しないでください(ファイル内のカーソルの下にある単語の検索を実行します)。ただし、これは現在編集しているファイルのみに限定されます。

実装できるもう1つの解決策は、非常に優れたテストスイートを用意し(残念ながら、めったに発生しません)、ルーチンを非推奨ルーチンでラップすることです。非推奨の出力が表示された場合は、ルーチンが呼び出されたことを意味するため、まだどこかで使用されています。これはリフレクション動作でも機能しますが、もちろん、通常の呼び出しが実行されたときに状況をトリガーしないかどうかを確認することはできません。

1
Stefano Borini