安裝 Anaconda 后引起的包問題

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 程序,非常方便:

將 Anaconda 添加到 PATH 后

然而,在安裝完成后,我發(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)上有沒有,畢竟原先程序是可以正常運行的:

locate gtweak 運行結(jié)果部分截圖

看起來是有的,恩,拷貝一份到 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)安裝:

使用 rpm 命令檢驗 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)問題根源:

Anaconda python 的 sys.path 值
系統(tǒng)自帶 python 的 sys.path 值

沒錯,兩者的路徑設(shè)置非常不同!這意味著有一些包 Anaconda 是搜索不到的,因為這些包的路徑并沒有添加到它的 path 設(shè)置中。這就是萬惡之源...

如果想要修改它的搜索路徑設(shè)置,可以閱讀文末的參考文獻。

參考文獻

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容