- 環境
- Cloud9
- 同僚がEC2を利用したCloud9を使っていたので、私も使ってみたくてそのCloud9にアカウントを作ってもらって早速使い始めた。半端ない初心者。
- Python 3.6.12
- Cloud9
事象 : import requests
をして実行したらモジュールがなくて怒られた
Response
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Unable to import module 'lambda_function': No module named 'requests'"
}
がーん!でもpip list
はrequests
があるとおっしゃっている。
ponsuke:~/environment (asynchronous) $ pip list | grep requests
requests 2.24.0
原因 : 対象のLambda関数にモジュールがインストールされていないから
lambda_function.pyのディレクトリをみればモジュールがないのが分かる。
Cloud9を使ってLambda関数を作るときはpip list
を見りゃいいというわけではないらしい。
モジュールのインストール先が間違っていたことがエラーの原因でした.
Cloud9 は Lambda アプリケーション を利用しているため, アプリケーションディレクトリ(今回はDemoApplication/)が Lambda ファンクションの実行ディレクトリになります.
したがって, import requests で requests モジュールを読み込みたい場合はアプリケーションディレクトリ直下にモジュールをインストールする必要がありました.
Cloud9 上で Lambda を実行する際に “Unable to import module : No module named” エラーが出た場合の対処 | Developers.IO
# Lambda関数のディレクトリへ移動して
$ cd lambda_name/
# 中身を見ると・・・モジュールは何にもなかった・・・
ponsuke:~/environment/lambda_name (asynchronous) $ ls -la
total 36
drwxr-xr-x 2 ec2-user ec2-user 4096 Nov 24 01:06 .
drwxr-xr-x 32 ec2-user ec2-user 4096 Nov 20 02:35 ..
-rw-r--r-- 1 ec2-user ec2-user 197 Nov 20 02:35 .application.json
-rw-r--r-- 1 ec2-user ec2-user 1082 Nov 20 09:04 lambda_function.py
-rw-r--r-- 1 ec2-user ec2-user 10690 Nov 24 01:06 lambda-payloads.json
-rw-r--r-- 1 ec2-user ec2-user 512 Nov 20 02:35 templap
対応 : 場所を指定してモジュールをインストールする
-t, --target
Install packages into . By default this will not replace existing files/folders in . Use --upgrade to replace existing packages in with new versions.
pip install — pip 9.1.0.dev0 ドキュメント
ponsuke:~/environment/lambda_name (asynchronous) $ pip install --target . requests
Collecting requests
Downloading requests-2.25.0-py2.py3-none-any.whl (61 kB)
|████████████████████████████████| 61 kB 7.1 MB/s
Collecting chardet<4,>=3.0.2
Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.2-py2.py3-none-any.whl (136 kB)
|████████████████████████████████| 136 kB 15.9 MB/s
Collecting certifi>=2017.4.17
Downloading certifi-2020.11.8-py2.py3-none-any.whl (155 kB)
|████████████████████████████████| 155 kB 18.3 MB/s
Collecting idna<3,>=2.5
Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Installing collected packages: chardet, urllib3, certifi, idna, requests
Successfully installed certifi-2020.11.8 chardet-3.0.4 idna-2.10 requests-2.25.0 urllib3-1.26.2
だめな対応 : 場所を指定しないでモジュールをインストールする
場所を指定しないでインストールしても、もうあるものはもうある。
# ぷ?もうある・・・権限がない?
ponsuke:~/environment/lambda_name (asynchronous) $ pip install requests
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: requests in /home/ec2-user/.local/lib/python3.6/site-packages (2.24.0)
Requirement already satisfied: idna<3,>=2.5 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (1.25.10)
Requirement already satisfied: certifi>=2017.4.17 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (2020.6.20)
# --userオプションでDefaulting to user...は消えたけど状況変わらず
ponsuke:~/environment/lambda_name (asynchronous) $ pip install --user requests
Requirement already satisfied: requests in /home/ec2-user/.local/lib/python3.6/site-packages (2.24.0)
Requirement already satisfied: idna<3,>=2.5 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (1.25.10)
Requirement already satisfied: certifi>=2017.4.17 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (2020.6.20)
# もしかして、Python2になってるとか?と思ってみたけど何も変わらず・・
ponsuke:~/environment/lambda_name (asynchronous) $ python3 -m pip install --user requests
Requirement already satisfied: requests in /home/ec2-user/.local/lib/python3.6/site-packages (2.24.0)
Requirement already satisfied: idna<3,>=2.5 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (1.25.10)
Requirement already satisfied: certifi>=2017.4.17 in /home/ec2-user/.local/lib/python3.6/site-packages (from requests) (2020.6.20)