Anaconda 是一个科学研究工具集成包,对于研究数据科学的人来说,在系统上安装该套件是一个明智的选择——我们可不想手动安装pandas、numpy、matplotlib等一系列包。然而,在安装完成后,你可能会发现系统上有些软件无法正常运行了。在我的系统上,gnome-tweak-tool 就出现了这样的情况。本文将讲解引起该问题的原因及其解决方案。
前言
在安装 Anaconda 时,你可能会选择将其执行路径添加到 PATH 环境变量中,这样在 Shell 中输入 python
时,就会执行 Anaconda 的 python 程序,非常方便:
然而,在安装完成后,我发现在桌面启动 gnome-tweak-tool 没有反应,于是选择在终端中运行, 得到以下错误信息:
ModuleNotFoundError: No module named 'gi'
PS:这个问题首先在我把 Fedora 26 升级到 Fedora 27 后出现。当时对系统升级后,出现了很多奇怪的问题,尝试了一下 downgrade,结果把系统搞残了,只能选择重装。重装后,gnome-tweak-tool 可以正常工作。直到后来,安装 Anaconda 后问题再一次出现。这使得我开始意识到这个锅不该 Fedora 背。
尝试
最初遇到这个问题时,我进行了一些尝试。如果你想直接看解决方法,可以跳到一下节。
首先是“缺啥补啥”,既然缺少 gi,那就把它给装上:
pip3 install gi --user
装好 gi 后,再运行下 gnome-tweak-tool,结果抛出了另一个错误:
Traceback (most recent call last):
File "/usr/bin/gnome-tweak-tool", line 25, in <module>
gi.require_version("Gtk", "3.0")
AttributeError: module 'gi' has no attribute 'require_version'
没事,先把这句注释掉...再来,又炸了:
Traceback (most recent call last):
File "/usr/bin/gnome-tweak-tool", line 24, in <module>
import gi
File "/home/gaunthan/.local/lib/python3.6/site-packages/gi/__init__.py", line 39
print url
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(t url)?
看起来是 gi 的脚本中,print
还用着 python 2.7 的语法。给它加对圆括号就完事。再来,又炸了:
Traceback (most recent call last):
File "/usr/bin/gnome-tweak-tool", line 27, in <module>
import gtweak
ModuleNotFoundError: No module named 'gtweak'
提示缺少 gtweak 包。用 pip 搜不出来,那用 locate gtweak
看看系统上有没有,毕竟原先程序是可以正常运行的:
看起来是有的,恩,拷贝一份到 anaconda 的搜索路径。我选择放在 ~/.local/lib/python3.6/site-packages/
下。继续,又炸了:
Traceback (most recent call last):
File "/usr/bin/gnome-tweak-tool", line 84, in <module>
from gtweak.app import GnomeTweakTool
File "/home/gaunthan/.local/lib/python3.6/site-packages/gtweak/app.py", line 20, in <module>
from gi.repository import Gtk
ModuleNotFoundError: No module named 'gi.repository'
诶,看起来用 pip3
装的 gi 包不是 gnome-tweak-tool 要的那个。该查查资料了。
解决
方案一:修改 gnome-tweak-tool
网上查了许多资料,发现大家都建议把 gnome-tweak-tool 的 Shebang 指定为 /usr/bin/python3
而不是原先的 /usr/bin/env python3
。试了一下,问题解决了。
注意,如果还是提示 gi 有问题。请把之前用 pip 手工装的 gi 给卸载掉,这样应该就没问题了:pip3 uninstall gi
。
方案二:将需要的包放到 Anaconda 的搜索路径下
前面把 gtweak 放到了搜索路径下,还需要做的是把 gi 也放到这个搜索路径下。 先看看 gi 的存放路径在哪里:
$ sudo python3 -c "import gi; print(gi.__path__)"
['/usr/lib64/python3.6/site-packages/gi']
接着把它拷贝一份到搜索路径就可以了:
cp -rf /usr/lib64/python3.6/site-packages/gi ~/.local/lib/python3.6/site-package/
注意要点
请先保证 python-gobject 已经安装:
使用 rpm 命令检验 python-gobject 是否已经安装通常情况下,系统中都是有安装的,也可能是在安装 gnome-tweak-tool 时,包管理器自动安装了。当然,你用 sudo dnf remove python-gobject python3-gobject
就会发现哪些包依赖了它了。请不要尝试卸载它,不然我保证你会哭的。:)
本质原因
通过下面两张图应该可以发现问题根源:
Anaconda python 的 sys.path 值 系统自带 python 的 sys.path 值没错,两者的路径设置非常不同!这意味着有一些包 Anaconda 是搜索不到的,因为这些包的路径并没有添加到它的 path 设置中。这就是万恶之源...
如果想要修改它的搜索路径设置,可以阅读文末的参考文献。
网友评论