skip to content
barorin&

Pythonのエラー・警告対処まとめ|バージョン不整合・型スタブ・lint抑制

/ 6 min read

Table of Contents

はじめに

Pythonのエラーは、コードではなく環境が原因であることがよくあります。特に「昨日まで動いていたのに」というときは、たいていライブラリのバージョンが噛み合っていません。

実際に遭遇したエラーと対処法をまとめました。

ライブラリのバージョン不整合

RequestsDependencyWarning

requests を使ったコードを実行すると出る警告です。

Terminal window
RequestsDependencyWarning: urllib3 (2.0.7) or chardet (None)/charset_normalizer (2.0.11) doesn't match a supported version!

requests が想定しているバージョンと、実際に入っている urllib3 のバージョンが噛み合っていません。まとめて更新すれば解消します。

Terminal window
$ pip install -U urllib3 requests

AttributeError: object has no attribute ‘_validate_data’

imbalanced-learnfit_resample() したときに出ました。

'RandomOverSampler' object has no attribute '_validate_data'

imbalanced-learn が依存している scikit-learn のバージョンが古いことが原因でした。0.23.0以上に上げると解消します。

Terminal window
$ pip install -U scikit-learn

AttributeError: module ‘lightgbm’ has no attribute ‘Dataset’

import lightgbm as lgb
lgb_train = lgb.Dataset(X_train, y_train)
# AttributeError: module 'lightgbm' has no attribute 'Dataset'

明示的にインポートすると動くことがあります。

from lightgbm import Dataset

原因の切り分け方

バージョン起因を疑ったら、まず次の2つを確認します。

Terminal window
# 依存関係に矛盾がないか検査する
$ pip check
# 実際に入っているバージョンを見る
$ pip list | grep パッケージ名

pip check は、依存関係が壊れている組み合わせを一覧で教えてくれます。原因を探す前にこれを打つと早いです。

mypyで Library stubs not installed と言われる

requests を使った簡単なコードでも、mypyがこう言ってきます。

import requests
res = requests.get("https://example.com/")
print(res.text)
Library stubs not installed for "requests"

型情報(スタブ)のパッケージが別配布になっているためです。入れれば解消します。

Terminal window
$ pip install types-requests

PEP8のエラーを抑制する

lintの指摘を、意図的に無視したい場面はあります。

# 行単位で無視する
import os # NOQA
# ファイル全体で無視する
# flake8: NOQA

特定のルールだけを無視することもできます。

import os # noqa: F401

おわりに

環境起因のエラーは、コードをいくら読んでも原因が見つかりません。「昨日は動いた」「他の人の環境では動く」という症状が出たら、まず pip checkpip list でバージョンを確認するのが近道です。

そもそもの予防としては、プロジェクトごとに仮想環境を分けて、requirements.txt でバージョンを固定しておくのが確実です。

この記事を書いた人

barorinのプロフィール画像

barorin公認会計士

会計とITの二足のわらじで働く公認会計士です。Pythonを中心に、会計・監査の実務で実際に使っているコードや、Ubuntu・Raspberry Piの設定メモを書いています。