これなに?
pip installが成功しているにも関わらず、ライブラリとしてロードされないケースがあったので、その解決方法について。Amazon Linux AMIの問題みたいです。
環境
Amazon Lambdaの開発環境です。
- Amazon EC2 Linux (AMI: Amazon Linux AMI 2018.03.0.20180508 x86_64 HVM)
- Python 3.6.5
- このAMIのプリインストールはPython 2.7なので、yumで追加installしています
- VirtualEnv
症状
pip show
しても、インストールしたライブラリが表示されない。
この状態で当該ライブラリをimport
しようとするとModuleNotFoundError: No module named 'xxxx'
となる。
インストール
$ pip --no-cache-dir install pyminizip
Collecting pyminizip
Installing collected packages: pyminizip
Successfully installed pyminizip-0.2.3
インストール結果の確認。認識されていない。
$ pip show pyminizip
$
解決策
ここに詳しく書かれているが、Amazon Linux AMIではpythonのライブラリの読込先(sys.path
)として、/lib/
だけが設定されてしまっている。
一方で、ライブラリによっては/lib64/
にインストールされるものがあり、/lib64/
を読込先として追加してあげないとダメだね、というオチ。
一時的なテストなら環境変数$PYTHONPATH
に追加すればOK。永続的にこのライブラリを使うのであれば、.pth
ファイルを利用する。以下は、.pth
を追加した場合。
.pthファイルの作成
$ echo /home/ec2-user/yourVirtualEnv/lib64/python3.6/dist-packages > /home/ec2-user/yourVirtualEnv/lib/python3.6/dist-packages/mypath.pth
$ cat mypath.pth
/home/ec2-user/yourVirtualEnv/lib64/python3.6/dist-packages
確認
$ pip show pyminizip
Name: pyminizip
Version: 0.2.3
Summary: A minizip wrapper - To create a password encrypted zip file in python.
Home-page: https://github.com/smihica/pyminizip
Author: Shin Aoyama
Author-email: smihica@gmail.com
License: UNKNOWN
Location: /home/ec2-user/encryptfile/lib64/python3.6/dist-packages
Requires:
Required-by:
$
参考にしたページ
-
PythonRecipe:ライブラリローダを制御する
-
.pth
ファイルの利用方法について。
-
-
GitHub:Packages installed by pip in lib64 are not recognized by pip
- この問題についてのスレ