📦
Raspberry Pi OS + PyenvでPythonバージョンの切り替え
OS標準でインストールされているPythonとは異なるバージョンをインストールして用途によって使い分けられるようにPyenvをインストールして切り替えるようにしました。
環境
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
インストール済Pythonのバージョン確認
$ python -V
Python 3.9.2
Pyenvのインストール
Githubから取得してインストールする方法もあるようですが今回はインストールシェルをダウンロードして実行することにしました。
$ sudo curl https://pyenv.run | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 270 100 270 0 0 253 0 0:00:01 0:00:01 --:--:-- 253
Cloning into '/home/hoto/.pyenv'...
remote: Enumerating objects: 992, done.
remote: Counting objects: 100% (992/992), done.
remote: Compressing objects: 100% (429/429), done.
remote: Total 992 (delta 574), reused 707 (delta 436), pack-reused 0
Receiving objects: 100% (992/992), 490.48 KiB | 5.51 MiB/s, done.
Resolving deltas: 100% (574/574), done.
Cloning into '/home/hoto/.pyenv/plugins/pyenv-doctor'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 11 (delta 1), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (11/11), 38.72 KiB | 267.00 KiB/s, done.
Resolving deltas: 100% (1/1), done.
Cloning into '/home/hoto/.pyenv/plugins/pyenv-installer'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 16 (delta 1), reused 7 (delta 0), pack-reused 0
Receiving objects: 100% (16/16), 5.88 KiB | 5.88 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Cloning into '/home/hoto/.pyenv/plugins/pyenv-update'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), done.
Resolving deltas: 100% (1/1), done.
Cloning into '/home/hoto/.pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 61, done.
remote: Counting objects: 100% (61/61), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 61 (delta 11), reused 27 (delta 1), pack-reused 0
Receiving objects: 100% (61/61), 37.56 KiB | 2.35 MiB/s, done.
Resolving deltas: 100% (11/11), done.
Cloning into '/home/hoto/.pyenv/plugins/pyenv-which-ext'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), done.
Resolving deltas: 100% (1/1), done.
WARNING: seems you still have not added 'pyenv' to the load path.
# Load pyenv automatically by appending
# the following to
~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
and ~/.bashrc (for interactive shells) :
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# Restart your shell for the changes to take effect.
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:
eval "$(pyenv virtualenv-init -)"
.bashrc修正
ログイン時だけではなくシェル起動時にも反映されるように今回は~/.bashrcに以下の設定を追加
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
設定を現在のシェルに反映
$ source ~/.bashrc
pyenvのバージョン確認
$ pyenv --version
pyenv 2.3.3
インストール可能なバージョンを表示
インストール可能なpythonのバージョン表示(2022/8/20時点)
$ pyenv install --list
〜途中省略〜
3.10.6
3.11.0rc1
3.11-dev
3.12-dev
現在のアクティブなpythonバージョン確認
$ pyenv version
system (set by /home/hoto/.pyenv/version)
python 3.10.6をインストール
$ pyenv install 3.10.6
Downloading Python-3.10.6.tar.xz...
-> https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
Installing Python-3.10.6...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python curses extension was not compiled. Missing the ncurses lib?
WARNING: The Python ctypes extension was not compiled. Missing the libffi 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 (Debian 11 using python-build 20180424)
Inspect or clean up the working tree at /tmp/python-build.20220820185201.4000
Results logged to /tmp/python-build.20220820185201.4000.log
Last 10 log lines:
./python -E -m ensurepip \
$ensurepip --root=/ ; \
fi
Looking in links: /tmp/tmp6o24axxz
Processing /tmp/tmp6o24axxz/setuptools-63.2.0-py3-none-any.whl
Processing /tmp/tmp6o24axxz/pip-22.2.1-py3-none-any.whl
Installing collected packages: setuptools, pip
WARNING: The scripts pip3 and pip3.10 are installed in '/home/hoto/.pyenv/versions/3.10.6/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-22.2.1 setuptools-63.2.0
一部のパッケージはインストールされたもののWARNING
不足パッケージをインストール
sudo apt-get install libbz2-dev
sudo apt-get install libncurses5-dev
sudo apt-get install libffi-dev
sudo apt-get install libreadline-dev
sudo apt-get install libssl-dev
python 3.10.6をインストール(リトライ1)
$ pyenv install 3.10.6
Downloading Python-3.10.6.tar.xz...
-> https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
Installing Python-3.10.6...
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?
Installed Python-3.10.6 to /home/hoto/.pyenv/versions/3.10.6
python3.10.6はインストールされたもののまだWANING
python 3.10.6をインストール(リトライ2)
一度、python 3.10.6をアンインストール
$ pyenv uninstall 3.10.6
pyenv: remove /home/hoto/.pyenv/versions/3.10.6? [y|N] y
pyenv: 3.10.6 uninstalled
不足のパッケージをインストール
$ sudo apt-get install libsqlite3-dev
$ sudo apt-get install liblzma-dev
python 3.10.6をインストール
$ pyenv install 3.10.6
Downloading Python-3.10.6.tar.xz...
-> https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
Installing Python-3.10.6...
Installed Python-3.10.6 to /home/hoto/.pyenv/versions/3.10.6
インストールされているPythonのバージョン表示
$ pyenv versions
* system (set by /home/hoto/.pyenv/version)
3.10.6
systemはOSにデフォルトでインストールされているバージョン
*は現在のシェルで有効になっているバージョン
バージョンの切り替え
切り替えの有効範囲
オプション | 有効範囲 |
---|---|
shell | 現在のシェル内でのみ有効なバージョン指定 |
local | 現在のディレクトリとそれ以下のディレクトリで有効なバージョン指定 |
global | システム全体でのPythonバージョンを指定する |
切り替え(shellの場合)
$ pyenv shell 3.10.6
$ pyenv versions
system
* 3.10.6 (set by PYENV_VERSION environment variable)
$ python --version
Python 3.10.6
無事インストール完了、次は複数の開発環境に切り替えられるようにpipenvをインストール予定
Discussion