update-manager的问题:在Ubuntu 13.10中没有名为'apt_pkg'的模块,已在/ usr / local / lib上安装了Python 3.4


29

我是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。

Answers:


32

apt_pkg使用以下命令重新安装:

sudo apt-get install --reinstall python3-apt

该错误主要是由于中apt_pkg.cpython-35m-x86_64-linux-gnu.so没有库/usr/lib/python3/dist-packages

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


14
几乎总是最好使用一步来重新安装软件包sudo apt install --reinstall <package-name>,因为这样可以避免计算和删除依赖项(并标记要删除的软件包)。请注意,删除软件包并不总是可逆的过程。例如,如果要求,APT将删除自身或它的依赖项!--reinstall因此,该标志比remove其后要安全得多install。该remove命令本身不会删除程序包的配置文件,因此不会带来任何好处install --reinstall
赞纳

4
这个答案应该通过@Zanna的建议进行更新,删除python3-apt会删除大量的依赖关系,并且可能使人不满意,更不用说弄乱他们的系统了。
alkanen

因此,请卸载apt-package,sudo dpkg -r --force-depends apt-package而仅卸载apt-package,而不卸载其任何依赖项。
卡雷尔

12

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

cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so

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


1
作为在在我的一个评论“原液”,提到这个工作:sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so。该35(蟒蛇3.5)版本是无论蟒蛇3.X的你正在运行的特定子版本有什么安装。谢谢!
fwc

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

3
更新python的替代方法有时可能会破坏事情。
Kulfy

1
我用过了update-alternatives --set python3 /usr/bin/python3.5,效果很好。python3已经指向python3.6我的系统。
Desik

2

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

sudo apt-get update
sudo apt-get dist-upgrade

谢谢。我已经尝试过了,但是没有用。我现在再次尝试,在apt-get更新之后,收到警告W:无法获取bzip2:/var/lib/apt/lists/partial/it.archive.ubuntu.com_ubuntu_dists_saucy-updates_main_source_Sources哈希总和不匹配
user291925

K-更新源出现问题。我看过一些有关如何解决该问题的线索
Charles Green

谢谢!我尝试过,但运行时仍然遇到相同的错误update-manager
user291925 2014年

K-不用进行更广泛的网络搜索就用尽了我的所有可能性。祝好运!
查尔斯·格林

2

我设法通过复制来解决这个问题apt_pkg.cpython-34m-i386-linux-gnu.so,以/usr/lib/python3/dist-packages/从运行Ubuntu LTS 14.04另一个桌面。我尝试了几乎所有在Internet上发现的可能性,例如清除python安装程序,然后重新安装,清除损坏的升级文件等,但最终都没有成功。


1

以防万一,这终于解决了这个问题,这显然是由python版本冲突引起的,方法是重定向链接python3,然后将其重定向到正确的python版本:

sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.4

您可能需要输入正确的python版本,该版本与

python3 -V

因此,您删除了一个版本3.4
IggyPass '18

尝试了一下,发现它使情况变得更糟。无法推荐。
MERose

1

只是一个建议:我避免在/ usr / local上安装“我的” python,但是每个python版本都有一个专用目录(例如/ opt),并且我在用户帐户上使用虚拟环境来使用所需的python,这是由我的.profile激活的

通过这种方法,您将始终避免更改python系统预期的配置和依赖关系。

好吧,我知道,您的情况为时已晚,但是...


1

对我来说,问题是我在python3.6旁边安装了python3.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。如果我做ls我的/usr/bin/python*,我有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

1
@ user1330974显然是,仅强制了符号链接起作用了:ln -sf /usr/bin/python3.6 /usr/bin/python3
dallonsi

1
@dallonsi谢谢。我没有进一步研究,但是我将使用您的方法。:)
user1330974 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.