LoginSignup
0
1

More than 3 years have passed since last update.

No module named

Last updated at Posted at 2021-02-24

事象 : ModuleNotFoundError: No module named 'apiclient'

  • 環境
    • AWS Cloud9
    • Python 3.7.9

GoogleAnalyticsAPIでどんな情報が取れるか見てみたかった。
はじめてのアナリティクス Reporting API v4: サービス アカウント向け Python クイックスタート
で「くいっく」に「すたーと」したかった。
ライブラリをインストールしてダウンロードしたソースを実行して・・・「すたーと」できなかった。

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」の文字が・・・なぜ?

$ 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日記

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

$ 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
$ 

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

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

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

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

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

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で実行したらなんか言われた

/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が必要だから

そういえば似たようなことが以前あったなぁ
今回はPython3.8なのでIKPdbではなくIKP3dbを使います。

IKP3db is a Python 3 debugger. For Python 2 see the IKPdb project on github and pypi.
ikp3db · PyPI

対応 : 仮想環境の外でikp3dbをインストールする

仮想環境の中でインストールしてもうまくいかなかったが、仮想環境の外でインストールしたらうまくいった。

$ 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の環境で実行したら怒られた

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

いろいろ確認してみる

# インストールされているか確認する > イントールされている
(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
スクリーンショット 2021-02-24 19.07.05.png
真の原因はよくわかんないのにポチッと[Run]を押したことですね。

対応 : ビルダーを選択して実行する

スクリーンショット 2021-02-24 19.13.14.png

事象 : ImportError: No module named

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1