1.ViMをコンパイルするためにPythonとOpensslをコンパイルするまとめ
・vimを自分でコンパイルする際はpythonとopensslもコンパイルする必要が出てくる
・手順が確立できていればコンパイル自体は難しくはないが確立するまで大変
・コンパイルは面倒だが自分でできるとパッケージの提供を待たなくてよいので捗る側面も有り
2.PythonをDeep Learning VM上でコンパイルする
背景
vimのpython開発用Plugin導入のためにはpythonサポートをONにしてコンパイルした特定のVersion以上のvimが必要だった
(YouCompleteMe unavailable: requires Vim 8.1.2269+.)
↓
自分の希望するVersionでpythonサポートをONにしたvimがaptでまだ提供されていなかった
↓
vimを自分でコンパイルする事にした
↓
PythonサポートをONにしたvimをコンパイルするためには同じオプション(lto)でコンパイルされたPythonが必要だった
(lto1: fatal error: bytecode stream in file ‘/opt/conda/lib/python3.7/config-3.7m-x86_64-linux-gnu/libpython3.7m.a’ generated with LTO version 8.1 instead of the expected 7.1)
↓
Pythonを自分でコンパイルする事にした
↓
ssl moduleがビルドできないと言われた
(Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
↓
OpenSSL 1.1.1を自分でコンパイルする事にした
ということで、以下、非常に粗い手順ですが、GCPのDeep Learning VM(Debian 10)でpython3.8.8 + Tensorflow2.4をコンパイルしてvimをカスタマイズした際の記録です。
(1)GCPのMarketplaceからDeep Learning VMをデプロイ
AI/MLを使ってる方はDeep Learning VMをやっぱり使うのかな、と思って選択したのですが、よく考えてみると、Deep Learning VMを使う理由はこういったコンパイルとか面倒な事をしたくないからであって、スタートからして矛盾している気もしないでもないです。
まぁ、下記画像の赤いチェック部分のようにNVIDIAのドライバのインストールをチェックしておくと、インストールに加えて、LD_LIBRARY_PATHなどの設定もしてくれているようなので、少しだけ楽かもしれません。逆に言えばDeep Learning VMはDebian 10らしいのでDebianでもUbuntuでもドライバのインストールとLD_LIBRARY_PATHの設定さえすれば、GCPでなくても行けると思います。
(2)コンパイルに必要になるパッケージをインストール
sudo apt-get install build-essential checkinstall libreadline-gplv2-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev python3-dev libperl-dev libffi-dev liblzma-dev zlib1g-dev wget curl libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev git
上記リストはかなり粗いです。しかし、あまり関係なさそうなパッケージが実は意外なところで使われる場合があるので精査すると減らせるかもしれませんが、精査の余力はありませんでした。約400 MB ディスク容量が必要になります。
(2)OpenSSL 1.1.1を自分のホームディレクトリにインストール
以下、自分のホームディレクトリ/home/dahara1のlocal配下にインストールする前提なので、ご自分の環境に合わせて適宜書き換えてください。
cd ~ mkdir work cd work/ wget https://www.openssl.org/source/openssl-1.1.1.tar.gz tar xvzf openssl-1.1.1.tar.gz cd openssl-1.1.1/ ./config --prefix=/home/dahara1/local/openssl-1.1.1 shared zlib make depend make make test make install
インストール完了後、下記コマンドを打ちます
export LD_LIBRARY_PATH=/home/dahara1/local/openssl-1.1.1/lib:$LD_LIBRARY_PATH
(3)Pythonを自分のホームディレクトリにインストール
TensorFlow 2.4はまだPython 3.9に対応していないので3.8の最新にしておきます。
cd ~/work/ wget https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tgz tar zxfv Python-3.8.8.tgz cd Python-3.8.8 ./configure --prefix=/home/dahara1/local/python38 --enable-optimizations --with-openssl=/home/dahara1/local/openssl-1.1.1 --with-ensurepip --enable-shared --with-lto make make install
未解決のwarning
以下はコンパイル中に出た警告ですが、検索したところ深刻なものではなさそうなので、スルーしました。
/home/dahara1/work/python/Python-3.8.8/Modules/_testcapimodule.c:6328:5: warning: ‘tp_print’ is deprecated [-Wdeprecated-declaration ] MyList_Type.tp_print = 0;
・・・
In file included from ./Include/object.h:746,
from ./Include/pytime.h:6,
from ./Include/Python.h:85,
from /home/dahara1/work/python/Python-3.8.8/Modules/_testcapimodule.c:15:
./Include/cpython/object.h:260:30: note: declared here
Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
・・・
/home/dahara1/work/python/Python-3.8.8/Modules/_testcapimodule.c: In function ‘test_buildvalue_issue38913’:
/home/dahara1/work/python/Python-3.8.8/Modules/_testcapimodule.c:6463:15: warning: variable ‘res’ set but not used [-Wunused-but-set-variable] PyObject *res;
pythonのインストールが終わったら、PATH等を.bash_profileに書き込みましょう。
vim ~/.bash_profile
iキーを押してから以下をコピペ
export PATH=/home/dahara1/local/python38/bin:$PATH export PYTHONPATH=/home/dahara1/local/python38/bin export LD_LIBRARY_PATH=/home/dahara1/local/openssl-1.1.1/lib:/home/dahara1/local/python38/lib:$LD_LIBRARY_PATH alias vi=/home/dahara1/local/bin/vim # 以下は直接的には今回のviコンパイル作業には関係ありませんがコンパイルしたpythonで # https関係のプログラムを動かす際に必要になるのでやっておいた方が良い設定です export SSL_CERT_FILE=/home/dahara1/local/python38/lib/python3.8/site-pac kages/pip/_vendor/certifi/cacert.pem
Escキーを押して:キーを押してwq!と打ち込んで保存して終了
一度、ログアウトしてから再ログインし、設定がちゃんとできているか確認しましょう。
$ python3 --version Python 3.8.8 $ which python3 /home/dahara1/local/python38/bin/python3 which pip3 /home/dahara1/local/python38/bin/pip3
(4)vimをインストール
cd ~work/ git clone https://github.com/vim/vim.git cd vim ./configure --with-features=huge \ --enable-multibyte \ --enable-python3interp=yes \ --with-python3-config-dir=$(python3-config --configdir) \ --enable-perlinterp=yes \ --prefix=/home/dahara1/local make VIMRUNTIMEDIR=/home/dahara1/local/share/vim/vim82 make install
インストール後は「クラウドでインスタンスを新しく構築した時用のviの設定ファイル」を参考にPluguinのインストールと設定ファイルを作成してください。
YouCompleteMeのインストールのところで –allをつけずに
python3 install.py
とすればgo言語関係のエラーは出ずにインストールできると思います。
(5)Tensorflowを自分のホームディレクトリにインストール
tensorflowの公式ドキュメントでは仮想環境を作ってインストール推奨と書いてあるのですが、作成した仮想環境にスイッチしてからviのコンパイルをすると失敗するのでやるなら最後で。
pip3 install --upgrade pip pip3 install --upgrade tensorflow
コマンドラインから
python3 -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
と実行して下記のようにSuccessfully opened dynamic libraryとログが出てきたら成功です。
・・・
pciBusID: 0000:00:04.0 name: Tesla T4 computeCapability: 7.5
coreClock: 1.59GHz coreCount: 40 deviceMemorySize: 14.75GiB deviceMemoryBandwidth: 298.08GiB/s
・・・
お疲れ様でした!
もしかしたら完全にこの文章通りにはいかないかもしれませんが、この文章が貴方の何らかの助けになる事を願っています。
3.ViMをコンパイルするためにPythonとOpensslをコンパイルする関連リンク
1)vim-jp.org
usr_90 – Vim日本語ドキュメント
2)www.tensorflow.org
pip での TensorFlow のインストール