メインコンテンツへスキップ

【Python】PylintのW0611 (unused-import) などのメッセージを抑制する

·1496 文字·3 分
目次

はじめに
#

Pythonのコード分析ツールPylintから出力されるメッセージを抑制する方法について、W0611 (unused-import)警告を例に解説します。なお、Pylintのメッセージを抑制する方法には、スクリプト中にコメントとして記載する方法と設定ファイルを使う方法がありますが、この記事では前者のみ述べます。

この記事で検証した環境は以下の通りです。各ライブラリは既にインストールされているものとします。

  • OS: Windows 10 Home
  • Python 3.11.6
  • Pylint 3.0.2
  • Matplotlib 3.8.1
  • japanize_matplotlib 1.1.3

この記事はPython Advent Calendar 2023 (Qiita) 17日目の記事です。

Pylintによる警告の例
#

PylintはPythonのプログラムに対して様々な種類のメッセージを出力できますが、この記事ではW0611 (unused-import)という「パッケージをインポートしたが使っていない」という警告を例とします。この警告が出る場合、基本的にはインポート文をコメントアウトすべきですが、japanize_matplotlibのようにコメントアウトできないパッケージもあります。japanize_matplotlibとは、matplotlibで日本語を扱えるようにするパッケージです。以下のようにインポートするだけで日本語を表示できるので、何も対策をしなければ、PylintはW0611を表示してしまいます。

# -*- coding: utf-8 -*-
"""Pylintメッセージ抑制のテスト"""
import matplotlib.pyplot as plt
import japanize_matplotlib

plt.plot([1, 2, 3])
plt.xlabel("x軸")

次に、実際にPylintでW0611を表示させます。上記のスクリプトをtest.pyという名前で保存し、コマンドライン上でPylintに解析させます(Visual Studio CodeやSpyderなどでPylintを実行しても構いません)。

> pylint test.py
************* Module test
test.py:4:0: W0611: Unused import japanize_matplotlib (unused-import)

-----------------------------------
Your code has been rated at 7.50/10

このように、W0611が表示されました。

メッセージの抑制方法
#

次に、本題のPylintによるメッセージを抑制する方法を解説します。「はじめに」で述べたように、抑制する設定をスクリプト内にコメントとして記載します。コメントの書き方によって、抑制する範囲を以下の3つから選択できます。

  1. 行単位で抑制
  2. 複数行で抑制
  3. スコープ単位で抑制

行単位で抑制
#

行単位で抑制する場合、抑制したい行の最後に# pylint: disable=[抑制したいメッセージ、または番号]を追加します。W0611 (unused-import)の場合、以下のどちらかとなります。

import japanize_matplotlib # pylint: disable=unused-import
import japanize_matplotlib # pylint: disable=W0611

どちらにするかは好みですが、前者の方が抑制しているメッセージが分かりやすいと思います。

抑制するコメントの追加後、再度Pylintで解析します。

> pylint test.py

-------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 7.50/10, +2.50)

メッセージが表示されなくなったことを確認できました。

複数行で抑制
#

複数行で抑制する場合、以下2つのコメントで抑制したい範囲を囲みます。

  • # pylint: disable=[抑制したいメッセージ、または番号]
  • # pylint: enable=[抑制したいメッセージ、または番号]

以下に例を示します。

# pylint: disable=unused-import
import japanize_matplotlib 
# pylint: enable=unused-import

スコープ単位で抑制
#

クラスや関数の先頭に# pylint: disable=[...]を記述することで、そのスコープ内に限定してメッセージを抑制できます。ライブラリのインポートは例としてあまり適切ではないですが、イメージを以下に示します。

def test1():
    # pylint: disable=unused-import
    import japanize_matplotlib # この行はunused-import警告が出力されない

def test2():
    import japanize_matplotlib # この行はunused-import警告が出力される

(上記はあくまで例です。通常、関数の中でライブラリをインポートしません)

参考
#

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

Pythonのクラス図をPyreverseで自動生成する
·2149 文字·5 分
Pythonで作成したコードのクラス図を、Pyreverseを使って自動生成する方法を解説します。
pytestを実行するためのPythonパッケージのディレクトリ構成
·1661 文字·4 分
Pythonでパッケージを作成するとき、pytestによる自動テストに向いたディレクトリ構成をサンプルと合わせて解説します。
conda環境ではなくpip環境にspyderをインストールする【Windows環境】
··1669 文字·4 分
AnacondaやMinicondaなどのconda環境を使用せずに、pipのみの環境でPythonの統合開発環境Spyderを使用できるようにします。
pytestのテスト結果をHTMLファイルに出力する
·1256 文字·3 分
pytestとpytest-htmlを使って、Pythonコードのテスト結果をHTML形式で保存します。
pytestを使ったPythonのテスト
·1855 文字·4 分
pytestによる基本的なテストの実行方法と、複数のテストケースを記述する方法を解説します。
CasADiのOptiスタックでcallback関数を使って解の推移を取得する
·773 文字·2 分
最適化フレームワークCasADiのOptiスタックでcallback関数を使って、最適化ソルバの各反復における解の推移を取得する方法をまとめました。