====== xxenv ======
===== 概要 =====
xxenvはrbenv、pyenv、およびgoenvのように、インタプリタ言語バージョンをユーザレベルで管理するツールのことである。
言語ごとに、インスタンスがあるが、おおむね同じようなインターフェイスを持つ。
===== xxenv =====
==== rbenv ====
=== 概要 ===
Rubyの実行環境を管理するツールである。
=== インストール ===
パッケージなどもあるが、ruby-buildが古いとせっかく rbenvでバージョン管理していても、新しいバージョンをインストールできないので、gitから直接取得する。
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ mkdir ~/.rbenv/plugins
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ git clone https://github.com/rbenv/rbenv-default-gems.git ~/.rbenv/plugins/rbenv-default-gems
$ echo bundler > ~/.rbenv/default-gems
$ echo byebug >> ~/.rbenv/default-gems
また、以下の設定を ~/.bashrc に対しても行う。
if [ -d ${HOME}/.rbenv ]; then
export RBENV_ROOT=${HOME}/.rbenv
export PATH=${RBENV_ROOT}/bin:${RBENV_ROOT}/shims:${PATH}
export RBENV_SHELL=bash
eval "$(rbenv init -)"
fi
ログインしなおすか、$ . ~/.bashrc
するかしたのちに、rubyをインストールして、そのバージョンをデフォルトにする。
$ rbenv install 3.0.0
$ rbenv global 3.0.0
=== rbenv-update ===
通常、git cloneで取り込んだ rbenvやプラグインは、git pullで更新をするのだが、これを良しなにやってくれる、rbenv-updateというものがある。
以下の手順で取り込んだら、ログインしなおすなどして、rbenv initを再実行すれば、rbenv updateというサブコマンドが利用できるようになる。
$ git clone https://github.com/rkh/rbenv-update.git ~/.rbenv/plugins/rbenv-update
==== pyenv ====
=== 概要 ===
pyenvは pythonのバージョンを管理する。
=== インストール ===
rbenv同様に、gitから導入し、パッケージを常にフレッシュに保つ。
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ cd ~/.pyenv && src/configure && make -C src
~/.bashrcに対しても変更を行う。
if [ -d ${HOME}/.pyenv ]; then
export PYENV_ROOT=${HOME}/.pyenv
export PATH=${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}
export PYENV_SHELL=bash
eval "$(pyenv init -)"
fi
pythonに限らず、rubyでもgoでも、インタープリタの構築にはライブラリへの依存があり、ライブラリが存在しない場合は、構築に失敗あるいは特定の機能が利用できない状態で構築される。
pyenvは比較的親切に、昨日の欠落をレポートしてくれるが、それでも漏れるものもある。
以下は、3.9.2を構築した際に、bzip2のライブラリが欠落している旨を通知してきた例である。
$ pyenv install 3.9.2
Downloading Python-3.9.2.tar.xz...
-> https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tar.xz
Installing Python-3.9.2...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
Installed Python-3.9.2 to /home/araki/.pyenv/versions/3.9.2
$
Ubuntu 20.4 LTSで構築した際には、以下のライブラリを手動で追加した。他にも追加すべきものがあるかもしれない。
* libbz2-dev
* libreadline-dev
* tk
* tk-dev
* libffi-dev
* libssl-dev
tkについては警告は出ないが、これがないと idle などのモジュールが使えない。
libffi-devがないと、_ctypeがないエラーに見舞われて難儀する。
必須と言ってもいいライブラリである。
ライブラリを追加したら、使いたいバージョンをインストールして、デフォルトのバージョンに設定する。
$ pyenv install 3.9.2
$ pyenv global 3.9.2
==== goenv ====
=== 概要 ===
goenvはGNU goのバージョンを管理する。
=== インストール ===
言うまでもなく、gitから直接インストールする。
$ git clone https://github.com/syndbg/goenv.git ~/.goenv
~/.bashrcへも変更を行う。
if [ -d ${HOME}/.goenv ]; then
export GOENV_ROOT=${HOME}/.goenv
export PATH=${GOENV_ROOT}/bin:${GOENV_ROOT}/shims:${PATH}
export GOENV_SHELL=bash
eval "$(goenv init -)"
fi
あとは、ビルドしてバージョンを設定する。
$ goenv install 1.16.0
$ goenv global 1.16.0