LoginSignup
0
1

More than 5 years have passed since last update.

Python,"ImportError: DLL load failed"からの復旧

Posted at

何もしてないのに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だけ消して様子見している.


  1. PATHが通っていなくてもpip版インストールされていると干渉してまずいのかもしれないが,動いているものをアンインストールして全部動かなくなると困るのでちょっと弄りたくない. 

  2. そもそもSystem32のファイルを勝手に削除して大丈夫なんだろうか 

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