今回は Python のインストールマネージャである pyenv を使って、簡単に複数のバージョンの Python を Ubuntu にインストールする方法を書く。 Python でソフトウェアを開発する際には、バージョン間の差異に配慮する必要がある。 そのため、開発する環境で使う Python のバージョンと実行する環境で使う Python のバージョンは、最低でもマイナーバージョンまでは揃えて開発することが望ましい。 そんなとき、開発ターゲットが色々とあるようなときはインストールマネージャが便利に使える。
使った環境は次のとおり。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy $ uname -srm Linux 5.15.0-41-generic aarch64 $ pyenv --version pyenv 2.3.2
もくじ
pyenv をインストールする
pyenv のインストール方法はいくつかあるけど、今だと pyenv-installer のスクリプトを使うのが一番ラクそう。
$ curl https://pyenv.run | bash
インストールできたら、表示に沿って必要な設定をシェルに追加する。
$ cat << 'EOF' >> ~/.bashrc export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" EOF $ exec "$SHELL"
これで pyenv コマンドが使えるようになる。
$ pyenv --version pyenv 2.3.2
あとは必要に応じて update しておこう。
$ pyenv update
pyenv で Python をビルドする
続いて pyenv を使って Python をビルドする。
ただし、その前に Python のビルドに必要となるパッケージをインストールする必要がある。 必要なパッケージは pyenv の wiki に記載がある。
上記を参照して必要なパッケージをインストールする。
$ sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
あとは pyenv install
コマンドを使って特定のバージョンの Python をビルドできる。
$ pyenv install <version>
今回はシステムの Python が 3.10 系になっている。
$ python3 -V Python 3.10.4
そのため、例としては Python 3.9 系をビルドしてみよう。
現時点 (2022-07) での最新版である 3.9.13
を指定する。
$ pyenv install 3.9.13
なお、デフォルトではビルドの際のログが最低限しか残らない。
そのため、必要に応じて -v
オプションをつけると良い。
テキストファイルにログを残したいときは tee(1) と組み合わせて次のようにする。
$ pyenv install -v 3.9.13 2>&1 | tee build.log
で、ログを確認してみると、実は先述の wiki のパッケージだけだとビルドされない Optional なモジュールがあることが分かる。
$ grep -A 3 "The necessary bits to build these optional modules were not found:" build.log The necessary bits to build these optional modules were not found: _dbm _gdbm To find the necessary bits, look in setup.py in detect_modules() for the module's name.
もし気になるようならビルドに必要なパッケージをインストールし直した上で、再度ビルドすれば良い。
$ sudo apt-get install libgdbm-dev libdb-dev $ pyenv uninstall -f 3.9.13 pyenv: 3.9.13 uninstalled $ pyenv install -v 3.9.13 2>&1 | tee build.log
最後に、pyenv で使用する Python のバージョンを ~/.pyenv/version
に記載する。
この中で system
はシステムにインストールされているデフォルトのバージョンを指す。
複数のパッチバージョンなどをインストールしているときは、ここで使うものを指定できる。
$ cat << 'EOF' > ~/.pyenv/version system 3.9.13 EOF
これで、python3.9
が実行できるようになった。
$ python3.9 -V Python 3.9.13
もちろん、先ほど ~/.pyenv/version
に書いた通り、システムの Python も引き続き使うことができる。
$ python3 -V Python 3.10.4
同様のやり方で複数のバージョンの Python をインストールできる。 ちなみに、Miniforge など Conda 系の実装も pyenv からインストールできるので便利。
いじょう。
まとめ
今回は pyenv を使って複数のバージョンの Python を Ubuntu にインストールする方法を紹介した。 なお、pyenv は Ubuntu だけでなく macOS など、色々な Unix 系の OS で利用できる。
また、Python の仮想環境の機能は pyenv の本体には組み込まれていない。 そのため pyenv-virtualenv プラグインを入れたり、自分で venv や virtualenv と組み合わせる必要がある。