Anaconda 是一個科學(xué)研究工具集成包,對于研究數(shù)據(jù)科學(xué)的人來說,在系統(tǒng)上安裝該套件是一個明智的選擇——我們可不想手動安裝pandas、numpy、matplotlib等一系列包。然而,在安裝完成后,你可能會發(fā)現(xiàn)系統(tǒng)上有些軟件無法正常運行了。在我的系統(tǒng)上,gnome-tweak-tool 就出現(xiàn)了這樣的情況。本文將講解引起該問題的原因及其解決方案。
前言
在安裝 Anaconda 時,你可能會選擇將其執(zhí)行路徑添加到 PATH 環(huán)境變量中,這樣在 Shell 中輸入 python 時,就會執(zhí)行 Anaconda 的 python 程序,非常方便:

然而,在安裝完成后,我發(fā)現(xiàn)在桌面啟動 gnome-tweak-tool 沒有反應(yīng),于是選擇在終端中運行, 得到以下錯誤信息:
ModuleNotFoundError: No module named 'gi'
PS:這個問題首先在我把 Fedora 26 升級到 Fedora 27 后出現(xiàn)。當時對系統(tǒng)升級后,出現(xiàn)了很多奇怪的問題,嘗試了一下 downgrade,結(jié)果把系統(tǒng)搞殘了,只能選擇重裝。重裝后,gnome-tweak-tool 可以正常工作。直到后來,安裝 Anaconda 后問題再一次出現(xiàn)。這使得我開始意識到這個鍋不該 Fedora 背。
嘗試
最初遇到這個問題時,我進行了一些嘗試。如果你想直接看解決方法,可以跳到一下節(jié)。
首先是“缺啥補啥”,既然缺少 gi,那就把它給裝上:
pip3 install gi --user
裝好 gi 后,再運行下 gnome-tweak-tool,結(jié)果拋出了另一個錯誤:
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 看看系統(tǒng)上有沒有,畢竟原先程序是可以正常運行的:

看起來是有的,恩,拷貝一份到 anaconda 的搜索路徑。我選擇放在 ~/.local/lib/python3.6/site-packages/ 下。繼續(xù),又炸了:
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
網(wǎng)上查了許多資料,發(fā)現(xiàn)大家都建議把 gnome-tweak-tool 的 Shebang 指定為 /usr/bin/python3 而不是原先的 /usr/bin/env python3。試了一下,問題解決了。
注意,如果還是提示 gi 有問題。請把之前用 pip 手工裝的 gi 給卸載掉,這樣應(yīng)該就沒問題了: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 已經(jīng)安裝:

通常情況下,系統(tǒng)中都是有安裝的,也可能是在安裝 gnome-tweak-tool 時,包管理器自動安裝了。當然,你用 sudo dnf remove python-gobject python3-gobject 就會發(fā)現(xiàn)哪些包依賴了它了。請不要嘗試卸載它,不然我保證你會哭的。:)
本質(zhì)原因
通過下面兩張圖應(yīng)該可以發(fā)現(xiàn)問題根源:


沒錯,兩者的路徑設(shè)置非常不同!這意味著有一些包 Anaconda 是搜索不到的,因為這些包的路徑并沒有添加到它的 path 設(shè)置中。這就是萬惡之源...
如果想要修改它的搜索路徑設(shè)置,可以閱讀文末的參考文獻。