Coreserver v2で_ctypesが発生した時の対処方法

blog-icatch-485

coreserver v2のレンタルサーバで、pythonとflaskの組み合わせでWEBシステムを公開していたが、pythonライブラリをインストールをするときなどに、_ctypesのエラーが発生した時、対処に相当苦労しましたが、何とかエラーを回避することが出来たので、皆さんの参考になればと思い対処方法を紹介いたします。

発生したエラー

pythonライブラリをpipでインストールする時やimportでライブラリを読み込んだ時に以下のメッセージで実行が出来ないことがあります。

ModuleNotFoundError: No module named '_ctypes'

対処の方法はlibffi」が存在していない状態でpythonをインストールしたことが原因であることが多く、レンタルサーバでなければ、libffi」をインストールした後にpython環境をもう一度インストールすれば解決するようです。
参考記事:https://qiita.com/s2hap/items/f8a1a90b99efef4a08a3

しかしながら、レンタルサーバではインストールする権限が無いため一苦労しなければいけません。まずはlibffi」準備しなければなりません

libffi」のインストールまでの準備

単純にyumコマンド等でインストールすることが出来ないので以下のように手作業でインストールを進めていきました。
まず、最初にレンタルサーバで作業をするために、HOMEフォルダに作業フォルダを作成

mkdir -p ~/work/libffi

公開されている「libffi」を作成した作業フォルダにダウンロードします。

cd work/libffi
wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz

正常にダウンロードが出来たなら、解凍しておきます。

tar xvfz libffi-3.2.1.tar.gz

libffi」のインストール

libffiのファイルが準備できたので、それでは解凍したフォルダに移動してインストールを実施していきます。今回は、$HOME/.local/libffi/3_2_1にインストールしてきますが、自身の環境に合わせてフォルダを指定してください

cd libffi-3.2.1
./configure --prefix=$HOME/.local/libffi/3_2_1

スクリプトが実行されインストール環境に問題が無ければ次に進みます。次はコンパイルとインストールです。

make
make install

問題なくコンパイル&インストールが終わると、$HOME/.local/libffi/3_2_1にインストールが完了しています。

libffiを利用できるように設定

通常、yum等でインストールした場合、以下のような設定は必要ありませんが。レンタルサーバ等では利用できないため、インストールしたファイルを利用できるように設定作業を行います。
まず、バージョンに依存しないようにシンボリックリンクを設定します。今回は以下のように設定しました。

mkdir -p ~/.local/include
ln -s $HOME/.local/libffi/3_2_1/lib/libffi-3.2.1/include/ffi.h $HOME/.local/include/
ln -s $HOME/.local/libffi/3_2_1/lib/libffi-3.2.1/include/ffitarget.h $HOME/.local/include/

mkdir -p ~/.local/lib
ln -s $HOME/.local/libffi/3_2_1/lib64/libffi.a $HOME/.local/lib/
ln -s $HOME/.local/libffi/3_2_1/lib64/libffi.la $HOME/.local/lib/
ln -s $HOME/.local/libffi/3_2_1/lib64/libffi.so $HOME/.local/lib/
ln -s $HOME/.local/libffi/3_2_1/lib64/libffi.so.6 $HOME/.local/lib/

mkdir -p ~/.local/lib/pkgconfig/
ln -s $HOME/.local/libffi/3_2_1/lib/pkgconfig/libffi.pc $HOME/.local/lib/pkgconfig/

環境変数の設定

libffiのインストールが環境したので、そのlibffiを利用出来るように環境変数(PATH)を設定していきます。coreserver v2はbashシェルなので、.bash_profileに以下の変数を追加していきます。

LD_LIBRARY_PATH=$HOME/.local/lib
PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig

追加設定した内容を反映させる

 source ~/.bash_profile

環境が整ったので、pythonをインストールして、ライブラリをインストールします。

pyenv install 3.10.0

実は、色々なサイトの情報を収集してここまでは辿り着きましたが、これでは解決しなかったのです。これはcoreserver v2の環境の違いなのか判りませんが、ここまで来て置きながら心が折れて諦めてしまいそうになりました。
数日間、作業をやめて保留していましたが、海外等の情報を調べたりしてようやく答えにたどり着きました。以下の変数も更に追加することで問題を解決することが出来ました。

LDFLAGS="-L $HOME/.local/lib/"
CPPFLAGS="-I $HOME/.local/include/"

今回、以下のサイトの情報は非常に助かりました。

私の個人的なおすすめ商品を紹介しています。気になったものがあればどうぞ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


上の計算式の答えを入力してください

CAPTCHA