更新管理器的问题:Ubuntu 13.10 中没有名为“apt_pkg”的模块,在 /usr/local/lib 上安装了 Python 3.4

use*_*925 63 update-manager apt python3 13.10

我对 Ubuntu 比较陌生,我正在尝试在 Ubuntu 13.10 上运行更新管理器。我得到:

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'
Run Code Online (Sandbox Code Playgroud)

据我所知,这是一个与我应该安装 python3.4 的事实有关的问题。我在 中安装了它/usr/local/lib,但总是遇到相同的错误。这样我什至无法升级到 Ubuntu 14.04。

小智 54

apt_pkg使用以下方法重新安装:

sudo apt-get install --reinstall python3-apt
Run Code Online (Sandbox Code Playgroud)

该错误主要是因为库中apt_pkg.cpython-35m-x86_64-linux-gnu.so不存在/usr/lib/python3/dist-packages.

删除并重新安装应该会有所帮助。

  • 几乎总是最好使用 `sudo apt install --reinstall &lt;package-name&gt;` 一步重新安装软件包,因为这样可以避免计算和删除依赖项(并标记要删除的软件包)。请注意,删除包*不*总是一个可逆的过程;例如,如果被要求,APT 将删除自身或其依赖项!因此,`--reinstall` 标志比 `remove` 后跟 `install` 安全得多。`remove` 命令本身不会删除包的配置文件,因此与 `install --reinstall` 相比没有任何好处。 (18认同)
  • 我不得不使用`sudo apt remove --purge python3-apt`然后使用`sudo apt install python3-apt`,奇怪的是在重新安装后,78个真正不相关(我真的不知道)的包被标记为没有不再需要并且可以是`autoremove`..我有点担心但至少它解决了我的问题哈哈 (6认同)
  • 这个答案应该根据@Zanna 的建议进行更新,删除 python3-apt 将删除大量依赖项,并且可能会吓到某人,更不用说搞乱他们的系统了。 (5认同)

小智 31

update-alternatives  --set python3  /usr/bin/python3.6
Run Code Online (Sandbox Code Playgroud)

  • 更新 python 的替代品有时可能会破坏事情。 (3认同)
  • `update-alternatives --set python3 /usr/bin/python3.8` 解决了我在 Ubuntu 20.04 上的问题 (3认同)
  • 我使用了 `update-alternatives --set python3 /usr/bin/python3.5` 并且它起作用了。python3 已经指向我系统上的`python3.6`。 (2认同)

小智 22

对我来说,以下步骤有效:

cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)

原始解决方案在这里:https : //stackoverflow.com/questions/13708180/python-dev-installation-error-importerror-no-module-named-apt-pkg/36232975#36232975

  • 正如在“原始解决方案”的评论中提到的,对我来说这有效:`sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so`。`35` (python 3.5) 版本是安装的,而不管你运行的是 python 3.x 的特定子版本。谢谢! (3认同)

小智 15

以下解决方案对我有用:

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
Run Code Online (Sandbox Code Playgroud)

如果您收到一条错误消息,指出符号链接的级别过多,如下所示:

cp: failed to access '/usr/lib/python3/dist-packages/apt_pkg.so': Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)

然后您需要简单地取消链接 apt_pkg.so 文件。使用以下命令:

sudo unlink apt_pkg.so
Run Code Online (Sandbox Code Playgroud)

然后使用命令

sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 谢谢,这有帮助。我没有使用 `cp`,而是使用了 `ln -s`。所以`sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so`。 (2认同)

Dav*_*ood 8

在我升级到 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
Run Code Online (Sandbox Code Playgroud)

现在我的 Python 3.8 和 add-apt-repository 再次停止工作。我发现了另一个相关的问题这个答案对我有用。看起来预期的文件名现在只是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
Run Code Online (Sandbox Code Playgroud)

新的预期文件名是apt_pkg.so有希望的。希望这意味着我们不必每次出现新的 Python 小版本时都继续这样做!


小智 8

对我来说,这做到了:

apt-get remove  python3-apt
apt-get install python3-apt
Run Code Online (Sandbox Code Playgroud)

这个问题其实和这个类似: apt-get crashed: No module named debian.deb822

  • 它删除了我在 zorin OS 上的一半系统软件,并且安装后无法恢复它们 (7认同)
  • 危险又愚蠢。不要这样做。大量的系统软件依赖于 python3-apt ,包括 apt 本身。您将无法再次重新安装,因为 apt 命令会出错。 (3认同)

Cha*_*een 5

如果您尝试将 13.10 升级到 14.04,请尝试按照以下说明进行操作。如果您只是尝试从命令行更新当前系统,请打开终端并键入以下内容:

sudo apt-get update
sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)


小智 5

对我来说,问题是我在 python3.6 旁边安装了 python3.7 并将其设置为默认值。

我手动运行以下命令:

ln -s /usr/bin/python3.6  /usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

所以 python3 现在指向 python 的正确版本...解决了这个问题。

  • @user1330974显然,只是强制符号链接起作用:`ln -sf /usr/bin/python3.6 /usr/bin/python3` (2认同)