ルート権限の無いCentOSにPython-3.8.5を野良ビルドする
はじめに
root権限の無いCentOS7.3&GCC-4.8.5の環境に野良ビルドしたGCC-9.3.0とOpenMPI-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も問題無く動くようです。
Author And Source
この問題について(ルート権限の無いCentOSにPython-3.8.5を野良ビルドする), 我々は、より多くの情報をここで見つけました https://qiita.com/yonedat/items/023f363b02157fa15c9b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .