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を変更することが可能です。複数のバージョンに対して開発を行う場合は便利なので使ってみましょう。

コメントを残す

メールアドレスが公開されることはありません。