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