Ubuntu 22.04 - ModuleNotFoundError:没有名为“apt_pkg”的模块

问题描述 投票:0回答:1

回溯(最近一次调用最后一次): 文件“/usr/lib/update-notifier/package-data-downloader”,第 29 行,位于

import apt_pkg

ModuleNotFoundError:没有名为“apt_pkg”的模块

dpkg:处理包 update-notifier-common 时出错(--configure): 已安装的 update-notifier-common 包安装后脚本子进程返回错误退出状态 1 dpkg:依赖性问题阻止更新通知程序的配置: update-notifier 依赖于 update-notifier-common (= 3.192.54);然而: update-notifier-common 包尚未配置。

dpkg:处理包更新通知程序时出错(--configure): 依赖性问题 - 未配置 dpkg:依赖性问题阻止了 ubuntu-desktop 的配置: ubuntu-desktop 依赖于 update-notifier;然而: 软件包更新通知程序尚未配置。

dpkg:处理软件包 ubuntu-desktop 时出错(--configure): 依赖性问题 - 未配置 dpkg:依赖性问题阻止配置 ubuntu-desktop-minimal: ubuntu-desktop-minimal 依赖于 update-notifier;然而: 软件包更新通知程序尚未配置。

dpkg:处理包 ubuntu-desktop-minimal 时出错(--configure): 依赖性问题 - 未配置 未写入批准报告,因为错误消息表明它是先前故障的后续错误。 未写入批准报告,因为错误消息表明它是先前故障的后续错误。 由于已达到 MaxReports,因此未写入批准报告 处理时遇到错误:

更新通知程序通用

更新通知程序

ubuntu-桌面

ubuntu-桌面-最小

E: 子进程 /usr/bin/dpkg 返回错误代码 (1)

我在运行时遇到上述错误: $ sudo apt-get install python3-apt --reinstall

请有人帮忙

python ubuntu
1个回答
0
投票

解决进度:

  1. 完整日志
[sudo] password for xxx: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up update-notifier-common (3.192.54.8) ...
Traceback (most recent call last):
  File "/usr/lib/update-notifier/package-data-downloader", line 29, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
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. 您有多少个 python(如果您有使用 python 和 Debian/Ubuntu 的经验,则会弹出答案。但我们将在下一阶段继续)
➜  ~ ls -alh /usr/bin/python*
lrwxrwxrwx 1 root root   19  4月  2 14:38 /usr/bin/python3 -> /usr/bin/python3.11
-rwxr-xr-x 1 root root 5.7M 11月 20 23:14 /usr/bin/python3.10
lrwxrwxrwx 1 root root   34 11月 20 23:14 /usr/bin/python3.10-config -> x86_64-linux-gnu-python3.10-config
-rwxr-xr-x 1 root root  22M 11月 20 23:14 /usr/bin/python3.10d
lrwxrwxrwx 1 root root   11 11月 20 23:14 /usr/bin/python3.10-dbg -> python3.10d
lrwxrwxrwx 1 root root   38 11月 20 23:14 /usr/bin/python3.10-dbg-config -> x86_64-linux-gnu-python3.10-dbg-config
lrwxrwxrwx 1 root root   35 11月 20 23:14 /usr/bin/python3.10d-config -> x86_64-linux-gnu-python3.10d-config
-rwxr-xr-x 1 root root 6.6M  8月 12  2022 /usr/bin/python3.11
lrwxrwxrwx 1 root root   34  8月 12  2022 /usr/bin/python3.11-config -> x86_64-linux-gnu-python3.11-config
-rwxr-xr-x 1 root root  29M  8月 12  2022 /usr/bin/python3.11d
lrwxrwxrwx 1 root root   11  8月 12  2022 /usr/bin/python3.11-dbg -> python3.11d
lrwxrwxrwx 1 root root   38  8月 12  2022 /usr/bin/python3.11-dbg-config -> x86_64-linux-gnu-python3.11-dbg-config
lrwxrwxrwx 1 root root   35  8月 12  2022 /usr/bin/python3.11d-config -> x86_64-linux-gnu-python3.11d-config
lrwxrwxrwx 1 root root   17  8月 18  2022 /usr/bin/python3-config -> python3.10-config
lrwxrwxrwx 1 root root   11  8月 18  2022 /usr/bin/python3d -> python3.10d
lrwxrwxrwx 1 root root   14  8月 18  2022 /usr/bin/python3-dbg -> python3.10-dbg
lrwxrwxrwx 1 root root   21  8月 18  2022 /usr/bin/python3-dbg-config -> python3.10-dbg-config
lrwxrwxrwx 1 root root   18  8月 18  2022 /usr/bin/python3d-config -> python3.10d-config
➜  ~ 
  1. 什么是 apt_pkg
➜  ~ apt search apt_pkg
Sorting... Done
Full Text Search... Done
python-apt-common/jammy-updates,jammy-updates,now 2.4.0ubuntu3 all [installed,automatic]
  Python interface to libapt-pkg (locales)

python-apt-dev/jammy-updates,jammy-updates 2.4.0ubuntu3 all
  Python interface to libapt-pkg (development files)

python-apt-doc/jammy-updates,jammy-updates 2.4.0ubuntu3 all
  Python interface to libapt-pkg (API documentation)

python3-apt/jammy-updates,now 2.4.0ubuntu3 amd64 [installed,automatic]
  Python 3 interface to libapt-pkg

python3-apt-dbg/jammy-updates 2.4.0ubuntu3 amd64
  Python 3 interface to libapt-pkg (debug extension)
  1. apt_pkg 提供的安装包是什么
➜  ~ dpkg -L python3-apt|grep apt_pkg          
/usr/lib/python3/dist-packages/apt_pkg-stubs
/usr/lib/python3/dist-packages/apt_pkg-stubs/__init__.pyi
/usr/lib/python3/dist-packages/apt_pkg.cpython-310-x86_64-linux-gnu.so

  1. 终于见到答案了
  • python3-apt 提供名为 apt_pkg 的内容 apt_pkg.cpython-310-x86_64-linux-gnu.so 位于 /usr/lib/python3/dist-packages/ 是 python 包 apt安装的路径。
  • 你需要注意步骤2第一行,python3链接到python3.11
  • ubuntu22.04 上默认的 python 版本是 3.10 (
    apt info python3 -a 
    )
  • 所以 apt 安装的所有这些 python 包 (
    python3-xxx
    ) 应该声明解释器二进制文件的路径是
➜  ~ head -n1 /usr/lib/update-notifier/package-data-downloader
#!/usr/bin/python3
  • 不同python的导入路径是什么
➜  ~ python3.10 -c "import sys;print(sys.path)"
['', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/ylinxin/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
➜  ~ python3.11 -c "import sys;print(sys.path)"
['', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/home/ylinxin/.local/lib/python3.11/site-packages', '/usr/local/lib/python3.11/dist-packages', '/usr/lib/python3/dist-packages']
  • 那么为什么python3.10可以导入但python3.11不能导入
➜  ~ sudo strace python3.10 -c "import apt_pkg" --trace=file 2>&1|grep apt_pkg
execve("/usr/bin/python3.10", ["python3.10", "-c", "import apt_pkg", "--trace=file"], 0x7fffa5614d38 /* 32 vars */) = 0
newfstatat(AT_FDCWD, "/usr/lib/python3/dist-packages/apt_pkg.cpython-310-x86_64-linux-gnu.so", {st_mode=S_IFREG|0644, st_size=347096, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3/dist-packages/apt_pkg.cpython-310-x86_64-linux-gnu.so", O_RDONLY|O_CLOEXEC) = 3
➜  ~ sudo strace python3.11 -c "import apt_pkg" --trace=file 2>&1|grep apt_pkg
execve("/usr/bin/python3.11", ["python3.11", "-c", "import apt_pkg", "--trace=file"], 0x7ffd5d00c998 /* 32 vars */) = 0
write(2, "ModuleNotFoundError: No module n"..., 47ModuleNotFoundError: No module named 'apt_pkg'

  1. 因为它的名字是310
apt_pkg.cpython-310-x86_64-linux-gnu.so
-------|-------|---|------|---------|
module  module  py   cpu    os type
name    type(   ver  arch
        C code)

参考资料如下:
https://peps.python.org/pep-3149/
https://peps.python.org/pep-0425/

➜  ~ python3.10 -c "import sysconfig;print(sysconfig.get_config_var('MULTIARCH'))"
x86_64-linux-gnu
➜  ~ python3.10 -c "import sysconfig;print(sysconfig.get_config_var('SOABI'))"
cpython-310-x86_64-linux-gnu
➜  ~ python3.10 -c "import sysconfig;print(sysconfig.get_config_var('EXT_SUFFIX'))"
.cpython-310-x86_64-linux-gnu.so

© www.soinside.com 2019 - 2024. All rights reserved.