TL;DR
-
sudo add-apt-repository ppa:deadsnakes/ppaがModuleNotFoundError: No module named 'apt_pkg'で失敗する人は/usr/bin/python,/usr/bin/python3のシンボリックリンクを書き換えていないか、aliasを張っていないか確認、元に戻すことで解決するかも
現象の前提
-
Ubuntu20.04onWindows10/WSL2 -
python3.8→3.9へのアップデート済み
# sudo apt update
# sudo apt install python3.9
現象
3.9→3.10にしようとしてリポジトリを追加しようとすると以下のエラーが発生
# sudo add-apt-repository ppa:deadsnakes/ppa
Traceback (most recent call last):
File "/usr/bin/add-apt-repository", line 12, in <module>
from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 28, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
原因は簡単で、python3.9にしたときに、pythonだけで起動してほしくて
$ sudo rm /usr/bin/python3
$ ln -s /usr/bin/python3.9 /usr/bin/python3
と勝手にシンボリックリンクを書き直していたからです。add-apt-repositoryが参照しているpython3の向き先が変わってしまいました。
/usr/bin/*はよほどのことがなければいじるな、という当たり前の原因でした。alias python /usr/bin/python3.9のような設定をしている人も同様の現象が起こるかもです。
シンボリックリンクを
$ sudo rm /usr/bin/python3
$ ln -s /usr/bin/python3.8 /usr/bin/python3
と戻してやると再現しなくなりました。その後、
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt install python3.10
でインストール完了。
(番外編)venvの作成に失敗する
以下のようになった。
$ python -m venv .venv
Error: Command '['/home/canada/work/contec/.venv/bin/python3.10', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
以下のようにpython-3.10-venvをインストールすれば解決する
$ sudo apt install python3.10-venv