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を利用する。