Help us understand the problem. What is going on with this article?

Raspberry PiにpyenvをインストールしてPythonをバージョン管理

ラズパイには標準で3.5.3のPythonがインストールされていますが、
3.6以上のPythonを使いたかったので、pyenvを使用してバージョンを切り替えられるようにしておきます。

環境

  • Raspberry Pi 3 Model B+
  • Raspbian 9.11(stretch)
  • Kernel 4.19.66-v7+
$ uname -a
# Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux
$ lsb_release -a                 
# No LSB modules are available.
# Distributor ID: Raspbian
# Description:    Raspbian GNU/Linux 9.11 (stretch)
# Release:        9.11
# Codename:       stretch

pyenvのインストール

まず、必要なパッケージのインストールをします。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

githubからpyenvをクローンしてきます。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

コマンドを叩けるようにするため、.bash_profileに以下を追記します。

$ sudo vi ~/.bash_profile
.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

.bash_profileを再読み込みします。

$ source ~/.bash_profile

下記コマンドでバージョンが表示されればインストール完了です。

$ pyenv --version
#pyenv 1.2.16-5-g7097f820

pyenvでバージョン変更

インストールできるバージョンの一覧を表示してみます。

$ pyenv install --list
#Available versions:
#  2.1.3
#  2.2.3
#  ...
#  3.6.0
#  3.6-dev
#  ...
#  stackless-3.4.7
#  stackless-3.5.4

今回は3.6.0をインストールしてみます。

$ pyenv install 3.6.0

インストールが完了したら実際にバージョンを変更させてみましょう。

まず変更前のバージョンを確認します。

$ python --version
#Python 2.7.13
$ python3 --version
#Python 3.5.3

バージョンを変更します。

$ pyenv global 3.6.0

下記ようにバージョンが変更されました!

$ python --version
#Python 3.6.0
$ python3 --version
#Python 3.6.0

pyenvの設定について

pyenvは下記のコマンドで設定します。

$ pyenv global x.x.x

ちなみにこのglobalの部分を変更することで、適用範囲を設定できます。

適用範囲 使用用途
shell 今使用しているシェルにのみ適用 一時的な使用
local カレントディレクトリに適用 フォルダごとに設定したい
global 全体に適用 全体のデフォルト環境を変更したい

x.x.xの部分をsystemとすることで元に戻せます。

$ pyenv local 3.6.4
$ pyenv shell 2.7.6
$ pyenv global system

下記のコマンドでインストールしているバージョン一覧を見ることもできます。

$ pyenv versions

おまけ

3.7系をインストールしようとしたら下記エラーでインストールできませんでした。

$ pyenv install 3.7.0
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...

BUILD FAILED (Raspbian 9.11 using python-build 1.2.16-5-g7097f820)

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

Last 10 log lines:
  File "/tmp/tmp01sfxi5t/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/__init__.py", line 42, in <module>
  File "/tmp/tmp01sfxi5t/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/cmdoptions.py", line 16, in <module>
  File "/tmp/tmp01sfxi5t/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/index.py", line 25, in <module>
  File "/tmp/tmp01sfxi5t/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/download.py", line 39, in <module>
  File "/tmp/tmp01sfxi5t/pip-10.0.1-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in <module>
  File "/tmp/python-build.20200213174102.2652/Python-3.7.0/Lib/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
Makefile:1122: recipe for target 'install' failed
make: *** [install] Error 1

libffi-devをインストールすることで3.7系もインストールできました。

$ sudo apt install libffi-dev
$ pyenv install 3.7.0

今日はここまでです!

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした