😱ImportError: cannot import name ~

# 問題

scipyからsignalがインポートできないぞ、と怒られました。具体的には以下。

from scipy import signal
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ImportError: cannot import name 'signal' from 'scipy' (/home/hoge/.local/lib/python3.7/site-packages/scipy/__init__.py)

# 調査

まずはぼくの環境について。Ubuntuです。

cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"

Pythonはanyenvのpyenvで入れた3.7.6です。以下、コマンド結果は一部省略しています。

pip show pip
Version: 20.1
Location: /home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python3.7/site-packages

pip show numpy
Version: 1.18.1
Location: /home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python3.7/site-packages
Required-by: scipy, pandas, opencv-python, matplotlib

pip show scipy
Version: 1.4.1
Location: /home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python3.7/site-packages

余談ですが、pip show にはホームページの情報などもあって便利です。

この時点で、pipでのscipyと、import時のscipy のパスが違います。

さらに、pythonのインタープリタで以下のように実行しました。

>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
'/home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python37.zip',
'/home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python3.7',
'/home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python3.7/lib-dynload',
'/home/hoge/.local/lib/python3.7/site-packages',
'/home/hoge/.anyenv/envs/pyenv/versions/3.7.6/lib/python3.7/site-packages']

この順番なので、まずは /home/hoge/.local/lib/python3.7/site-packages を見てみました。 /home/hoge/.local/lib/python3.7/site-packages にはscipyが入っていました。というか、scipyしか入ってません。え?いつ入れたんだろう。

ls -la で確認してみたところ、4月2日に入れたっぽい。なんとなく何かをした覚えはあるけど、具体的なことが思い出せない……。

# 解決

pip で他にも色んなものを入れてましたが、 /home/hoge/.local/lib/python3.7/site-packages はscipyしか入っていかったので、/home/hoge/.local/lib/python3.7 を消しました。

すると、from scipy import signal が無事怒られないようになりました!

焦った~。



この記事が気に入ったらサポートをしてみませんか?