LoginSignup
1
0

More than 3 years have passed since last update.

venvのJupyter Notebook利用時にModuleNotFoundErrorが出てきてしまった時の対処

Last updated at Posted at 2019-08-28

Google Cloud Pubsubを利用した簡単なシステムを作成したので、動作確認のために手元のWindows機からJupyter Notebook上で動作確認しようとしていました。その際きちんと

ただ、 pip install google-cloud-pubsub を行ったはずなのに、importに失敗します。

from google.cloud import pubsub_v1
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path("project-name", "name")
publisher.publish(topic_path, data=b'{"data": "sample"}')

PythonのコンソールやiPython上ではimportできるため、AnacondaかJupyter Notebookに関する問題だと考えられます。ちょっと調べてみました。

結論

結論から書いてしまうと、venv環境のJupyter Notebookを使うためには予めkernelを追加する必要がありました。

ただ、自分の場合、実はpipenvの内部でvenvを利用してしまっていたため、venvのプロジェクト名がややこしく、仮想環境を使わずに直接 pip install して使うことにしました。ちょっとイケてないですが、手元のWindows環境は程度にしか使わないので…(言い訳)。

調査方法

せっかくなので自分が調査した方法もメモに残しておきます。まず、Pythonのimport対象のディレクトリパスを確認します。

このあたりの記事を読んでください。

>>> import sys
>>> sys.path
['', 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\Scripts\\python37.zip', 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\DLLs', 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\lib', 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\Scripts', 'c:\\users\\ninomiyt\\appdata\\local\\continuum\\anaconda3\\Lib', 'c:\\users\\ninomiyt\\appdata\\local\\continuum\\anaconda3\\DLLs', 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56', 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\lib\\site-packages']
>>> from google.cloud import pubsub_v1
>>> pubsub_v1.__file__
'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\lib\\site-packages\\google\\cloud\\pubsub_v1\\__init__.py'

Jupyter Notebook上ではこのようになります。

In [1]: import sys; sys.path
Out[1]: ['C:\\Users\\ninomiyt\\Desktop',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\python37.zip',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\DLLs',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\lib',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3',
 '',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\win32',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\Pythonwin',
 'C:\\Users\\ninomiyt\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\ninomiyt\\.ipython']

pubsub_v1 のファイルパス( 'C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\lib\\site-packages' )がJupyter Notebook上では存在しないことが分かります。これはvenvの環境のパスなので、Jupyter Notebookでvenvのパスであることが分かりました。

ちなみにsys.pathに直接追加してもimportできるようになりました。

import sys
sys.path.append('C:\\Users\\ninomiyt\\.virtualenvs\\Desktop-5H1ZMg56\\lib\\site-packages')
from google.cloud import pubsub_v1

厄介な問題かもしれないと考えて記事を書きながら対処したのですが、思ったより単純な問題でした。

1
0
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
1
0