No module named

# 事象 : ModuleNotFoundError: No module named 'apiclient'
- 環境
    - AWS Cloud9
    - Python 3.7.9

GoogleAnalyticsAPIでどんな情報が取れるか見てみたかった。
[はじめてのアナリティクス Reporting API v4: サービス アカウント向け Python クイックスタート](https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py)
で「くいっく」に「すたーと」したかった。
ライブラリをインストールしてダウンロードしたソースを実行して・・・「すたーと」できなかった。

```json
Traceback (most recent call last):
  File "/home/ec2-user/environment/HelloAnalytics.py", line 3, in <module>
    from apiclient.discovery import build
ModuleNotFoundError: No module named 'apiclient'


Process exited with code: 0
```

## 原因 : ライブラリを違うところにインストールしているから
ライブラリをインストールしたのに・・・と思ってじっと見つめると「/usr/lib/python2.7」の文字が・・・なぜ？

```bash
$ sudo pip install --upgrade google-api-python-client
...省略...
Requirement already up-to-date: six<2dev,>=1.13.0 in /usr/lib/python2.7/site-packages (from google-api-python-client)
...省略...
Successfully installed cachetools-3.1.1 certifi-2020.12.5 chardet-4.0.0 google-api-core-1.26.1 google-api-python-client-1.12.8 google-auth-1.27.1 google-auth-httplib2-0.1.0 googleapis-common-protos-1.52.0 httplib2-0.19.0 idna-2.10 packaging-20.9 protobuf-3.15.6 pyasn1-modules-0.2.8 pyparsing-2.4.7 requests-2.25.1 uritemplate-3.0.1 urllib3-1.26.4

# 使っているPython3.7の場所はこっち
$ which python
alias python='python3'
        /usr/bin/python3
```

アホみたいに使っている環境も考えずにコピペ実行したことが問題。

> - 通常のインストール：pip install numpy
> - user install：pip install --user numpy
>
>　これらの違いはパッケージがインストールされるディレクトリである．通常のインストールでは，管理者権限が必要な /usr 下に，user install では管理者権限の必要ないホームディレクトリ下の ~/.local（ベースバイナリディレクトリという） 下にパッケージがインストールされる．
> [Python：pip における管理者権限と user install - pyてよn日記](https://pyteyon.hatenablog.com/entry/2019/05/24/003924)

### 対応 : --userオプションで使っているPythonにインストールする


```bash
$ python -m pip install --user --upgrade google-api-python-client
...省略...
Requirement already up-to-date: six<2dev,>=1.13.0 in /usr/local/lib/python3.7/site-packages (from google-api-python-client)
...省略...
Successfully installed cachetools-4.2.1 certifi-2020.12.5 chardet-4.0.0 google-api-core-1.26.1 google-api-python-client-2.0.2 google-auth-1.27.1 google-auth-httplib2-0.1.0 googleapis-common-protos-1.53.0 httplib2-0.19.0 idna-2.10 packaging-20.9 protobuf-3.15.6 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 requests-2.25.1 rsa-4.7.2 setuptools-54.1.2 uritemplate-3.0.1 urllib3-1.26.4
$ 
```

めでたく次のエラーに移行し、

```json
Traceback (most recent call last):
  File "/home/ec2-user/environment/HelloAnalytics.py", line 4, in <module>
    from oauth2client.service_account import ServiceAccountCredentials
ModuleNotFoundError: No module named 'oauth2client'


Process exited with code: 0
```

足りないライブラリをインストールして、

```bash
$ python -m pip install --user --upgrade oauth2client
```

微妙な「くいっく」で「すたーと」した。

```json
ga:country:  Hong Kong
Date range: 0
ga:sessions: 1
ga:country:  Japan
Date range: 0
ga:sessions: 113
ga:country:  United States
Date range: 0
ga:sessions: 1


Process exited with code: 0
```






































# 事象 : No module named ikp3db
テンプレートしかないLambda関数をCloud9で実行したらなんか言われた

```bash
/home/ec2-user/.pyenv/versions/3.8.7/bin/python3: No module named ikp3db

    To use python debugger install ikpdb by running: 
        sudo yum update;
        sudo yum install python36-devel;
        sudo pip-3.6 install ikp3db;
        


Process exited with code: 0
```

## 原因 : Cloud9のデバックにはikp3dbが必要だから
[そういえば似たようなことが以前あったなぁ](https://ponsuke-tarou.hatenablog.com/entry/2020/12/07/155550#%E5%8E%9F%E5%9B%A0--%E4%B8%8D%E6%98%8E-1)
今回はPython3.8なのでIKPdbではなくIKP3dbを使います。

> IKP3db is a Python 3 debugger. For Python 2 see the IKPdb project on github and pypi.
> [ikp3db · PyPI](https://pypi.org/project/ikp3db/)

### 対応 : 仮想環境の外でikp3dbをインストールする
仮想環境の中でインストールしてもうまくいかなかったが、仮想環境の外でインストールしたらうまくいった。

```bash
$ pip install ikp3db
Collecting ikp3db
  Using cached ikp3db-1.4.1.tar.gz (24 kB)
Using legacy 'setup.py install' for ikp3db, since package 'wheel' is not installed.
Installing collected packages: ikp3db
    Running setup.py install for ikp3db ... done
Successfully installed ikp3db-1.4.1

$ python -m pip list
Package    Version
---------- -------
ikp3db     1.4.1
pip        20.2.3
setuptools 49.2.1
```















# 事象 : ModuleNotFoundError: No module named 'requests'
LambdaをCloud9の環境で実行したら怒られた

```zsh
Traceback (most recent call last):
  File "/home/ec2-user/environment/backlog_none_assignee/lambda_function.py", line 2, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'


Process exited with code: 0
```

いろいろ確認してみる

```zsh
# インストールされているか確認する > イントールされている
(venv) $ pip list
Package    Version
---------- ---------
...省略...
requests   2.25.1
...省略...

# インストールされている場所を確認する
(venv) $ pip show requests
...省略...
Location: /home/ec2-user/environment/backlog_none_assignee/venv/lib/python3.8/site-packages
...省略...

# Pythonがモジュールを探す場所に上記のインストール場所が含まれているかを確認する > 含まれている
(venv) $ python
...省略...
>>> import sys
>>> sys.path
['', ...省略..., '/home/ec2-user/environment/backlog_none_assignee/venv/lib/python3.8/site-packages']
>>> 
# 試しに単体で使ってみると・・・エラーにならない
>>> import requests
>>> 
```


## 原因 : 実行時の設定がAutoだから
参考 : [AWS Cloud9 Integrated Development Environment (IDE) のビルダー、ランナー、デバッガーの操作 - AWS Cloud9](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/build-run-debug.html)
![スクリーンショット 2021-02-24 19.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/83d6a42c-8f58-4d8f-f9c7-68f8391d43bb.png)
真の原因はよくわかんないのにポチッと[Run]を押したことですね。

### 対応 : ビルダーを選択して実行する
![スクリーンショット 2021-02-24 19.13.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/72e8f93b-f1fc-a9bb-a261-68dc9aa66dbc.png)


# 事象 : ImportError: No module named
- [ImportErrorが起きたときの確認事項](https://qiita.com/ktgwaaa/items/6d1f54d5ff3c4559f96c)
- [モジュールのimportができなくなったときの対処 - Qiita](https://qiita.com/Kent_recuca/items/349586e9c034535f2991)