「車輪の再実装」って言葉が好き(実践はできてない)

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を使うことにして問題を回避しました。