状況によってPythonのバージョンを切り替えたくなるので、その方法のメモ。
Ubuntu上にもデフォルトでPython入っているのですが、その環境を壊したくない。というのもあります。
最終的にはvenvでの仮想環境単位でバージョンを切り替えます。
旧Pythonのインストール
動作中のPythonのバージョンを調べてみます。
python -V
3.12.3です。知らぬ間に12が出てました。
aptから旧バージョンがインストールできるかどうか調べます。aptでインストールできるpython3.*をlistオプションで調べます。
3.12.3系しかありません。ちなみにこのnoble-ってのはUbuntuのバージョンで24.04はNoble Numbatだそうです。
なのでaptで入れられるソフトを増やすために、aptで引っ張ってくるサーバを増やします。
software-properties-commonという手段?プログラム?を使います。こいつはaptで入れられます。
とはいえすでにインストールされていたようです。
こいつに対して、レポジトリを追加します。
sudo add-apt-repository ppa:deadsnakes/ppa
これでよいそうです。
すると先ほど3.12系しかなかったPythonのバージョンがずらっと増えました。
これでaptを使って古いバージョンも入れられます。では晴れて旧3.11系を入れます。どうも-venv付で入れないとvenvが使えないようなので、
sudo apt install -y python3.11-venv
でインストールします。ちなみに-yは途中のYes/noをYesで回避するためのオプションです。
めでたくインストールできました。この環境に2つの異なるバージョンのPythonが入りました。
/binの下にバージョン番号付きで入っていることも確認できました。
update-alternatives
異なるバージョンのソフト切り替えでちょっと調べるとすぐ出てくるのがこのupdate-alternatives。
これはもともとPythonに限らず、システムに複数のプログラムのバージョンをが存在する際にそれらを切り替えることを目的とした手段のようです。
今回はこの方法を試しました。まずこのupdate-alternativesで
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.12 2
と打って紐づけしてやります。多分紐づけてるんだと思う。
ちなみにオプションの意味は
–install link name path priority
だそうでusr/binのpythonをpythonって名前で、usr/bin/python3.xとpriorityで紐づけてね。って言ってるんだと思います。
その後どっちを使うかは
sudo update-alternatives --config python
で切り替えられます。ここで3.11に切り替えてバージョンを確認すると確かに切り替わっていることが確認できます。
ただpythonに限れば、バージョン切り替えはpyenvって手段もあるようです。詳細は調べてません。
Pythonのバージョンを指定してvenv
pythonの仮想環境を作ります。コマンドはvenv。普通に作ると上記のように切り替えられたバージョンで作られてしまうのだと思いますが、今回は素の状態ではv3.12で、v3.11を指定して環境を作ってみます。
python3.11 -m venv XXX
なんかこれでよさそうです。activateさせた後確かに3.11になってそうです。
ちなみにバージョンを指定せずに
python -m venv XXX
をしたときは環境作成時アクティブだったバージョンというわけでなく、使用時のalternativesで指定されているバージョンになるみたいで、これを切り替えるとその環境のバージョンも切り替わっちゃってるように見えます。
なのでバージョン固定したければ環境作る時に明示的に指定する必要がありそう。指定しとけば間違いない。
コメント