0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

seabornを使うのを諦めた人のメモ

Last updated at Posted at 2021-06-05

現時点での結論

#####PyTorchやAnaconda環境を使っていない人がseabornを使えるようにするのは面倒っぽい

環境など

Windows10;Python 3.7.9;パッケージはPyPIを経由して導入(condaではない)

seaborn使用時にエラー発生

seabornをインストールし、いざ使おうと思ったら以下のエラーメッセージに遭遇。seabornのインポートに失敗しているようです。

エラーメッセージ
Traceback (most recent call last):
  File "C:\Users\[ユーザー名]\Desktop\python\seaborn_example1.py", line 3, in <module>
    import seaborn as sns
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\__init__.py", line 2, in <module>
    from .rcmod import *  # noqa: F401,F403
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\rcmod.py", line 7, in <module>
    from . import palettes
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\palettes.py", line 9, in <module>
    from .utils import desaturate, get_color_cycle
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\utils.py", line 10, in <module>
    from scipy import stats
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\scipy\__init__.py", line 130, in <module>
    from . import _distributor_init
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\scipy\_distributor_init.py", line 61, in <module>
    WinDLL(os.path.abspath(filename))
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] 指定されたモジュールが見つかりません

対処①モジュールのバージョン更新

後から入れたseabornと他のモジュールとのバージョン不整合が原因か?と考えて、numpy、scipy、pandas、matplotlibのバージョンを更新しました。

アップグレード@コマンドプロンプト
pip install --upgrade numpy
pip install --upgrade scipy
pip install --upgrade matplotlib
バージョン変更
seaborn     0.11.1
numpy       1.18.0  -->  1.20.3
scipy       1.4.1   -->  1.6.3
pandas      0.25.3  -->  1.2.4
matplotlib  3.1.2   -->  3.4.2

結果 : エラー解決せず 😓

後から調べてみるとseabornのMETADATA(Metadata-Version: 2.1)には以下のようにあり、どうやらバージョンの問題ではなかったらしい。

METADATA(抜粋)
Requires-Python: >=3.6
Requires-Dist: numpy (>=1.15)
Requires-Dist: scipy (>=1.0)
Requires-Dist: pandas (>=0.23)
Requires-Dist: matplotlib (>=2.2)

対処②環境変数の確認

システム環境変数が間違っているor正しく通っていない可能性があるのでは?と思って以下を実行。

Pathの確認
import sys

for i in sys.path:
    print(i)
Pathの出力結果
C:\Users\[ユーザー名]\Desktop\python
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\python37.zip
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\DLLs
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0
C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib\site-packages

seabornの場所は C:\Users\●●●\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn なので、下から2番目のパスで正しく指定できているようです。

ではPythonではなくWindows側の問題なのでは?と思い至り、「システム環境変数の編集」→「環境変数」→「システム環境変数」の「Path」を確認してみたところ、ちゃんと設定されていました。他のモジュールはちゃんと動くので当たり前と言えば当たり前ですが。

結果 : エラー解決せず 😥

対処③scipyとseabornの再インストール

stackoverflowでScipyの互換性の問題が指摘されていました。

そこで pip uninstall scipypip uninstall seaborn でscipyとseabornをアンインストールしてから、もう一度インストールすることにしました。

結果 : エラー解決せず 😖

モジュール間の問題ではない…?

対処したこと④scipyのダウングレード

scipyのバージョンを元の1.4.1にダウングレードしたところ、エラーメッセージがちょっと改善(?)しました。しかし使用できず。

エラーメッセージ
Traceback (most recent call last):
  File "C:\Users\[ユーザー名]\Desktop\python_lesson\seaborn_example1.py", line 4, in <module>
    import seaborn as sns
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\__init__.py", line 6, in <module>
    from .rcmod import *
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\rcmod.py", line 6, in <module>
    from . import palettes, _orig_rc_params
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\palettes.py", line 12, in <module>
    from .utils import desaturate, set_hls_values, get_color_cycle
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\seaborn\utils.py", line 7, in <module>
    from scipy import stats
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\scipy\stats\__init__.py", line 384, in <module>
    from .stats import *
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\scipy\stats\stats.py", line 179, in <module>
    from scipy.spatial.distance import cdist
  File "C:\Users\[ユーザー名]\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\scipy\spatial\__init__.py", line 99, in <module>
    from .qhull import *
ImportError: DLL load failed: 指定されたモジュールが見つかりません

以下のteratailのスレッドで、最後の ImportError: DLL load failed は「MKL関連のライブラリがない」ことに原因があるとの指摘を見つけました。1

ひょっとして、と思ってscikit-learnを導入しましたが相変わらずエラーのままでした2

結果 : エラー解決せず 😫

結局MKLが無いことが原因?

Pytorch環境でstuckした方の記事です。こちらで発生していた問題は解決できたようです。

PyTorchには元々MKLが梱包されていて、環境構築時に導入されるので不自由なく使えるようです。同様にAnaconda環境でも初めからMKLが入っているため、環境構築と同時にMKLが存在することになります。

Anaconda環境でのMKLのパフォーマンスについては以下の記事が参考になるかと思います。
Anaconda の NumPy が高速みたいなので試してみた
conda Numpyのようにscikit-learnも高速化する方法

結局、色々調べてみたところ、Pythonの環境がAnacondaではなくpipを使って構築されていてMKLが導入されていないことが、seabornを手軽に使えない原因のようでした(本当?)。私の勘違いならそれまでですが、seabornをインポートする過程でscipyの何かを動かそうとしたらMKLが無いため失敗した、というイメージでしょうか?(seabornがそんなに特殊なことをしているようには見えないのですが・・・)

MKLはインテル社のページからダウンロードできますが、以下のページによると、.whlファイルからnumpyと一緒にMKLをまとめてインストールできるようです。

しかしここにきて最早私の食指が動かず、これ以上足掻くのは不毛な気がして結局seabornを使うのは諦めてしまいました。面倒くさいとか時間が無いとか理由は色々ありますが、一番大きな理由は、他にseabornを使える環境3が別にあるので、自分のノートPCで頑張って使えるようにする必要性を感じなくなってきたためです。仮にMKLを正しくインストールできたとしても別の問題が発生するような気もしますし・・・。

PyTorchをインストールすれば良いのでは? という指摘は尤もですが、今後PyTorchを使う予定は無く、たかが1モジュールのためにわざわざこのパソコンに入れなくても良いかなという気持ちが勝りました。


・・・というわけで自分と似たような境遇にある人は、悪戦苦闘を始める前にこの記事に巡り合えると無駄な骨折りは多少軽減できるのではないかと思います。この辺りの事情に詳しい方は、ここに迷い込んだ方々にとって有益な情報をコメントして頂けますと大変有難いです・・・。


  1. MKLとはIntel®社の提供している数値演算ライブラリ「Math Kernel Library」の略。

  2. pipでscikit-learnをインストールしてもMKLは付いてきません。ただ、お陰様でscikit-learnは使えるようになりました。

  3. この別の環境というのはAnacondaで構築した環境です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?