NumPyがインポートできない(Pythonプログラミング)

numpyをインストールし、

$ pip install numpy

対話モードPythonでnumpyをインポートしたのですが、

$ >>> import numpy
ModuleNotFoundError: No module named '_ctypes'

「_ctypesというモジュールがない」と叱られてしまいました。

Pythonプログラムのconfigureコマンドでctypesについて調べてみると、

$ ./configure --help | grep ctypes
  --with-system-ffi       build _ctypes module using an installed ffi library

ライブラリを指定するオプションがありました。

しかし、これまでPythonをソースインストールする時に、このオプションを指定したことはありませんでしたが、それでもnumpyがインポートできないということはありませんでした。

なんとも不可解ですが、解決しないわけにはいきません。

さてと、どうするかな。

libffiのインストール

とりあえず、libffiのヘッダーファイルをパッケージインストールします。

$ sudo apt install -y libffi-dev

そんでもって、ソースコンパイル時のコンフィギュアオプションに–with-system-ffiを指定します。
ついでに、–with-ensurepip=yesも指定しておきます(参考サイト)。

$ ./configure --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/openssl/lib" --with-openssl=/usr/local/openssl --enable-optimizations --with-system-ffi --with-ensurepip=yes

※コンフィギュアの前にOpenSSLのインストールが必要。

メイク&インストール。

$ make
$ sudo make install

Python仮想環境を構築し、numpyをインストールします。

$ mkdir pywork
$ cd pywork
$ /usr/local/bin/python3 -m venv venv
$ source venb/bin/activate
$ pip install numpy

numpyがインポートできるか実験してみます。

$ python
>>> import numpy
>>> 

よし、成功。

色々やってきましたが、実機マシンのUbuntu環境には、ソフトウェアの手動インストールはやめたほうが良さそうです。
特に、プログラミング環境をインストールする場合は、VirtualBoxの仮想マシンにインストールした方がスナップショットが使えたりして、トラブル発生時の作業がやりやすくなります。

今回の教訓

ひとつ、手動インストールは極力避ける。
ひとつ、プログラミング環境の構築はVirtualBoxを利用する。