何もしてないのにPythonが壊れました!
AnacondaをインストールしてPATHを通しただけなのに!
numpyがインポートできない
なにもしてなくないよね?どうみてもこれのせいです.本当にありがとうございました.
いろいろ弄っていたらよくわからないエラーが出るようになってしまった,見つかった記事通りにやったらうまく行かなかった,ということでそこからの復旧方法をメモ
障害内容
Windows10です.
もともと生でPythonをインストールしてあったところにAnacondaを追加でインストールしたら,
numpyをインポートする際に
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
という例外を吐くようになってしまったという件.
環境は
pipでPython 3.7.2
AnacondaでPython 3.7.3
がインストールされており,PATHはどっちも通っている(Anacondaの方が優先)という状況
PATHを通したり消したりしてみた結果pip版の方は関係なくAnacondaのPythonがおかしい模様.1
しかもAnaconda PromptやJupyterから起動すると問題なく,コマンドプロンプトから走らせたときのみ起こる.なんでや.
対処方法
もっぱらコマンドプロンプトから呼ぶのでこれでは困ると調べてみた結果mkl(Math Kernel Library)の参照でエラーを起こしているらしい
※1 によるとSystem32のmkl_intel_thread.dllを削除したら直ったということだがこのファイルが見つからない2
一方※2を見るとmklが付属しているパッケージでインストールすると良いらしい.結局これで直った.
.whlからのインストール
ここ( https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy )から32bit/64bitに対応する最新版のnumpy+mklパッケージをダウンロードし,インストールする.
★ここで cp○○ というバージョンがあるが,これがpipのバージョンと合っていないとインストールできない.※3
対応バージョンを確認するには対話環境などから
from pip._internal.pep425tags import get_supported
get_supported()
#(例)=> [('cp37', 'cp37m', 'win_amd64'), ('cp37', 'none', 'win_amd64'), ('py3', 'none', 'win_amd64'), ...
とすれば見られる.
対応するバージョンを上記からダウンロードし,Anaconda Promptから
pip install "ファイル名.whl"
でインストールすれば完了.(コマンドプロンプトやcondaでは失敗した.何故だろう.)
permission denied されることがあるので適宜--user
をつけて限定するか管理者権限を付与する.
matplotlib,pandas,scikit-learnも同様のエラーが出ていたので同様に+mklの.whlファイルをダウンロードしてきてインストールする.
matplotlib,pandasをインストールしたところでscikit-learnのエラーも消えたので依存関係があるのかもしれない.
無事Anacondaで動くようになったので元のはアンインストールしたほうがいいのかもしれない.とりあえずPATHだけ消して様子見している.