turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

【ラズパイ】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:'に書いてある物をインストールする。

pyenv_wiki_page

要するに以下をインストールする必要がある。

依存パッケージ

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'の領域を自動で増やす方法とかあったら教えてほしいです。なんて言っても手動は面倒くさいし、他に方法がある気がする。

参考にしたサイト