Gnome终端无法启动


34

我只是尝试在Ubuntu 16.04系统上安装python 3.6,现在无法从启动器或从中运行终端Ctrl + Alt + T。我尝试gnome-terminal从XTerm 运行,并收到以下消息:

Traceback (most recent call last):
  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi'
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/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
  File "/usr/lib/python3/dist-packages/gi/__init__.py", line 42, in <module>
    from . import _gi
ImportError: cannot import name '_gi'

如何解决此错误?

还应注意:

  • 我的gnome-terminal文件现在是python脚本。
  • gnome-terminal.real文件将按预期打开终端。
  • python3.5 gnome-terminal 将按预期方式打开终端。

Answers:


34

symlink可能/usr/bin/python3指向python3.6,但它不应该指向。通过运行以下命令对其进行修复:

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

4
补充一点:这是由python3-apt软件包中的错误引起的;有一个关于它的Launchpad中的bug开在这里
乔什(Josh)

应在哪个路径上创建符号链接?在修正了终端错误之后,pyenv是不是更好的选择?
josircg

@josircg:不确定我是否理解您的路径问题。符号链接和可执行文件都位于/usr/bin。可能会有更好的选择。如果您知道任何答案,请写下自己的答案。
Gunnar Hjalmarsson

1
@GunnarHjalmarsson我在哪里可以运行这些命令,我​​的终端没有打开。
Shoyeb Sheikh

1
@ShoyebSheikh:也许您有XTerm?
Gunnar Hjalmarsson

20

您不必将Python3指向python3.5,只需运行以下命令:

cd /usr/lib/python3/dist-packages/gi/
sudo cp _gi.cpython-35m-x86_64-linux-gnu.so _gi.cpython-36m-x86_64-linux-gnu.so
sudo cp _gi_cairo.cpython-35m-x86_64-linux-gnu.so _gi_cairo.cpython-36m-x86_64-linux-gnu.so

这到底是做什么的?安全吗?
wjandrea

3
这应该是答案。这是安全的@wjandrea,我在Ubuntu 18
Huan

可以将它们粘贴到xterm吗?
Tahlor

为我工作,这应该是答案,我第二个@Huan
user1282043

对此所做的解释仍然会有所帮助
Daniel Holmes

8

可以通过以下方式正确更改默认的python3:

sudo update-alternatives --config python3

尽管_gi_cairo.cpython-35m-x86_64-linux-gnu.so从python3.5的python3.5 复制过来可以解决问题,但会破坏您的库一致性。并且应避免。


@davidbak抱怨Ubuntu的正确位置是在Ubuntu irc或邮件列表上(或向其存储库提交补丁程序),在stackoverflow上,您只是尖叫到虚无。
鲍里斯

3

我知道这是一个老问题,但是对于那些寻求将python3全局更改为python 3.5以外的方法的人,可以将/usr/bin/gnome-terminalfrom 的第一行更改#! /usr/bin/python3#! /usr/bin/python3.5

注意:我的计算机上没有python 3.5,但import gi可以在python 3.6中使用,因此使用3.6而不是3.5。


gnome-terminal唯一会中断的事情还是gnome-*我也应该更改其他事情?
鲍里斯
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.