【ラズパイ】Raspbianにpyenvをインストール
面倒くさいと思いつつ、今後のことを考えてRaspbianに'pyenv'をインストールしました。'pyenv'は、Pythonのバージョンを簡単に切り替えられるようになるツールです。
インストール
'git'が入っていなかったので、'wget'を使ってインストール(ダウンロード)しました。
pyenvをダウンロード
'pyenv'をGitHubからホームディレクトリにダウンロード。
~$ wget https://github.com/pyenv/pyenv/archive/master.zip -P ~/ -P pyenv.zip
ZIP形式で圧縮されているので'unzip'コマンドで解凍。
~$ unzip ~/pyenv.zip -d ~/
フォルダ名が'pyenv-master'になっているので'.pyenv'にリネーム。
~$ mv ~/pyenv-master/ ~/.pyenv
pyenvのパス(PATH)を通す
シェルが'pyenv'を見つけられるようにパスを通す。私のRaspbianは'bash'を使用。
'~/.bash_profile'に追記する。
~$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
~$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
~$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
'~/.bash_profile'の変更を次のコマンドで適用。
~$ source ~/.bash_profile
'pyenv'のパスが通ったか確認。
~$ pyenv --version
'pyenv'のバージョンが表示されれば、オッケー。私の場合'pyenv 1.2.11'だった。
pyenv環境にPythonをインストール
依存パッケージのインストール
RaspbianはDebianベースのOSなので、Home · pyenv_pyenv Wiki · GitHubの'Ubuntu/Debian/Mint:'に書いてある物をインストールする。
要するに以下をインストールする必要がある。
make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
インストールします。
~$ sudo apt-get -y install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
初めからインストールされているものも含まれているが、そこそこ時間が掛かるので気長に待ちます。
Pythonをインストール
ここでは'2.7.16'と'3.6.8'をインストールします。お好みのバージョンでインストールしてください。
~$ pyenv install 2.7.16
~$ pyenv install 3.6.8
ちょっとした問題が発生した
pyenvでPythonをインストールしているときに'/tmp'の空き容量不足が発生してコンパイル(ビルド)できなかった。原因は明白で、'/tmp'をtmpfs上に32MBで設定していたからだった。
いろいろ考えた
普段は'/tmp'の容量足りてるのに、領域を大きくするのはメモリを圧迫するので避けたい。'/tmp'をtmpfs上に設置する設定をやめようかと思ったが、いつもSDカードにアクセスされるのも嫌だ。
結局いいアイデアがなかったので、コンパイル(ビルド)の作業がある時だけ手動でアンマウントすることにした。この時くらいSDカードをカリカリしてもいいよね(ズボラ。
やったこと
Pythonをインストールする前にtmpfsを'/tmp'からアンマウント(SDカード上に戻す)。
~$ sudo umount /tmp
Pythonをインストール(共有ライブラリを作るため'--enable-shared'を付加)。
~$ CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.16
~$ CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.8
どちらも問題なくインストール完了したのを確認しました。
'/tmp'の中にログファイル等が残っているので全部削除。
~$ sudo rm -rf /tmp/*
'/tmp'にtmpfsをマウント('/etc/fstab'の設定で)。
~$ sudo mount /tmp
一応マウントされたことを確認。
~$ df -h
おわりに
ビルドのときだけ'/tmp'の領域を自動で増やす方法とかあったら教えてほしいです。なんて言っても手動は面倒くさいし、他に方法がある気がする。