ラズパイゼロにpyenvでpythonの環境構築する話

どこのご家庭にも一個や二個は余っている(?)ラズパイが自宅にもあったので、とりあえずPythonの環境を作るかってことでpyenvを使って環境構築をした時の話です。

環境

ラズパイ : Raspberry Pi Zero WH
OS : raspbian 9.4

事前準備

pyenvのインストールの前にPythonのコンパイル時に必要になるもパッケージをインストールしておきます。

sudo apt install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev zlib1g-dev libffi-dev gcc make

これを忘れてもpyenvのインストールは出来るのですが、Pythonのインストール時に悲しい出来事が起こります。(詳細は記事後半に書いてあります。)

pyenvのインストール

git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bashrc
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
echo 'export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'fi' >> ~/.bashrc
source ~/.bashrc

git cloneは説明しなくてもわかると思いますがpyenvを手元に持ってきています。
echo ~~pyenvの設定を.bashrcに追記しています。
source ~/.bashrcでbashを読み込み直しています。

pyenv --version

を実行して

pyenv 1.2.9-16-g9baa6efe

pyenvのバージョンが表示されればOK

pythonのインストール

そもそもraspbianにはPythonが入っているわけですが、ちょっとバージョンが古かったのでどうせなら新しいPythonを使おうってことでこんなことをやっています。

pyenv install --list

これでインストール可能なPythonのバージョンが取得できるので、お好きなものを選んでください。

今回は実行時点て最新だった3.7.2をインストールします。

pyenv install 3.7.2

コンパイルに一時間近くかかるので気長に待ちましょう。
sshで接続している場合は、途中で接続が切れるとインストールが中断されてしまうのでnohupを使っておきましょう。

nohup pyenv install 3.7.2 &
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
Installed Python-3.7.2 to /home/pi/.pyenv/versions/3.7.2

こんな感じでインストールされます。

インストールが完了したら早速Python3.7.2が実行できるようにしましょう。

全体で使うPythonのバージョンを3.7.2に変更

pyenv global 3.7.2

変更されたか確認してみます。

python --version
Python 3.7.2

指定したバージョンが表示されれば大丈夫です。

元に戻すには

pyenv global system

でOK

最後に

実は筆者は今回pyenvでPythonをインストールするときに失敗を犯しまして、具体的には、Pythonのコンパイル時に必要なパッケージをインストールする前にpyenv install ~~コマンドを実行したのです。
すると以下のようなエラーが出てコンパイルが失敗しました。

Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems

BUILD FAILED (Raspbian 9.4 using python-build 1.2.9-16-g9baa6efe)

Inspect or clean up the working tree at /tmp/python-build.20190225171731.2526
Results logged to /tmp/python-build.20190225171731.2526.log

Last 10 log lines:
    install|*) ensurepip="" ;; \
  esac; \
   ./python -E -m ensurepip \
    $ensurepip --root=/ ; \
fi
Looking in links: /tmp/tmp0bt1vlf_
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2

一時間くらいコンパイルしていたのが水の泡…

皆さんにはこんな悲しい思いをして欲しくないので、記事で紹介してある内容は、成功した時の内容です。

悲しい出来事はありましたが、無事ラズパイ上でpyenvを利用したPythonの環境構築ができました。

参考記事

https://qiita.com/utgwkk/items/bf282ca95f64ef7dd594 https://qiita.com/rysk92/items/878fddbf23262628d89e