模块未找到错误:没有名为'apt_pkg'的模块。

我在Ubuntu 16.4上运行以下命令:
sudo add-apt-repository ppa:noobslab/apps
针对以下问题: 如何在Ubuntu 16.04上安装PlayOnLinux 然后出现以下错误:
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'

感谢您的帮助

2尝试重新安装python3-software-properties软件包。它提供了缺失的模块。 - user535733
谢谢。如何重新安装? - Mostafa Norzade
如果你不知道如何重新安装一个软件包,那么你可能还没有准备好管理PPA,所以请确保你的数据有良好的备份。打开终端:sudo apt install --reinstall <软件包名称> - user535733
谢谢。我运行了sudo apt install --reinstall python3-software-properties,但问题仍然存在。 - Mostafa Norzade
1尝试重新安装另外两个软件包:sudo apt-get install --reinstall python-apt python3-apt - N0rbert
@N0rbert 谢谢。但是我运行了这个,问题仍然存在。 - Mostafa Norzade
请在问题中添加 which pythonwhich python3 的输出结果。 - N0rbert
@N0rbert。which python: /usr/bin/pythonwhich python3: /usr/bin/python3 - Mostafa Norzade
经过一番搜索,我发现问题在于系统试图找到适用于最新版本的Python的apt_pkg文件,而不是当前版本。因此,重命名相关文件似乎是一个解决方法。详细信息请参考https://stackoverflow.com/questions/13708180/python-dev-installation-error-importerror-no-module-named-apt-pkg - shantanu pathak
我找到了这个答案,对我有用: https://stackoverflow.com/a/44612200/1038565 - Beto Aveiga
8个回答

很晚了,但可能对其他人有帮助。
> cd /usr/lib/python3/dist-packages
> sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

26我改变了这个答案,使用了一个符号链接,这种方法似乎也起作用:ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.so - Gibbsoft
2use sudo in front - Magnus Melwin
4得到一个错误 bash: /usr/lib/python3/dist-packages#: 没有这个文件或目录 - Paritosh Mahale


3谢谢。现在我遇到了以下错误:sudo: add-apt-repository: command not found - Mostafa Norzade
我遇到了完全相同的问题。有什么解决方法吗? - David Simic
1请在此之后执行sudo apt install software-properties-common命令,以解决sudo: add-apt-repository: command not found错误。 - WaughWaugh
12删除python3-apt是相当危险的,因为它已经删除了一些重要的包,比如ubuntu-desktop和xorg。 - David Medinets
4请务必注意有关移除python3-apt的危险警告。 - user6273920
1@DavidMedinets 如果我这么蠢还做了那件事,我该怎么办? :facepalm: - M. Volf
如果你最后得到的是 sudo do-release-upgrade sudo: do-release-upgrade: command not found,那么可以使用 sudo apt install ubuntu-release-upgrader-core 来重新安装。 - Edward Moffett
我们需要反对这个答案。我刚刚按照那个建议搞乱了我的系统! - mystery_doctor

如果你更新了一个新的Python(例如,发行版是3.5,但你安装了3.7),那么你的`/usr/bin/python3`指向的Python没有`apt_pkg`。
编辑`/usr/bin/add-apt-repository`它说。
#! /usr/bin/python3

然后编辑/usr/bin/add-apt-repository,将其指向 #! /usr/bin/python3.5 (如果是16.04,请插入您的发行版Python版本3.5;如果是18.04,请插入3.6版本)

谢谢,这解决了我的错误! - Laban
检查我的Ubuntu版本的原始Python版本对我来说非常关键。 - hrrrrrr5602
我不建议这样做;相反,将/usr/bin/python3恢复到之前的状态。我很确定其他系统脚本使用/usr/bin/python3apt_pkg,所以这只是一个权宜之计。 - undefined

apt_pkg.so 处创建一个符号链接,该链接指向文件 apt_pkg.cpython-35m-x86_64-linux-gnu.so
cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

1是的,谢谢。再次感谢你。 - WestCoastProjects

这是对我在最新的apt_pkg_cpython软件包上在Ubuntu18.04上工作的解决方案:
cd /usr/lib/python3/dist-packages/
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
sudo apt-get update

唯一对我有效的方法是卸载Python 3.5,然后重新安装apt工具。
sudo apt remove python3.5*
sudo apt install python3-apt
sudo apt install software-properties-common

以下是我使用的方法。首先检查目标apt_pkg库:
ls -l /usr/lib/python3/dist-packages/apt_pkg*

应该返回以下内容:
/usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so

在这里,35代表着python的版本。将此版本设置为python3的默认版本。
sudo update-alternatives --set python3 /usr/bin/python3.5

解决这个问题,去除各种选择。
sudo update-alternatives --remove-all python3

那么

sudo ln -sf /usr/bin/python3.6 /usr/bin/python3