2
2

More than 3 years have passed since last update.

ルート権限の無いCentOSにPython-3.8.5を野良ビルドする

Posted at

はじめに

root権限の無いCentOS7.3&GCC-4.8.5の環境に野良ビルドしたGCC-9.3.0OpenMPI-3.1.6を基に,今回は,Python-3.8.5を野良ビルドで構築し,さらに並列化のためにmpi4pyを入れたいと思います。

準備

Python,OpenSSL,libffiをダウンロードしておきます。

-https://sourceware.org/libffi/
-https://github.com/openssl/openssl
-https://www.python.org/downloads/source/

今回用いたバージョンは,libffi-3.3,openssl-1.1.1g,python-3.8.5です。
Python-3.8.5のビルド自体はlibffiとOpenSSLを事前にビルドしていなくてもできたのですが,pipの際にOpenSSLのエラーが生じます。"pip OpenSSL"などで検索すると色々でてきますが,Python3.7からOpenSSLの新しいバージョンが必要なようです。
また,新しいOpenSSLをインストールすることで,numpyなどはpipで入る様になりますが,mpi4pyはpipの際に”ModuleNotFoundError:No module named ‘_ctypes'”のエラーが生じます。これは,libffiをインストールしておくことで解消する様なのですが,Python-3.8.5をそのままビルドするとlibffiとリンクできないバグがあるようです。

OpenSSLのビルドとインストール

GCC-9.3.0でOpenSSLをビルドしようとしましたが,なぜかエラーになってしまったので,とりあえずデフォルトのGCC-4.8.5でビルドしました。

tar xzvf openssl-OpenSSL_1_1_1g.tar.gz
cd openssl-OpenSSL_1_1_1g
./config --prefix=$HOME/tools/OpenSSL-1.1.1g shared zlib enable-tls1_3
make -j 24
make install

OpenSSLのインストール後,.bash_profileに以下を追記します。

PATH=$HOME/tools/OpenSSL-1.1.1g/bin:$PATH
LD_LIBRARY_PATH=$HOME/tools/OpenSSL-1.1.1g/lib:LD_LIBRARY_PATH

libffiのビルドとインストール

こちらも,OpenSSL同様にGCC-9.3.0でビルドしようとするとエラーが出てしまいました。おそらくパスの設定などに問題があると思うのですが,後で考えることにします。取りあえず,標準で入っていたGCC-4.8.5でそのままビルドしてみます。

tar -zxvf libffi-3.3.tar.gz
mv libffi-3.3 libffi_work
cd libffi_work
mkdir build
cd build
../configure --prefix=$HOME/tools/libffi-3.3
make -j 24
make install

libffiのインストール完了後,.bash_profileに以下を追記しました。

export LD_LIBRARY_PATH=$HOME/tools/libffi-3.3/lib64:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$HOME/tools/libffi-3.3/lib/pkgconfig:$PKG_CONFIG_PATH

Python-3.8.5のビルドとインストール

上記でも述べたように,OpenSSLとlibffiを事前にインストールしておかないと,Pythonインストール後のpipの際にエラーが生じるのですが,さらにPythonビルド時にlibffiとリンクできないというバグもあるようです。Pythonの解凍後のトップディレクトリにある,Makefile.pre.in,configure,configure.ac,setup.pyの4つのファイルに対する修正がありましたので,その通りに修正して上書き保存します。
あとは,以下の手順にてインストールを行います。

tar Jxfv Python-3.8.5.tar.xz
mv Python-3.8.5 py_work
cd py_work
mkdir build
cd build
../configure --prefix=$HOME/tools/Python-3.8.5 --enable-shared --with-openssl=$HOME/tools/OpenSSL-1.1.1g --with-ensurepip LDFLAGS=-Wl,-rpath,$HOME/tools/Python-3.8.5/lib CC=$HOME/tools/gcc-9.3.0/bin/gcc CPP=$HOME/tools/gcc-9.3.0/bin/cpp CPPFLAGS="-I$HOME/tools/gcc-9.3.0/include -I$HOME/tools/OpenSSL-1.1.1g/include -I$HOME/tools/libffi-3.3/include"
make j 36
make install

インストール完了後,以下を.bash_profileに追記します。

PYTHON_HOME=$HOME/tools/Python-3.8.5
PYTHONPATH=$PYTHON_HOME/lib/python3.8/site-packages
PATH=$PYTHON_HOME/bin:$PATH
export PYTHON_HOME PYTHONPATH PATH

以下の様に,シンボリックリンクを作成してみました。

cd ~/bin/
ln -s ~/tools/Python-3.8.5/bin/python3.8 python38

また,numpyとmpi4pyも入れてみます。

cd ~/tools/Python-3.8.5/bin
pip3 install numpy
pip3 install mpi4py

以上で,GCC-9.3.0とOpenMPI-3.1.6をベースにしたPython-3.8.5までを野良ビルドで構築できました。一応,numpyとmpi4pyも問題無く動くようです。

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