ModuleNotFoundError 找不到名为 apt_pkg 的模块。

10
我正在尝试使用命令添加一个仓库
 sudo add-apt-repository ppa:gezakovacs/ppa

以下是完整的错误信息 -

    Traceback (most recent call last):
File "/usr/bin/add-apt-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/add-apt-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'

出现了上述错误。

我在Xubuntu 16.04上安装了Python2、Python3.5和Python3.6。 这会导致任何问题吗???


您的问题可能更适合在 https://askubuntu.com/ 上提问。 - user707650
不过首先,你有一个文件 /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so 吗? - user707650
谢谢。找到问题了。我的Python3链接到了python3.6,但当更改为3.5.2后就开始工作了。也许Python 3.6还没有完全支持。 - user1184294
这很奇怪,因为一开始它就不应该以那种方式链接。 - user707650
是的,Python 3.6 可能在系统级别上不受支持,因为系统应该是稳定的,因此应坚持使用它最初启动的主要和次要版本。如果您想安装和使用 Python 3.6(或一个月左右的 3.7 版本),请将其安装在 /usr/local 中。 - user707650
4个回答

12

这很可能是因为您以一种奇怪的方式切换了Python版本。您是否有 /usr/lib/python3/dist-packages/apt_pkg.so 这个文件?如果您删除了某个Python版本,它可能会丢失。

对我有效的答案来自askubuntu论坛

ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.so

10

如果您查看/usr/bin/add-apt-repository,它会说

#!/usr/bin/python3

在顶部。如果您更新了新的python(例如dist有3.5但您安装了3.7),您的/usr/bin/python3指向一个没有apt_pkg的Python。

您可以暂时编辑/usr/bin/add-apt-repository指向

#!/usr/bin/python3.5

请插入您的发行版中的 Python 版本。


如果我没有/usr/bin/add-apt-repository是什么意思? - My Code Made Me Suicidal
如果我没有/usr/bin/add-apt-repository是什么意思? - undefined
1
@YourCodeMadeMeSuicidal 你需要安装 software-properties-common 软件包。 - laktak

6

我曾遇到类似的问题,在执行apt-get upgrade时...问题在于apt-get一直尝试使用python2.7,但符号链接却指向python3.4:

debian:/usr/bin# cat /etc/debian_version
8.10
debian:/usr/bin# ll /usr/bin/python
lrwxrwxrwx 1 root root 18 Feb 26 17:02 /usr/bin/python -> /usr/bin/python3.4

通过创建一个新的符号链接来解决问题。
debian:/usr/bin# rm /usr/bin/python
debian:/usr/bin# ln -s /usr/bin/python2.7 /usr/bin/python

4
我曾经用apt-add-repository解决过类似的问题,但这一次我不得不将我的python3重新链接到python3.5而不是3.6。有些概念需要注意。 - Philip

-3

为特定版本的Python安装python-dev模块:

sudo apt install python3.6-dev

不幸的是,那并没有改变任何事情 :/ - xeruf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接