当我apt update
在Ubuntu 18.04.6 LTS,这是我的公司用于托管 Netbox 的服务器,我遇到以下问题:
$ sudo apt update
Hit:1 http://azure.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://azure.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://azure.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease
Hit:5 https://packages.microsoft.com/ubuntu/18.04/prod bionic InRelease
Hit:6 http://security.ubuntu.com/ubuntu bionic-security InRelease
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'
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
我运行时遇到类似的问题neofetch
:
$ neofetch
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
我的一位同事告诉我运行这些并再试一次,但我遇到了同样的问题:
sudo apt-get remove command-not-found
sudo apt-get clean
sudo apt-get update
sudo apt-get install command-not-found
然后我去检查了这台服务器上安装了多少个 python 版本,我数了一下,有 4 个:
$ ls -ls /usr/bin/python*
0 lrwxrwxrwx 1 root root 9 Apr 16 2018 /usr/bin/python -> python2.7
0 lrwxrwxrwx 1 root root 9 Apr 16 2018 /usr/bin/python2 -> python2.7
3544 -rwxr-xr-x 1 root root 3628904 Nov 28 18:51 /usr/bin/python2.7
0 lrwxrwxrwx 1 root root 25 Jan 10 08:10 /usr/bin/python3 -> /etc/alternatives/python3
0 lrwxrwxrwx 1 root root 16 Oct 25 2018 /usr/bin/python3-config -> python3.6-config
4 -rwxr-xr-x 1 root root 1018 Oct 28 2017 /usr/bin/python3-jsondiff
4 -rwxr-xr-x 1 root root 3661 Oct 28 2017 /usr/bin/python3-jsonpatch
4 -rwxr-xr-x 1 root root 1342 May 1 2016 /usr/bin/python3-jsonpointer
4 -rwxr-xr-x 1 root root 398 Nov 15 2017 /usr/bin/python3-jsonschema
5356 -rwxr-xr-x 1 root root 5481816 Dec 7 01:11 /usr/bin/python3.10
4424 -rwxr-xr-x 2 root root 4526456 Nov 25 14:10 /usr/bin/python3.6
0 lrwxrwxrwx 1 root root 33 Nov 25 14:10 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
4424 -rwxr-xr-x 2 root root 4526456 Nov 25 14:10 /usr/bin/python3.6m
0 lrwxrwxrwx 1 root root 34 Nov 25 14:10 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
0 lrwxrwxrwx 1 root root 10 Oct 25 2018 /usr/bin/python3m -> python3.6m
0 lrwxrwxrwx 1 root root 17 Oct 25 2018 /usr/bin/python3m-config -> python3.6m-config
运行python3 --version
它返回Python 3.10.9
有人知道我该如何在不迁移托管应用程序的情况下解决此问题吗?那将是一场噩梦 :(
编辑:
我转而通过/usr/lib/python3/dist-packages
寻找并找到了文件,我将该文件重命名为,现在我可以运行但出现新的错误消息:apt_pkg
ls -la | grep "apt_pkg.cpython"
apt_pkg.cpython-36m-x86_64-linux-gnu.so
apt_pkg.so
apt update
$ sudo apt update && sudo apt upgrade
[sudo] password for admin-federico-dostuni:
Hit:1 http://azure.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://azure.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 http://azure.archive.ubuntu.com/ubuntu bionic-backports InRelease [83.3 kB]
Hit:4 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:5 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease
Hit:6 https://packages.microsoft.com/ubuntu/18.04/prod bionic InRelease
Fetched 172 kB in 1s (176 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up update-notifier-common (3.192.1.15) ...
Traceback (most recent call last):
File "/usr/lib/update-notifier/package-data-downloader", line 24, in <module>
import debian.deb822
File "/usr/lib/python3/dist-packages/debian/deb822.py", line 78, in <module>
class TagSectionWrapper(collections.Mapping):
AttributeError: module 'collections' has no attribute 'Mapping'
dpkg: error processing package update-notifier-common (--configure):
installed update-notifier-common package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
update-notifier-common
E: Sub-process /usr/bin/dpkg returned an error code (1)
答案1
因为该文件/usr/lib/update-notifier/package-data-downloader
,其第一行包含以下内容:
#!/usr/bin/python3
根据前面的信息,你的 python 是Python 3.10.9
,
并且 apt_pkg 是apt_pkg.cpython-36m-x86_64-linux-gnu.so
,这意味着它只匹配 python3.6,你可能需要执行以下操作:
sudo rm /usr/bin/python3
sudo ln -f /usr/bin/python3.6 /usr/bin/python3
确保python3 --version
是python3.6.x
运行更新命令进行测试,
sudo apt update
答案2
Ubuntu 22.04。
当我尝试执行此操作时,我不断收到警告和错误提示apt update
,详细信息如下
Fetched 16.8 kB in 1s (14.2 kB/s) sh: 1: /usr/lib/cnf-update-db: not found Reading package lists... Done W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://dl.google.com/linux/chrome/deb stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E88979FB9B30ACF2 W: Failed to fetch https://dl.google.com/linux/chrome/deb/dists/stable/InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E88979FB9B30ACF2 W: Some index files failed to download. They have been ignored, or old ones used instead. E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi' E: Sub-process returned an error code
原来是/usr/bin/python3
链接到了一个无效地址。当我用 检查 时ls -ls /usr/bin/python*
,有一条红线表示不可用。
我发现有用的是使用 重置此链接ln -s /usr/bin/pythonVERSIONAVAILABLE /usr/bin/python3
。
解决了。