raspbianにPython3.7を入れる
Raspbian StretchにpyenvでPython3.7.3を入れるときにハマったのでメモです。
もくじ(Index)ラズパイ関連の目次へ戻る(工事中)
ビルドに必要なパッケージをインストール
Python3.7からビルドするのにlibffi-devが追加されています。注意しましょう。
sudo apt install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev libffi-dev
pyenvのインストール
githubからcloneする。
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
.bash_profileに追記
~/.bash_profileに下記の内容を追記(もしくは新規作成)します。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
.bash_profileを反映
下記のコマンドを実行します。
source ~/.bash_profile
pythonをインストール
バージョンの確認
下記のコマンドを実行して自分がインストールしたいバージョンがあるか確認しておきましょう。
pyenv install --list
インストールする
3.7.3をインストールしたい場合は下記のようにコマンドを実行します。
pyenv install 3.7.3
バージョンの変更
ビルドが終わったら、バージョンを変更します。
バージョンを表示
pyenv versions
と実行すると、、、下記のように表示されます。*が付いているのが現在のバージョンです。
* system (set by /home/pi/.pyenv/version)
3.7.3
systemとは?
最初にインストールされているPythonです。2019/5/20時点では2.7.13
バージョンを変更
下記のコマンドを実行しバージョンを変更します。
pyenv global 3.7.3
バージョン確認
python –versionを実行して、先ほど指定したバージョンが表示されれば正しく変更されています。
$ python --version
Python 3.7.3
補足
pythonのバージョンを戻したい時
何か不具合があった場合は、下記のコマンドでsystemを指定すると元の状態に戻すことができます。
pyenv global system
ビルドエラーの対処
もし下記のエラーが出たら、libffi-devが足りないのでインストールしましょう。
$ pyenv install 3.7.3
Downloading Python-3.7.3.tar.xz...
-> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
Installing Python-3.7.3...
BUILD FAILED (Raspbian 9.9 using python-build 1.2.11-11-g7dd50144)
Inspect or clean up the working tree at /tmp/python-build.20190520161143.1355
Results logged to /tmp/python-build.20190520161143.1355.log
Last 10 log lines:
File "/tmp/tmp2oq_i1np/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in
File "/tmp/tmp2oq_i1np/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in
File "/tmp/tmp2oq_i1np/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 20, in
File "/tmp/tmp2oq_i1np/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 37, in
File "/tmp/tmp2oq_i1np/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in
File "/tmp/python-build.20190520161143.1355/Python-3.7.3/Lib/ctypes/__init__.py", line 7, in
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
Makefile:1130: ターゲット 'install' のレシピで失敗しました
make: *** [install] エラー 1
おわりに
pyenvを使うと、色々なバージョンのpythonを変更することが可能です。複数のバージョンに対して開発を行う場合は便利なので使ってみましょう。