MacOS更新後にPython実行でModuleNotFoundErrorになる
![Python[パイソン]](https://yuki.world/wp-content/uploads/2021/01/python-top2.png)
MacOSをMontereyからVenturaに更新後、Pythonのプログラムを実行したら、Module Not Foundと言われました。
~ % python testapp.py
Traceback (most recent call last):
File "/Users/yuki/Desktop/program/testapp.py", line 3, in <module>
from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'
いや、そんなわけない。Seleniumは毎日のように使ってたのに...なぜだ!?
となってかなり困りました。
pip install seleniumをすると「いやseleniumあるよインストール済みだと」と言われてしまいます。
どうやら、OS更新→MacでPythonを使うのに必要な「Xcode」をインストールした時点で、Pythonの環境がゴッソリと変わってしまった模様。
Pythonバージョンは3.8を使っていたのに、3.9になってしまった(と思う)。
がっつりPythonを使っている最中にこの事態におちいり、かなり焦ったので修正手順をメモしておきます。
ー もくじ ー
MacOSを更新後にPythonでModuleNotFoundErrorになったら
- pipでインストールされるモジュール格納パスを確認
- sys.pathでPythonが参照しているパスを確認
- .zshrcにパスを追加する設定を書く
この3ステップで解決しました。
1. pipでインストールされるモジュール格納パスを確認
pip install <モジュール名>でどこにモジュールが格納されているのかを確認します。
~ % pip install selenium
Requirement already satisfied: selenium in /usr/local/lib/python3.9/site-packages (4.9.0)
Requirement already satisfied: urllib3[socks]~=1.26 in /usr/local/lib/python3.9/site-packages (from selenium) (1.26.6)
・・・省略・・・
/usr/local/lib/python3.9/site-packages にpipでインストールしたモジュールたちがいることが分かります。
2. sys.pathでPythonが参照しているパスを確認
次は、Pythonがモジュールを引っ張るときに参照しているパスに、手順1で確認したパスがあるかどうかをチェック。
ターミナルからPythonを対話モードで起動し、以下のとおりpprintまで叩きます。
~ % python
>>> import sys
>>> from pprint import pprint
>>>
>>> pprint(sys.path)
['',
'/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python39.zip',
'/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9',
'/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/lib-dynload',
'/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages']
↑このlistの中に、手順1で確認したモジュールのパスがないことが原因
つまり、このsys.pathの中に/usr/local/lib/python3.9/site-packagesを追加できればいい、ということになります。
3. .zshrcにパスを追加する設定を書く
~ % sudo vi ~/.zshrc
を叩いたあと、ファイル内ならどこでもいいので以下のように1行追加して保存します。
export PYTHONPATH="<手順1で確認したモジュールのパス>:$PYTHONPATH"
ぼくの場合、
export PYTHONPATH="/usr/local/lib/python3.9/site-packages:$PYTHONPATH"
と入力、保存しました。
保存したら忘れずにsourceコマンドを叩いてさきほどの書き込みを反映させます。
~ % source ~/.zshrc
これで再度Pythonのプログラムを起動して、モジュール読み込みエラーが解決していればOKです。