pythonのモジュールの依存関係
今日、tensorflow
をJupiter notebookで使ってみようとしたところ、つまってしまった。
pip install
したはずだが、importしようとすると、
ModuleNotFoundError: No module named 'tensorflow'
と出てしまう。
調べてみたところ、他のパッケージと保存先のディレクトリが違うことが原因でこういったことが起こっているようだ。
sys.path
で、importの際にパッケージを探しにいくディレクトリを調べることができる。
私の場合は、以下のようになった。
['/Users/hoge',
'/anaconda3/lib/python37.zip',
'/anaconda3/lib/python3.7',
'/anaconda3/lib/python3.7/lib-dynload',
'',
'/anaconda3/lib/python3.7/site-packages',
'/anaconda3/lib/python3.7/site-packages/aeosa',
'/anaconda3/lib/python3.7/site-packages/IPython/extensions',
'/Users/hoge/.ipython']
インストールしたパッケージの場所がこれらのいずれかであったら、importできるわけだ。
例えば、インストールしたパッケージの一つである、cv2
の場所が知りたいと思って、
import cv2
cv2.__file__
と打つと、
/anaconda3/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so
となり、cv2
の場所が上のpathのリストに含まれていることが確認できる。
では、tensorflow
はどこにあるのだろうか。
pip installしたパッケージの保存場所は、pip show
で確認できるらしい。
やってみたところ、
Name: tensorflow
Version: 1.13.1
Summary: TensorFlow is an open source machine learning framework for everyone.
Home-page: https://www.tensorflow.org/
Author: Google Inc.
Author-email: opensource@google.com
License: Apache 2.0
Location: /usr/local/lib/python2.7/site-packages
Requires: enum34, keras-preprocessing, wheel, astor, backports.weakref, tensorflow-estimator, mock, termcolor, protobuf, gast, tensorboard, absl-py, grpcio, six, keras-applications, numpy
Required-by:
Location: /usr/local/lib/python2.7/site-packages
とあり、確かに上のパスのリストの中にはない。
Location: /usr/local/lib/python2.7/site-packages
にpathを通すか、ディレクトリを移動するかのどちらかで、tensorflowを使えるようにできるだろう。
しかし、なぜ、同じようにpip install しているのに保存先が違うのか。。