##エラー
from icrawler.builtin import GoogleImageCrawler
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-2-28de31fd4762> in <module>
----> 1 from icrawler.builtin import GoogleImageCrawler
ModuleNotFoundError: No module named 'icrawler'
ちなみに、本当にpipにあるか確認すると
(base) >>>pip list
entrypoints 0.3
icrawler 0.6.6
idna 2.10
と確かに存在する。こちらの記事を参考に対策を進めてみる。入っているのにも関わらず無いと言われるということは、参照している部分が間違い(あるいは足りない)ということなのでまずはどこを参照しているのか確認する。
##参照の確認
moduleはsys.pathに記載されている参照pathをもとに検索されている。まず実行環境でどこを見ているか確認すると
import sys, pprint
pprint.pprint(sys.path)
['/Users/masato/Desktop/python_project/BOOK/データ収集からWebアプリ開発まで実践で学ぶ機械学習活用ガイド/chapter5',
'/Users/masato/miniforge3/envs/ds_env/lib/python39.zip',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9/lib-dynload',
'',
'/Users/masato/.local/lib/python3.9/site-packages',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9/site-packages',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9/site-packages/IPython/extensions',
'/Users/masato/.ipython']
となっている事がわかる。一方pipによって入れたicrawlerはどこにあるかをみると
pip show icrawler
Name: icrawler
Version: 0.6.6
Summary: A mini framework of image crawlers
Home-page: https://github.com/hellock/icrawler
Author: Kai Chen
Author-email: chenkaidev@gmail.com
License: MIT
Location: /Users/masato/miniforge3/lib/python3.9/site-packages
Requires: requests, beautifulsoup4, six, Pillow, lxml
Required-by:
Locationをみると**/Users/masato/miniforge3/lib/python3.9/site-packages**にあることがわかる。しかし、上記の参照先にはこのパスが無いためエラーが出るようだ。
では、参照先を追加するにはどうすればいいのかを調べていく。
###1.直にパスを追加する
sys.pathはただのリストであり、appendで参照パスをつけてあげれば追加される。
sys.path.append('/Users/masato/miniforge3/lib/python3.9/site-packages')
pprint.pprint(sys.path)
['/Users/masato/Desktop/python_project/BOOK/データ収集からWebアプリ開発まで実践で学ぶ機械学習活用ガイド/chapter5',
'/Users/masato/miniforge3/envs/ds_env/lib/python39.zip',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9/lib-dynload',
'',
'/Users/masato/.local/lib/python3.9/site-packages',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9/site-packages',
'/Users/masato/miniforge3/envs/ds_env/lib/python3.9/site-packages/IPython/extensions',
'/Users/masato/.ipython',
'/Users/masato/miniforge3/lib/python3.9/site-packages']
実際に直に追加してみると参照先に追加され、importの際にエラーもなく済んだ。ただ,
毎回参照先を直に追加するのは現実的でないしきれいでないので他の方法を探す。
###2.環境変数PYTHONPATHでモジュール検索パスを追加
export PYTHONPATH = "/Users/masato/miniforge3/lib/python3.9/site-packages:$PYTHONPATH"
こうすると、モジュールエラーが起こること無く実行することができた。
#参考ページ
1.pipでモジュールを確かにインストールしたはずがModuleNotFoundErrorと出た時の解決法初心者的理解
2.Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど)
3.pipでインストールしたパッケージの場所を調べる
4.Pythonでフォルダにパスを通す方法 PYTHONPATHの編集