前置き
急にadd-apt-repository
が動かなくなった。
エラーメッセージ
sudo apt-add-repository ppa:ansible/ansible -y
Traceback (most recent call last):
File "/usr/bin/apt-add-repository", line 11, in <module>
from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 27, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import impl as packaging
File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Original exception was:
Traceback (most recent call last):
File "/usr/bin/apt-add-repository", line 11, in <module>
from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 27, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
- apt_pkgというモジュールが見つからなかった
- python3で動いている
ということがエラーメッセージからわかる。
また、ここから、「ちょっと前に入れたPython3.6が悪さをしてるのでは」という推測を立てた(当時のデフォルトはPython3.5)。
apt_pkgモジュールの捜索
調べてみると、/usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so
というファイルは存在していた。
sys.path
にも/usr/lib/python3/dist-packages/
は入っているみたいだし、import apt_pkg
とすればこれが読み込まれるはず。
なぜ読み込まれないのか考えてみた。
35m
という部分が気になった。
Python3.5
を表してそう。
Python3.6用に移植
ということで、Python3.6
用の名前でシンボリックリンクを張ってみた。
cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
動いた
sudo apt-add-repository ppa:ansible/ansible -y
gpg: keyring `/tmp/tmpsynejl3d/secring.gpg' created
gpg: keyring `/tmp/tmpsynejl3d/pubring.gpg' created
gpg: requesting key 7BB9C367 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpsynejl3d/trustdb.gpg: trustdb created
gpg: key 7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK
エピローグ
/usr/bin/python -> /usr/bin/python3.6
/usr/bin/python3 -> /usr/bin/python3.6
になっていたので、
sudo rm -rf /usr/bin/python
sudo ln -s /usr/bin/python3.5 /usr/bin/python
かもしくは
sudo rm -rf /usr/bin/python3
sudo ln -s /usr/bin/python3.5 /usr/bin/python3
としても動きそう(未確認)。