テクノロジー · 実用ガイド

pip は installed なのに ModuleNotFoundError?interpreter と import path を証明する

失敗した process の Python を特定し、その interpreter の distribution、実際の import name、sys.path を確認して clean import で完了します。

ja interpreter, distribution, import name and sys.path evidence diagram
オリジナルイラスト:prove one runtime-bound evidence chain. Watch at Ease

pip install の成功と import failure は、別の interpreter、name、search path を指すなら同時に成立します。

失敗 process の absolute Python を起点に、metadata、name mapping、path resolution、module origin を順に証明します。

失敗 runtime を保存

同じ failure command、working directory、traceback を保存し、その launch path で sys.executable、version、prefix、base_prefix、sys.path を出します。IDE、notebook、service、shebang は別 interpreter を選べます。

最初に sudo pip、--user、global PYTHONPATH、site-packages copy を使いません。failed process が返す absolute executable が最初の証拠です。

その interpreter で distribution を確認

/absolute/python -m pip show <distribution> で Name、Version、Location、必要なら --files を記録します。別の pip の成功は証拠になりません。

distribution が無ければ lock に従い対象 environment に install します。Location が sys.path 外なら activation、user site、pyvenv.cfg、service、container を調べます。

distribution と import name を分離

pip は distribution name、import は import package name を使います。一対一とは限らず Pillow は PIL を import します。

project docs と installed files を確認し、packages_distributions() も利用します。誤った import name だけで install failure と判断しません。

search path を説明し patch しない

sys.path は script/current directory、environment、executable landmarks、venv config、site processing から作られます。python -m site で user site を記録します。

service は user site を無効化でき、IDE/kernel は古く、shebang は別 executable を指せます。最小 launcher boundary を直し global path patch を避けます。

shadowing を除外し exit proof を要求

project の同名 file/folder を確認し、find_spec と成功後の module.__file__ で local shadowing を除外します。

同じ executable が intended Location と import origin を示し、clean process と元 script/test が通った時だけ終了します。全証拠を保存します。

ja Python import repair and clean exit-proof diagram
オリジナルイラスト:repair the smallest boundary and prove a clean import. Watch at Ease