LoginSignup
8
7

More than 3 years have passed since last update.

RaspberryPiでNumpyをインポートした際のエラー ImportError: numpy.core.multiarray failed to import

Posted at

経緯

pythonでnumpyをインポートした際、ImportError: numpy.core.multiarray failed to importと言われたのでNumPyをアップグレードしたものの、なかなかこのエラーが消えてくれなかったので色々考えた。

解決法1

pipが古い

そもそものpipが古かったら、最新のnumpyをアップグレード出来ないのでpipをアップグレード

$ pip3 install --upgrade pip
$ pip3 install numpy --upgrade

これでもダメ?

解決法2

いくつかNumpyが入っていて、古いやつが呼ばれている

例えば、

$ python3
>>>import sys
>>>sys.path

['',
'/home/pi/.pyenv/versions/3.4.1/lib/python34.zip', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/plat-linux', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/lib-dynload', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/site-packages']

上記のように打つと、パッケージを探してくれるディレクトリをずらずらと並べ立ててくれる。
この時に注目するべきところは、この記述の順番である。これはパッケージを探す順番である。
例えば、初めの '/home/pi/.pyenv/versions/3.4.1/lib/python34.zip'のディレクトリにnumpyが入っていればこいつを読み込まれてしまう。無ければ、次のディレクトリを探す。という感じだ。

過去に適当に他のディレクトリのpathを追加していてそいつが呼ばれているということもあり得る。

私は何も考えずに古いnumpyが入っている/usr/lib/python3/dist-packagesを追加していた。追加するのはいいが、一番最後に探してくれる追加の仕方をしていなかった。なので、最新のnumpyが入っている/home/pi/.pyenv/versions/3.4.1/lib/python3.4/site-packagesよりも早く呼び出されてしまっていたという事

対策

pathの追加方法な何通りかあるが、方法によって動きが微妙に違う。

追加方法1 .bashrcに追記

これは一番手っ取り早くpath追加できるが、パッケージの探索の際一番早く探索される

$ vi ~/.bashrc

# 以下の内容を追記
export PYTHONPATH="/usr/lib/python3/dist-packages"

保存して、再起動してpath一覧を見ると

$ python3
>>>import sys
>>>sys.path

['', '/usr/lib/python3/dist-packages', 
'/home/pi/.pyenv/versions/3.4.1/lib/python34.zip', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/plat-linux', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/lib-dynload', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/site-packages']

はい、一番先頭に来ましたね。

追加方法2 .pth ファイルの追加

これは、検索してくれるディレクトリに.pthファイルを作成及びpathを追記しておくと、pthファイルのpathのディレクトリを一番最後に探索してくれるというものだ。

#検索対象ディレクトリに移動
$ cd /home/pi/.pyenv/versions/3.4.1/lib/python3.4/site-packages
$ vi path.pth

# 以下の内容を追記
/usr/lib/python3/dist-packages

保存して、再起動してpath一覧を見ると

$ python3
>>>import sys
>>>sys.path

['', 
'/home/pi/.pyenv/versions/3.4.1/lib/python34.zip', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/plat-linux', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/lib-dynload', 
'/home/pi/.pyenv/versions/3.4.1/lib/python3.4/site-packages',
'/usr/lib/python3/dist-packages']

最後に来ていることがわかりますね。他にも方法があるみたいなので、その辺は他のサイトにお任せします...

8
7
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
8
7