Ubuntu18.04でpython3のデフォルトを3.6から3.8に変更したらaptが壊れた話
まとめ
Ubuntu18.04で python3 パッケージをインストールするとデフォルトでは python3.6 が入ります。
ただ諸事情で新しいバージョンを使いたくなったので、python3.8 パッケージをインストールして、 update-alternativesを使って python3 コマンドを使った際に呼び出されるバージョンを変更してみたところ、後述のようにaptが壊れてしまいました。
デフォルト以外バージョンのpythonを使いたいときは、おおちゃくせずにpyenvとかを使いましょうという教訓。
詳細
前述のようにpython3のバージョンを変えて使っていたら、以下のように「apt_pkgモジュールが無いよ。」とaptに怒られました。
$ sudo apt update
中略
Traceback (most recent call last):
File "/usr/lib/cnf-update-db", line 8, in <module>
from CommandNotFound.db.creator import DbCreator
File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 11, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
後略
というわけで、 python3-apt をインストールしたら以下のようにエラーが...
$ sudo apt install python3-apt 中略 Setting up python3-apt (1.6.5ubuntu0.3) ... /usr/lib/python3.8/subprocess.py:838: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used self.stdin = io.open(p2cwrite, 'wb', bufsize) 後略
どうやら標準パッケージである io の挙動が変化したらしい?
雑にpyenvを使うとコンパイルに時間がかかって面倒だったので update-alternativesを使いましたが、
おとなしくpyenvを使うことにして問題を回避しました。