9
7

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 5 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']

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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?