Windows におけるanaconda 仮想環境での読み込みエラー(解決)
意外なところで引っかかった.... 先日まで元気に動作して実行していた環境が突然,なんの前触れもなくエラーを吐き出したが解決
現象:
- anaonda で作成した仮想環境上でpandas, numpyが突如動かなくなる
- エラーの状況:
> import pandas as pd
ModuleNotFoundError: No module named 'pandas'
> import numpy as np
Original error was: DLL load failed while importing _multiarray_umath: 指定されたモジュールが見つかりません。'
えーっと...確かに,先日,pandasを使ってcsvよみこんだり,dataframeを作成しましたよ...っと..orzまた急になぜに??
- 最後に実行した仮想環境は何も変化していない
- また,当然だが,base環境も何も実行していない
- . だけど動かない...(´;ω;`)ウゥゥ
- OS: Windows 10 home
- platform : win-64
- anacondaの場所: C:\<anacondaインストール場所の親dir>\anaconda3
- 仮想環境場所1: <anacondaの場所:>\envs\cvenv1
- 仮想環境場所2: <anacondaの場所:>\envs\cvenv2
anacondaを使った仮想環境上のjupyterがmoduleをimportできない問題の解決 / jupyter上で環境を切り替える - 粗大メモ置き場
[http://Anaconda の Jupyter Notebook で ModuleNotFoundError が発生した場合のトラブルシュート |
- environment_kernelなし
- pandas, numpy の再インストールなし
環境を確認:(場所と仮想環境の名前などは適宜自分の環境で読み替える)
インストール場所,platformの確認
以下より,commnad prompt (できるだけ,anaconda のPathが通る環境(ex: anaconda prompt, Anaconad powerShellが望ましい))
anaconda Baseの環境
Base の環境の確認は,現在の作業環境がbaseにいることを確認して,以下のコマンドで確認
>conda info- conda version : 4.10.3 - conda-build version : 3.21.4 - python version : 3.8.11.final.0
anaconda 仮想環境(以下のコマンドから確認)
> conda info -e以下の出力が確認される(* : 現在の作業場所)
# conda environments: # base * <anacondaの場所:> cvenv1 <anacondaの場所:>\envs\cvenv1 cvenv2 <anacondaの場所:>\envs\cvenv2ここでは,対象の場所を,cvenv1とする
anaconda prompt上での環境の確認
まずは以下のcommandで対象の仮想環境に移動
> conda activate cvenv1この環境に,どのようなライブラリ,パッケージがインストールされているのかを確認
>conda list問題のnumpyがインストールされていることが確認された...(´;ω;`)ウゥゥ おまけに,pandas もmatplotlibも...あともちろん,scipy, scikit-learnも... 当然よ,機械学習をここでガシガシ動かしていた...
この時, - numpy :1.21.2 - pandas : 1.3.3 - jupyterlab : 3.1.7
この段階で,[environment-kernels]は仮想環境でインストールされていないことを確認
元のbaseの環境に戻る
以下で,baseに戻る
> conda deactivateここでも,ライブラリ,パッケージのインストールを確認 - environment-kernels : 1.1.1 - numpy :1.20.3 - pandas : 1.3.2 - jupyterlab : 3.1.7
もう一つの仮想環境(cvenvs2)内のライブラリなどを確認 - environment-kernels : なし - numpy :1.19.5 - pandas : 1.3.2 - jupyterlab : 3.1.7
numpy, pandas,のインストール確認
まずは,仮想環境2つ(cvenv1, cvenv2)とbase環境上でpandas, numpyが動くかをcommand prompt上で確認 以下はnumpyの場合として実行
>python -c "import numpy as np; print(np.version); print(np.file);" > python -c "import pandas as pd; print(pd.version);print(pd.file);"これで,エラー吐き出しなしで各環境上にインストールしたバージョン番号が出力されているなら,numpy, pandasのインストールはOK 以下の吐き出しがそれぞれ確認される - 仮想環境1(cvenv1)
1.21.2 <cvenv1の場所>\lib\site-packages\numpy_init__.py- 仮想環境1(cvenv2)
1.20.3 <cvenv2の場所>\lib\site-packages\numpy_init.py- base
1.19.5 <anacondaの場所:>\lib\site-packages\numpy__init.py
<重要>実際にjupyter lab (or notebook)を起動して,ライブラリの場所を確認
実はここが肝でした. なんと,jupyterはデフォルトで,base環境のライブラリを読み込みます. 仮想環境からjupyter を起動したら,仮想環境にインストールされたライブラリやパッケージを読みに行きますが,baseで起動したjupyterはなんと,仮想環境をjupyter 上で切り替えてもbaseのsite-packageに引っ張られるという謎 実は今回のエラー解決はこの情報が大事
これが,冒頭のエラーの掃き出しでした.
そして,悲しいことに,私は,何度もここでpipやcondaでnumpy, pandasをインストールしてはアンインストールして,jupyer上で確認を繰り返ししました. しかし,一向に読み込むことはなかったです.
謎...の沼,ってやつにハマりまくりました.
でも,抜けてやる!の一心で,いろいろ探しまくります. 同じエラーがないか.など・・・
以下などがヒットしました.
仮想環境にenvironment_kernelsのインストール
anacondaを使った仮想環境上のjupyterがmoduleをimportできない問題の解決 / jupyter上で環境を切り替える - 粗大メモ置き場
このサイトを参考に実行,検証したのは,仮想環境1(cvenv1)の環境に,environment_kernelsのインストールを実行してみました.
pip install environment_kernelsしかし,jupyter上ではnumpy, pandasともに相変わらず何も読み込めない.. 関連サイトを検索すると,コマンドで「environment_kernels」,「environment-kernels」....
いろんなサイトでハイフン(-), アンダースコア(_)がごっちゃ...
どっちだよ...と泣きました...
こんな時は, pyplを信じ,以下を実行
> pip install environment_kernelsenvironment_kernels · PyPI
ちなみに,,,「> pip install environment-kernels 」も実行できました....
なんでだろう...(なぜ,インストールできたのか,これは分かりません,おまけにconda list にenvironment-kernelsとハイフンのバージョンがありました...)
仮想環境にjupyterを入れてみる
Anaconda の Jupyter Notebook で ModuleNotFoundError が発生した場合のトラブルシュート |
仮想環境1(cvenv1)にjupyterの本体を入れてみる もともと,conda listで,「jupyter」がなかったので,以下を参考に入れてみる
しかし,一向に変わらなかった jupyterとenvironment_kernelsは関係ないようだ
mkl*.libの環境を環境変数として設定
以下のメッセージを頼りに,numpyに注目して,環境を見直す
Original error was: DLL load failed while importing _multiarray_umath: 指定されたモジュールが見つかりません。'IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
[https://numpy.org/doc/stable/user/troubleshooting-importerror.html:embed:cite]
Importing the numpy c-extensions failed. This error can happen for different reasons, often due to issues with your setup.
Path通ってないよ?いいの?と来たので,,, ということで,Windowsさまのユーザ変数環境にmkl関連のライブラリの場所をpathとして設定
<anacondaの場所:>\Library\binそして,,,,動かない.... orz(ぐずる)
このpathの記述をもとに戻す..(環境変数から追加内容を削除)
ほか,pyzmを入れ直せだとか,色々ありました.
よく考えたら,そもそも,私はデフォルトのpathを壊さないようにしたい派です.
だから,入れたことないものを入れ直せはちょっとよろしくない.
じゃ,残りはJupyter そのものがおかしい,となるので,Jupyterそのものを見直すことに.
jupyterそのもの設定を見る
jupyterで何をどう読んでんのよ?となる. (あとから考えたら,こっちから先だったと後悔)
まずはjupyterを各環境に入って,jupyterを起動させ,以下のコマンドを叩き込んでみる.
import numpy as np import pandas as pdprint(np.version); print(np.file); print(pd.version); print(pd.file);
仮想環境1(cvenv1)
1.21.2 <仮想環境1のインストール場所>\lib\site-packages\numpy_init__.py 1.3.3 <仮想環境1のインストール場所>\lib\site-packages\pandas_init__.py
仮想環境2(cvenv2)
以下が出力
1.19.5 <仮想環境2のインストール場所>\lib\site-packages\numpy_init__.py 1.3.2 <仮想環境2のインストール場所>\lib\site-packages\pandas_init__.py
base
1.20.3 <anacondaの場所>\lib\site-packages\numpy_init__.py 1.3.2 <anacondaの場所>\lib\site-packages\pandas_init__.py
各仮想環境からの設定では問題なさそうとのことで,baseから仮想環境を切り替えて同じことを実行
仮想環境1(cvenv1)
エラーでnumpyが実行できない
仮想環境2(cvenv2)
1.20.3 <anacondaの場所>\lib\site-packages\numpy_init__.py 1.3.2 <anacondaの場所>\lib\site-packages\pandas_init__.py
....おや?? これ,,,baseになっている...
とのことで,以下をjupyter上で実行
import sys import pprintpprint.pprint(sys.path)
以下が出力
['<jupyterを読み込んだ場所>, '<仮想環境場所1>\python38.zip', '<仮想環境場所1>\DLLs', '<仮想環境場所1>\lib', '<仮想環境場所1>', '', '<仮想環境場所1>lib\site-packages', '<仮想環境場所1>lib\site-packages\win32', '<仮想環境場所1>\lib\site-packages\win32\lib', <仮想環境場所1>\lib\site-packages\Pythonwin', '<仮想環境場所1>\lib\site-packages\IPython\extensions', 'C:¥User\Username\.ipython']
問題ない.
で,次が重要!
!pip show numpy実行するとなんと!
Name: numpy Version: 1.20.3 Summary: NumPy is the fundamental package for array computing with Python. Home-page: https://www.numpy.org Author: Travis E. Oliphant et al. Author-email: None License: BSD Location: <span style="color: #d32f2f"><anacondaの場所>\lib\site-packages</span> Requires: Required-by: tifffile, tables, statsmodels, seaborn, scipy, scikit-learn, scikit-image, PyWavelets, pyerfa, patsy, pandas, numexpr, numba, mkl-random, mkl-fft, matplotlib, imageio, imagecodecs, h5py, Bottleneck, bokeh, bkcharts, astropyなんと,,,baseが読み込まれていることが発覚!
では,環境がどうなっているのかというと,
!conda info -e
# conda environments: # base * <anacondaの場所> cvenv1 <anacondaの場所>\envs\cvenv1 cvenv2 <anacondaの場所>\envs\cvenv2
上記からわかるように,base環境を読み込んでいた!
これがまさに原因!
いよいよ解決へ!
これはjupyter側の仮想環境の読み込みの問題
そして,jupyterをbaseで立ち上げる時,よく読むと,「c.EnvironmentKernelSpecManagerって,.env_dirs? もしかして,conda_env_dirsじゃないの?」な記述...
ということで,C:/Users/username/.jupyter/jupyter_notebook_config.pyを開き,c.EnvironmentKernelSpecManagerをCtrl+fで検索し,対象箇所へ移動
そして,以下として修正
c.EnvironmentKernelSpecManager.env_dirs=['<anacondaのインストール場所>\envs\']
↓
c.EnvironmentKernelSpecManager.conda_env_dirs=['<anacondaのインストール場所>\envs\']
Jupyterをbaseから起動しなおして,base上のjupyterで仮想環境をそれぞれ変更すると,仮想環境1.,仮想環境2がそれぞれ読み込まれていることを再確認
例えば,仮想環境1なら
Name: numpy Version: 1.21.2 Summary: NumPy is the fundamental package for array computing with Python. Home-page: https://www.numpy.org Author: Travis E. Oliphant et al. Author-email: None License: BSD Location: <span style="color: #d32f2f"><仮想環境1cvenv1の場所>\lib\site-packages</span> Requires: Required-by: tifffile, tables, statsmodels, seaborn, scipy, scikit-learn, scikit-image, PyWavelets, pyerfa, patsy, pandas, numexpr, numba, mkl-random, mkl-fft, matplotlib, imageio, imagecodecs, h5py, Bottleneck, bokeh, bkcharts, astropy
以上で完了~ さてさて,numpyの入れ直しに色々影響があったのが,matplotlib,pandas, seaborn, scikit-learn をpip で入れ直しました. これでもとの環境に戻りました.
いろんなサイトを勉強したけど,あまりヒットする方法がなかったのです.
Jupyterのサイトも回りましたが...
ということで情報共有とします.
...無事解決したころは,,,,朝でして,今締め切りを心配している状態です.
ただ..謎なのは,,,どうして,これまで実行できていたのでしょうか....
ちょっとここらは分からないです. 強いていうなれば,...も今は思いつかないので,思い出したら追記します.