在Ubuntu 13.10上使用update-manager时出现问题:找不到名为'apt_pkg'的模块,尽管已经在/usr/local/lib安装了Python 3.4。

我对Ubuntu还比较新,正尝试在Ubuntu 13.10上运行update-manager。我遇到了以下问题:

jacopo@jacopo-laptop:~$ update-manager 
Traceback (most recent call last):
  File "/usr/bin/update-manager", line 28, in <module>
    from gi.repository import Gtk
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 27, in <module> from ._gi import _API
ImportError: No module named 'gi._gi'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 64, 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 20, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 21, in <module>
import apt_pkg
ImportError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
File "/usr/bin/update-manager", line 28, in <module>
from gi.repository import Gtk
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 27, in <module>
from ._gi import _API
ImportError: No module named 'gi._gi'

据我所了解,这个问题与我应该安装Python3.4有关。我将其安装在/usr/local/lib目录下,但是我始终遇到相同的错误。这样一来,我甚至无法升级到Ubuntu 14.04。
19个回答

重新安装 apt_pkg,使用以下命令:
sudo apt-get install --reinstall python3-apt

错误主要是因为库apt_pkg.cpython-35m-x86_64-linux-gnu.so/usr/lib/python3/dist-packages中不存在。
尝试移除并重新安装应该会有帮助。

22最好的做法几乎总是使用一步完成重新安装软件包,命令为sudo apt install --reinstall <package-name>,这样可以避免计算和删除依赖项(以及标记要删除的软件包)。请注意,删除软件包并不总是可逆的过程;例如,如果要求,APT将删除自身或其依赖项!因此,--reinstall标志比remove后跟install更安全。单独使用remove命令不会删除软件包的配置文件,因此与install --reinstall相比没有任何好处。 - Zanna
6这个答案应该根据@Zanna的建议进行更新,删除python3-apt将会删除大量依赖项,并可能吓坏某些人,更不用说搞乱他们的系统了。 - alkanen
因此,请使用 sudo dpkg -r --force-depends apt-package 以卸载 apt-package,但不会卸载它的任何依赖项。 - karel
11我不得不使用sudo apt remove --purge python3-apt然后sudo apt install python3-apt,奇怪的是,在重新安装之后,有78个完全无关(我也不太清楚)的软件包被标记为不再需要,并可以进行autoremove。我有点担心,但至少解决了我的问题哈哈。 - Kenivia
1@Kenivia 我试过那个命令,但立刻中止了 - 它差点删除了我的一半桌面。我猜这就是为什么你也有那么多不再需要的软件包的原因。 - xeruf
我有/usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so,但是出现了错误 - 重新安装没有改变任何东西。 - xeruf
@Xerus 在我的情况下,我有错误和正确的软件包位置:ls /usr/lib/python3/dist-packages/apt_pkg.* /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so - loretoparisi

update-alternatives  --set python3  /usr/bin/python3.6

6更新Python的替代方案有时可能会导致一些问题。 - Kulfy
2我使��了update-alternatives --set python3 /usr/bin/python3.5,它成功了。在我的系统上,python3已经指向了python3.6 - Desik
这正是对我起作用的方法。我刚刚按照一份关于如何在Ubuntu 18.04上更新Python 3的指南进行操作,结果我的apt-get命令无法工作了。真没想到会发生这种情况。 - fIwJlxSzApHEZIl
它有效了,只需使用sudo。 - ahmed galal
我想将Python 3.9设置为我的默认版本。 - Heath Mitchell
3在Ubuntu 20.04上,update-alternatives --set python3 /usr/bin/python3.8解决了我的问题。 - umitu

以下解决方案对我起了作用:
cd  /usr/lib/python3/dist-packages
ls -la /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

如果你收到一个错误消息,显示"太多层符号链接",如下所示:
cp: failed to access '/usr/lib/python3/dist-packages/apt_pkg.so': Too many levels of symbolic links

然后,您只需要取消链接apt_pkg.so文件。请使用以下命令:
sudo unlink apt_pkg.so

然后使用命令
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

希望这能帮到你!

7谢谢,这很有帮助。我没有使用cp命令,而是使用了ln -s命令。所以我运行了sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so - erwaman
谢谢。对我很有效。 - Thang Nguyen
谢谢。sudo cp apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so 对我有用。 - Astrid A. Olave H.


4如在“原始解决方案”的评论中提到,对我来说这个方法有效:sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so。无论你使用的是哪个特定的 Python 3.x 子版本,安装的都是 35(Python 3.5)版本。谢谢! - fred271828
1我记得当我升级到Python 3.6或3.7时,这个方法对我有效,但现在我使用的是Python 3.8,预期的文件名似乎已经改为apt_pkg.so。请参考https://askubuntu.com/a/1154616/725987。 - Dave Yarwood


7它在Zorin OS上刪除了我的系統軟件的一半,重新安裝也無法恢復它們。 - DaniyalAhmadSE
这解决了问题,我将默认的Python/Pip 3.8替换为Python/Pip 3.7,结果损坏了默认的Pip,在Ubuntu 20上导致了这个错误。 - Ibrahim.H
3危险而愚蠢。不要这样做。许多系统软件都依赖于python3-apt,包括apt本身。如果出现错误,你将无法重新安装。 - Rugnir
1在Plesk上使用了这个,现在什么都不起作用了。 - Atif Bashir
我将此更改为重新安装而不是卸载安装,以便它不会删除任何东西(包括依赖项),它只是安全地重新安装软件包。 - mchid

这个解决方案曾经对我有用,当我升级到Python 3.6或3.7并且add-apt-repository停止工作时。
cd /usr/lib/python3/dist-packages
# where 35m is the file you have and 38m corresponds to your Python version
sudo ln -s apt_pkg.cpython-{35m,38m}-x86_64-linux-gnu.so

现在我有Python 3.8,但add-apt-repository又停止工作了。我找到了另一个相关的SO问题,其中包含这个答案对我有效。看起来预期的文件名现在只是apt_pkg.so,所以你需要这样做:
cd /usr/lib/python3/dist-packages
# where 35m is the file you have
sudo ln -s apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

新的预期文件名只是 apt_pkg.so 这一事实是令人鼓舞的。希望这意味着每次有新的 Python 次要版本时,我们就不必再重复这个过程了!

对我有用,谢谢 :) - Muhammad Adeel Shoukat
@dave-yarwood 救了我的一天。 “新的预期文件名只是 apt_pkg.so。” - undefined

对我来说的问题是我在Python 3.6旁边安装了Python 3.7并将其设置为默认版本。
我手动运行以下命令:
ln -s /usr/bin/python3.6  /usr/bin/python3

现在python3指向了正确的Python版本...问题得到解决。


1我也遇到了这个问题,因为我在Ubuntu 18中更新到了Python3.7。但是当我像你那样创建符号链接时,我得到了ln: failed to create symbolic link '/usr/bin/python3': File exists的错误。如果我在我的/usr/bin/python*目录下执行ls命令,我会看到python3python3.6python3.6mpython3.7python3.7mpython3m。如果我执行sudo update-alternatives --config python3命令,我会看到*0 /usr/bin/python3.7 2 auto mode1 /usr/bin/python3.6 1 manual mode2 /usr/bin/python3.7 2 manual mode。谢谢。 - user1330974
也许你需要删除已经存在的链接文件,或将其重命名为.old并创建自己的链接。 - M.Hefny
@user1330974 你最终解决了问题吗?我也遇到了同样的问题。 - dallonsi
2@user1330974 显然,只是强制创建了符号链接: ln -sf /usr/bin/python3.6 /usr/bin/python3 - dallonsi
1@dallonsi 谢谢。我没有深入研究,但我会采用你的方法。 :) - user1330974
1你应该优先选择update-alternatives,它能以更安全的方式完成这个任务。 - xeruf
update-alternativeserror: no alternatives for python3时失败,这是解决的方法。对我来说,在升级Ubuntu 16.04时,使用python3.5有效。 - Xvolks

如果你想将13.10升级到14.04,请尝试按照这些说明进行操作。如果你只是想通过命令行更新当前系统,请打开终端并输入以下内容:
sudo apt-get update
sudo apt-get dist-upgrade

谢谢。我已经尝试过了,但没有成功。我现在又试了一次,在执行apt-get update之后,出现了警告:W: Failed to fetch bzip2:/var/lib/apt/lists/partial/it.archive.ubuntu.com_ubuntu_dists_saucy-updates_main_source_Sources Hash Sum mismatch。 - user291925
K - 你在更新源方面遇到了问题。我看到了一些关于如何修复这个问题的帖子。下面的链接似乎是对你的问题一个很好的匹配:http://askubuntu.com/questions/41605/trouble-downloading-updates-due-to-a-hash-sum-mismatch-error - Charles Green
谢谢!我尝试过了,但是当运行update-manager时仍然出现相同的错误。 - user291925
K - 这差不多是我在没有更广泛的网络搜索的情况下所能做到的了。祝你好运! - Charles Green

我已经成功解决了这个问题,方法是从另一台运行Ubuntu 14.04 LTS的桌面电脑上复制了apt_pkg.cpython-34m-i386-linux-gnu.so文件到/usr/lib/python3/dist-packages/目录下。我尝试了几乎所有在互联网上找到的可能性,比如清除Python安装并重新安装,清理损坏的升级文件等,但都没有成功。

Python是狗屎。 - Anthony

我在升级到Python 3.9后遇到了同样的问题,解决方法是重新创建符号链接'/usr/bin/python3',将其指向新的位置。
唯一对我有效的解决方案来自第一个答案下@Kenivia的评论:sudo apt remove --purge python3-apt,然后sudo apt install python3-apt 这解决了错误,但卸载了我的Ubuntu软件中心。不过这没什么大不了的,因为我只需使用sudo apt install ubuntu-software重新安装它,现在一切都正常运行。
编辑:此后仍然存在一些问题(更新管理器出错且无法启动)。所以我不得不返回并恢复符号链接/usr/bin/python3,将其指向原始的python3.6位置。这解决了所有问题。