やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ラズパイ4Bにpyenvをインストールする(python 3.8.2)

 30分位かかる。

手順

 必要なライブラリを入手。

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

出力結果

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
git はすでに最新バージョン (1:2.20.1-2+deb10u1) です。
libreadline-dev はすでに最新バージョン (7.0-5) です。
libreadline-dev は手動でインストールしたと設定されました。
libssl-dev はすでに最新バージョン (1.1.1d-0+deb10u2+rpt1) です。
openssl はすでに最新バージョン (1.1.1d-0+deb10u2+rpt1) です。
openssl は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  alsa-base docbook-xml docbook-xsl gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gir1.2-gtkspell3-3.0 gir1.2-javascriptcoregtk-4.0
  gir1.2-keybinder-3.0 gir1.2-webkit2-4.0 gir1.2-wnck-3.0 gnome-session-canberra gstreamer0.10-alsa gstreamer0.10-plugins-base libdrm-dev
  libdrm-etnaviv1 libdrm-exynos1 libdrm-freedreno1 libdrm-omap1 libdrm-tegra0 libenchant-dev libgles-dev libglvnd-core-dev libglvnd-dev
  libgstreamer-plugins-base0.10-0 libgstreamer0.10-0 libgtkspell3-3-0 libjavascriptcoregtk-4.0-dev libkeybinder-3.0-0 libllvm8 libopengl0
  libsoup2.4-dev libva-wayland2 libwnck-3-0 libwnck-3-common libx11-xcb-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev
  libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxfce4util-bin libxfce4util-common libxfce4util7 libxfconf-0-2
  libxshmfence-dev libxss-dev libxt-dev libxxf86vm-dev mesa-common-dev pimixer point-rpi python-gobject-2-dev sgml-data x11proto-scrnsaver-dev
  x11proto-xf86vidmode-dev xfconf
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  bzip2-doc
提案パッケージ:
  sqlite3-doc
以下のパッケージが新たにインストールされます:
  bzip2-doc libbz2-dev libsqlite3-dev
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 4 個。
1,208 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,584 kB のディスク容量が消費されます。
取得:1 http://ftp.jaist.ac.jp/raspbian buster/main armhf bzip2-doc all 1.0.6-9.2~deb10u1 [493 kB]
取得:2 http://ftp.jaist.ac.jp/raspbian buster/main armhf libbz2-dev armhf 1.0.6-9.2~deb10u1 [27.7 kB]
取得:3 http://ftp.jaist.ac.jp/raspbian buster/main armhf libsqlite3-dev armhf 3.27.2-3 [688 kB]
1,208 kB を 2秒 で取得しました (663 kB/s)
以前に未選択のパッケージ bzip2-doc を選択しています。
(データベースを読み込んでいます ... 現在 177100 個のファイルとディレクトリがインストールされています。)
.../bzip2-doc_1.0.6-9.2~deb10u1_all.deb を展開する準備をしています ...
bzip2-doc (1.0.6-9.2~deb10u1) を展開しています...
以前に未選択のパッケージ libbz2-dev:armhf を選択しています。
.../libbz2-dev_1.0.6-9.2~deb10u1_armhf.deb を展開する準備をしています ...
libbz2-dev:armhf (1.0.6-9.2~deb10u1) を展開しています...
以前に未選択のパッケージ libsqlite3-dev:armhf を選択しています。
.../libsqlite3-dev_3.27.2-3_armhf.deb を展開する準備をしています ...
libsqlite3-dev:armhf (3.27.2-3) を展開しています...
bzip2-doc (1.0.6-9.2~deb10u1) を設定しています ...
libsqlite3-dev:armhf (3.27.2-3) を設定しています ...
libbz2-dev:armhf (1.0.6-9.2~deb10u1) を設定しています ...
install-info (6.5.0.dfsg.1-4+b1) のトリガを処理しています ...

 pyenvを入手。

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

 端末起動時にパスを通すようにする。

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

 新しく端末を起動し、以下コマンドを叩く。

$ pyenv -v
pyenv 1.2.17-2-ga8ca63fc

入手できるPythonバージョンを確認

出力結果

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5.0
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6
  2.6.7
  2.6.8
  2.6.9
  2.7.0
  2.7-dev
  2.7.1
  2.7.2
  2.7.3
  2.7.4
  2.7.5
  2.7.6
  2.7.7
  2.7.8
  2.7.9
  2.7.10
  2.7.11
  2.7.12
  2.7.13
  2.7.14
  2.7.15
  2.7.16
  2.7.17
  3.0.1
  3.1.0
  3.1.1
  3.1.2
  3.1.3
  3.1.4
  3.1.5
  3.2.0
  3.2.1
  3.2.2
  3.2.3
  3.2.4
  3.2.5
  3.2.6
  3.3.0
  3.3.1
  3.3.2
  3.3.3
  3.3.4
  3.3.5
  3.3.6
  3.3.7
  3.4.0
  3.4-dev
  3.4.1
  3.4.2
  3.4.3
  3.4.4
  3.4.5
  3.4.6
  3.4.7
  3.4.8
  3.4.9
  3.4.10
  3.5.0
  3.5-dev
  3.5.1
  3.5.2
  3.5.3
  3.5.4
  3.5.5
  3.5.6
  3.5.7
  3.5.8
  3.5.9
  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.6.3
  3.6.4
  3.6.5
  3.6.6
  3.6.7
  3.6.8
  3.6.9
  3.6.10
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.7.3
  3.7.4
  3.7.5
  3.7.5rc1
  3.7.6
  3.7.7
  3.8.0
  3.8-dev
  3.8.1
  3.8.2
  3.9.0a4
  3.9-dev
  activepython-2.7.14
  activepython-3.5.4
  activepython-3.6.0
  anaconda-1.4.0
  anaconda-1.5.0
  anaconda-1.5.1
  anaconda-1.6.0
  anaconda-1.6.1
  anaconda-1.7.0
  anaconda-1.8.0
  anaconda-1.9.0
  anaconda-1.9.1
  anaconda-1.9.2
  anaconda-2.0.0
  anaconda-2.0.1
  anaconda-2.1.0
  anaconda-2.2.0
  anaconda-2.3.0
  anaconda-2.4.0
  anaconda-4.0.0
  anaconda2-2.4.0
  anaconda2-2.4.1
  anaconda2-2.5.0
  anaconda2-4.0.0
  anaconda2-4.1.0
  anaconda2-4.1.1
  anaconda2-4.2.0
  anaconda2-4.3.0
  anaconda2-4.3.1
  anaconda2-4.4.0
  anaconda2-5.0.0
  anaconda2-5.0.1
  anaconda2-5.1.0
  anaconda2-5.2.0
  anaconda2-5.3.0
  anaconda2-5.3.1
  anaconda2-2018.12
  anaconda2-2019.03
  anaconda2-2019.07
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
  anaconda3-4.1.1
  anaconda3-4.2.0
  anaconda3-4.3.0
  anaconda3-4.3.1
  anaconda3-4.4.0
  anaconda3-5.0.0
  anaconda3-5.0.1
  anaconda3-5.1.0
  anaconda3-5.2.0
  anaconda3-5.3.0
  anaconda3-5.3.1
  anaconda3-2018.12
  anaconda3-2019.03
  anaconda3-2019.07
  anaconda3-2019.10
  ironpython-dev
  ironpython-2.7.4
  ironpython-2.7.5
  ironpython-2.7.6.3
  ironpython-2.7.7
  jython-dev
  jython-2.5.0
  jython-2.5-dev
  jython-2.5.1
  jython-2.5.2
  jython-2.5.3
  jython-2.5.4-rc1
  jython-2.7.0
  jython-2.7.1
  micropython-dev
  micropython-1.9.3
  micropython-1.9.4
  micropython-1.10
  micropython-1.11
  micropython-1.12
  miniconda-latest
  miniconda-2.2.2
  miniconda-3.0.0
  miniconda-3.0.4
  miniconda-3.0.5
  miniconda-3.3.0
  miniconda-3.4.2
  miniconda-3.7.0
  miniconda-3.8.3
  miniconda-3.9.1
  miniconda-3.10.1
  miniconda-3.16.0
  miniconda-3.18.3
  miniconda2-latest
  miniconda2-3.18.3
  miniconda2-3.19.0
  miniconda2-4.0.5
  miniconda2-4.1.11
  miniconda2-4.3.14
  miniconda2-4.3.21
  miniconda2-4.3.27
  miniconda2-4.3.30
  miniconda2-4.3.31
  miniconda2-4.4.10
  miniconda2-4.5.1
  miniconda2-4.5.4
  miniconda2-4.5.11
  miniconda2-4.5.12
  miniconda2-4.6.14
  miniconda2-4.7.10
  miniconda2-4.7.12
  miniconda3-latest
  miniconda3-2.2.2
  miniconda3-3.0.0
  miniconda3-3.0.4
  miniconda3-3.0.5
  miniconda3-3.3.0
  miniconda3-3.4.2
  miniconda3-3.7.0
  miniconda3-3.8.3
  miniconda3-3.9.1
  miniconda3-3.10.1
  miniconda3-3.16.0
  miniconda3-3.18.3
  miniconda3-3.19.0
  miniconda3-4.0.5
  miniconda3-4.1.11
  miniconda3-4.2.12
  miniconda3-4.3.11
  miniconda3-4.3.14
  miniconda3-4.3.21
  miniconda3-4.3.27
  miniconda3-4.3.30
  miniconda3-4.3.31
  miniconda3-4.4.10
  miniconda3-4.5.1
  miniconda3-4.5.4
  miniconda3-4.5.11
  miniconda3-4.5.12
  miniconda3-4.6.14
  miniconda3-4.7.10
  miniconda3-4.7.12
  pypy-c-jit-latest
  pypy-c-nojit-latest
  pypy-dev
  pypy-stm-2.3
  pypy-stm-2.5.1
  pypy-1.5-src
  pypy-1.5
  pypy-1.6
  pypy-1.7
  pypy-1.8
  pypy-1.9
  pypy-2.0-src
  pypy-2.0
  pypy-2.0.1-src
  pypy-2.0.1
  pypy-2.0.2-src
  pypy-2.0.2
  pypy-2.1-src
  pypy-2.1
  pypy-2.2-src
  pypy-2.2
  pypy-2.2.1-src
  pypy-2.2.1
  pypy-2.3-src
  pypy-2.3
  pypy-2.3.1-src
  pypy-2.3.1
  pypy-2.4.0-src
  pypy-2.4.0
  pypy-2.5.0-src
  pypy-2.5.0
  pypy-2.5.1-src
  pypy-2.5.1
  pypy-2.6.0-src
  pypy-2.6.0
  pypy-2.6.1-src
  pypy-2.6.1
  pypy-4.0.0-src
  pypy-4.0.0
  pypy-4.0.1-src
  pypy-4.0.1
  pypy-5.0.0-src
  pypy-5.0.0
  pypy-5.0.1-src
  pypy-5.0.1
  pypy-5.1-src
  pypy-5.1
  pypy-5.1.1-src
  pypy-5.1.1
  pypy-5.3-src
  pypy-5.3
  pypy-5.3.1-src
  pypy-5.3.1
  pypy-5.4-src
  pypy-5.4
  pypy-5.4.1-src
  pypy-5.4.1
  pypy-5.6.0-src
  pypy-5.6.0
  pypy-5.7.0-src
  pypy-5.7.0
  pypy-5.7.1-src
  pypy-5.7.1
  pypy2-5.3-src
  pypy2-5.3
  pypy2-5.3.1-src
  pypy2-5.3.1
  pypy2-5.4-src
  pypy2-5.4
  pypy2-5.4.1-src
  pypy2-5.4.1
  pypy2-5.6.0-src
  pypy2-5.6.0
  pypy2-5.7.0-src
  pypy2-5.7.0
  pypy2-5.7.1-src
  pypy2-5.7.1
  pypy2.7-5.8.0-src
  pypy2.7-5.8.0
  pypy2.7-5.9.0-src
  pypy2.7-5.9.0
  pypy2.7-5.10.0-src
  pypy2.7-5.10.0
  pypy2.7-6.0.0-src
  pypy2.7-6.0.0
  pypy2.7-7.0.0-src
  pypy2.7-7.0.0
  pypy2.7-7.1.0-src
  pypy2.7-7.1.0
  pypy2.7-7.1.1-src
  pypy2.7-7.1.1
  pypy2.7-7.2.0-src
  pypy2.7-7.2.0
  pypy2.7-7.3.0-src
  pypy2.7-7.3.0
  pypy3-dev
  pypy3-2.3.1-src
  pypy3-2.3.1
  pypy3-2.4.0-src
  pypy3-2.4.0
  pypy3.3-5.2-alpha1-src
  pypy3.3-5.2-alpha1
  pypy3.3-5.5-alpha-src
  pypy3.3-5.5-alpha
  pypy3.5-c-jit-latest
  pypy3.5-5.7-beta-src
  pypy3.5-5.7-beta
  pypy3.5-5.7.1-beta-src
  pypy3.5-5.7.1-beta
  pypy3.5-5.8.0-src
  pypy3.5-5.8.0
  pypy3.5-5.9.0-src
  pypy3.5-5.9.0
  pypy3.5-5.10.0-src
  pypy3.5-5.10.0
  pypy3.5-5.10.1-src
  pypy3.5-5.10.1
  pypy3.5-6.0.0-src
  pypy3.5-6.0.0
  pypy3.5-7.0.0-src
  pypy3.5-7.0.0
  pypy3.6-7.0.0-src
  pypy3.6-7.0.0
  pypy3.6-7.1.0-src
  pypy3.6-7.1.0
  pypy3.6-7.1.1-src
  pypy3.6-7.1.1
  pypy3.6-7.2.0-src
  pypy3.6-7.2.0
  pypy3.6-7.3.0-src
  pypy3.6-7.3.0
  pyston-0.5.1
  pyston-0.6.0
  pyston-0.6.1
  stackless-dev
  stackless-2.7-dev
  stackless-2.7.2
  stackless-2.7.3
  stackless-2.7.4
  stackless-2.7.5
  stackless-2.7.6
  stackless-2.7.7
  stackless-2.7.8
  stackless-2.7.9
  stackless-2.7.10
  stackless-2.7.11
  stackless-2.7.12
  stackless-2.7.14
  stackless-3.2.2
  stackless-3.2.5
  stackless-3.3.5
  stackless-3.3.7
  stackless-3.4-dev
  stackless-3.4.1
  stackless-3.4.2
  stackless-3.4.7
  stackless-3.5.4

 実行時点では3.8.2が正式の最新っぽい。

Pythonビルド環境の入手

sudo apt-get update; sudo apt-get install --no-install-recommends 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インストール&ビルド

pyenv install 3.8.2

 10〜15分くらいかかる。

$ pyenv versions
* system (set by /home/pi/.pyenv/version)
  3.8.2

Pythonバージョン設定

before

$ python -V
Python 2.7.16
$ python3 -V
Python 3.7.3
pyenv local 3.8.2
pyenv global 3.8.2

after

$ python -V
Python 2.7.16
$ python3 -V
Python 3.8.2

 python3コマンドのほうだけ変化した。pythonコマンドは2のまま……。

 ついでにpipも確認。

before

$ pip -V
pip 19.3.1 from /home/pi/.local/lib/python3.7/site-packages/pip (python 3.7)
$ pip3 -V
pip 19.3.1 from /home/pi/.local/lib/python3.7/site-packages/pip (python 3.7)

after

$ pip3 -V
pip 19.2.3 from /home/pi/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pip (python 3.8)
$ pip -V
pip 19.2.3 from /home/pi/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pip (python 3.8)
$ pip2 -V
pip 19.3.1 from /home/pi/.local/lib/python2.7/site-packages/pip (python 2.7)

 pipコマンドは2でなく3。こういう罠が普通に潜んでいるから怖い。

所感

 思ったよりは順調だった。

情報源

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux