これなに?
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
- この問題についてのスレ