質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6048閲覧

Jupyterで仮想環境内のモジュールをインポートできない(ModuleNotFoundError)

Demerara

総合スコア397

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/08 12:00

編集2021/04/08 12:47

前提・実現したいこと

Pythonのvenvを用いて構築した仮想環境にJupyterといくつかのモジュールをインストールしました。
そして、Vscode上でjupyter用のファイル(.ipynb)を作成して開き、pandasをインポートするとモジュールが見つかりませんというエラーが出ます。

Powershell

1python -m venv mp 2mp/Scripts/activate 3(mp)python -V 4Python 3.9.4 5(mp)pip install jupyter pandas numpy matplotlib 6(mp)pip freeze 7argon2-cffi==20.1.0 8async-generator==1.10 9attrs==20.3.0 10autopep8==1.5.6 11backcall==0.2.0 12bleach==3.3.0 13cffi==1.14.5 14colorama==0.4.4 15cycler==0.10.0 16decorator==5.0.6 17defusedxml==0.7.1 18entrypoints==0.3 19ipykernel==5.5.3 20ipython==7.22.0 21ipython-genutils==0.2.0 22ipywidgets==7.6.3 23jedi==0.18.0 24Jinja2==2.11.3 25jsonschema==3.2.0 26jupyter==1.0.0 27jupyter-client==6.1.12 28jupyter-console==6.4.0 29jupyter-core==4.7.1 30jupyterlab-pygments==0.1.2 31jupyterlab-widgets==1.0.0 32kiwisolver==1.3.1 33MarkupSafe==1.1.1 34matplotlib==3.4.1 35mistune==0.8.4 36nbclient==0.5.3 37nbconvert==6.0.7 38nbformat==5.1.3 39nest-asyncio==1.5.1 40notebook==6.3.0 41numpy==1.20.2 42packaging==20.9 43pandas==1.2.3 44pandocfilters==1.4.3 45parso==0.8.2 46pickleshare==0.7.5 47Pillow==8.2.0 48prometheus-client==0.10.0 49prompt-toolkit==3.0.18 50pycodestyle==2.7.0 51pycparser==2.20 52Pygments==2.8.1 53pyparsing==2.4.7 54pyrsistent==0.17.3 55python-dateutil==2.8.1 56pytz==2021.1 57pywin32==300 58pywinpty==0.5.7 59pyzmq==22.0.3 60qtconsole==5.0.3 61QtPy==1.9.0 62Send2Trash==1.5.0 63six==1.15.0 64terminado==0.9.4 65testpath==0.4.4 66toml==0.10.2 67tornado==6.1 68traitlets==5.0.5 69wcwidth==0.2.5 70webencodings==0.5.1 71widgetsnbextension==3.5.1 72 73# 間違いなく仮想環境内にモジュールがインストールされていることを確認 74(mp) pip show pandas 75Name: pandas 76Version: 1.2.3 77Summary: Powerful data structures for data analysis, time series, and statistics 78Home-page: https://pandas.pydata.org 79Author: None 80Author-email: None 81License: BSD 82Location: c:\users\hoge\documents\github\jupyter-project\mp\lib\site-packages 83Requires: python-dateutil, numpy, pytz 84Required-by: 85 86# Jupyter用のファイルを作成 87(mp)New-Item hello.ipynb 88 89# VScodeを起動 90(mp)code .

次に.ipynbファイルを開いて、Jupyterが問題なく起動していることを確認
カーネルもちゃんと読み込まれているし、Pythonのバージョンも3.9.4になっている

発生している問題・エラーメッセージ

この状態で、

hello.ipynb

1import pandas as pd

とし、セルを実行すると

hello.ipynb

1ModuleNotFoundError Traceback (most recent call last) 2<ipython-input-1-7dd3504c366f> in <module> 3----> 1 import pandas as pd 4 5ModuleNotFoundError: No module named 'pandas'

と表示されます。

試したこと

仮想環境上でpythonを実行しパスが通っていることを確認

Powershell

1(mp)python 2Python 3.9.4 (tags/v3.9.4:1f2e308, Apr 4 2021, 13:27:16) [MSC v.1928 64 bit (AMD64)] on win32 3Type "help", "copyright", "credits" or "license" for more information. 4>>>import sys 5>>>sys.path 6>>>['', # 中略 7>>>'C:\Users\hoge\Documents\GitHub\jupyter-project\mp\lib\site-packages']

仮想環境上の設定ファイル .vscode/settings.jsonに以下の記述を追加

settings.json

1{ 2 "python.pythonPath" : "mp\Scripts\python.exe" 3}
  • モジュールは間違いなく仮想環境上にインストールされている(グローバルにはインストールされていないことも確認済み)
  • パスも通っている
  • Python自体はモジュールを認識している
  • Jupyterだけがモジュールを認識してくれない
  • グローバルにインストールされた外部モジュールは認識している(インポートエラーが出ない)

ちなみに最近PCを新調したんですが、以前まで使っていたPCでは上記と同じ手順で問題なく動いていました。エラーに遭遇することもありませんでした。
以前のPCと1つだけ違う点があります。それはPythonをscoopでインストールしたことです。パスはcurrentに通っています。apps内には3.9.2と3.9.4のpythonがインストールされていますが、currentにパスを通しているので自動的に3.9.4にパスが通り3.9.4が動いているものと自分では認識しています。もしかするとここに問題があるのかとも思いましたが、python自体は問題なく動いているのでやはりjupyterの設定に問題があるものと思います。

かなり調べましたが、多くの人は単にパスが通っていなかったり、インストールされていなかったり、Anacondaの問題だったりで、自分と同じ症状の人を見つけることはできませんでした。

(21:37)追記:
Jupyter上で、

hello.ipynb

1import sys 2sys.path

とするとJupyterに仮想環境内のモジュールへのパスが通っていないことが確認できました。
sys.path.append() でパスを通すことでモジュールが読み込めるようになりました。
しかし、この方法では新たにJupyterファイルを作成する度に同じ記述をする必要があります。
仮想環境でJupyterをインストールした際に自動的に仮想環境内のモジュールにパスが通るようにしたいです。
以前は何もしなくても仮想環境内のモジュール(mp/Lib/site-packages)にパスが通っていたのに、なぜ新しいPCでは挙動が違うのでしょうか。
何にしろ自力で解決できるかもしれません。お手数おかけしました。

補足情報(FW/ツールのバージョンなど)

windows10 home (20H2)
vscode 1.55.0
python 3.9.4
pip 21.0.1 from c:\users\hoge\documents\github\jupyter-project\mp\lib\site-packages\pip (python 3.9)
jupyter 1.0.0
windows-terminal 1.6.10571.0(Powershellを動かしているターミナルです)
パッケージマネージャーはscoopとchocolateyを併用していますが、開発環境はscoopのみで構築しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。

以下の記事が参考になりました。
https://www.lucypark.kr/blog/2013/02/10/when-python-imports-and-ipython-does-not/

一時的な解決方法は自分で追記した方法と同じです。

これを自動的に実行してもらうため、ipythonの設定ファイルを作成

Powershell

1 $ ipython profile create 2 $ ipython locate 3 /Users/username/.ipython

profile_default/ipython_config.pyを開き次の記述を追加

python

1c.InteractiveShellApp.exec_lines = [ 2 'import sys; sys.path.append("/usr/local/lib/python2.7/site-packages")' 3 ]

これで自動的に仮想環境内のモジュールにパスが通ります。

ただし、原因と理由、今後の対処法はわからずじまいです。
新たに仮想環境を作成するたび、ここにパスを追加する必要があるということですよね?
毎回そんなことするの面倒じゃないですか?

なんで自動的に仮想環境認識してくれないんでしょうか…

とりあえず表題の件としては解決したのでこれで終わりたいと思います。
再度別件として質問するかもしれませんが、その際はよろしくお願いします。

2022/12/17: 追記
現在は、vscode の設定ファイルに、"python.defaultInterpreterPath": ".venv\\Scripts\\python.exe" を追加し、全ての仮想環境名を .venv とすることで、解決できています。

上記の ipython ファイルに触れる必要はなくなりました。

ちなみに、仮想環境は python -m venv をやめ、現在は poetry で作成しています。

投稿2021/04/08 13:12

編集2022/12/17 03:39
Demerara

総合スコア397

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問