Linux 安装 Anaconda 后引起的包问题 gaunthan Posted on Jan 24 2018 ? Linux Tutorial ? > 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,结果抛出了另一个错误: ```python3 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' ``` 没事,先把这句注释掉...再来,又炸了: ```python3 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 的语法。给它加对圆括号就完事。再来,又炸了: ```python3 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/` 下。继续,又炸了: ```python3 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 的存放路径在哪里: ```bash $ 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 已经安装:  通常情况下,系统中都是有安装的,也可能是在安装 gnome-tweak-tool 时,包管理器自动安装了。当然,你用 `sudo dnf remove python-gobject python3-gobject` 就会发现哪些包依赖了它了。请不要尝试卸载它,不然我保证你会哭的。:) ## 本质原因 通过下面两张图应该可以发现问题根源:   没错,两者的路径设置非常不同!这意味着有一些包 Anaconda 是搜索不到的,因为这些包的路径并没有添加到它的 path 设置中。因此,安装包时要注意使用对应的pip工具。 如果想要修改它的搜索路径设置,可以阅读文末的参考文献。 ## 参考文献 - [PyGObject (PyGI)](https://developer.fedoraproject.org/tech/languages/python/pygobject.html) - [Anaconda: Permanently include external packages (like in PYTHONPATH)](https://stackoverflow.com/questions/37006114/anaconda-permanently-include-external-packages-like-in-pythonpath) - [mivoligo](https://github.com/mivoligo)/**[Zeegaree](https://github.com/mivoligo/Zeegaree)**: [No module named gi.repository #6](https://github.com/mivoligo/Zeegaree/issues/6) 赏 Wechat Pay Alipay Tensorflow 保留还原模型编程概论 Linux 设置 Rime 默认英文状态