美文网首页我爱编程
安装 Anaconda 后引起的包问题

安装 Anaconda 后引起的包问题

作者: gaunthan | 来源:发表于2018-01-20 10:40 被阅读2194次

    Anaconda 是一个科学研究工具集成包,对于研究数据科学的人来说,在系统上安装该套件是一个明智的选择——我们可不想手动安装pandas、numpy、matplotlib等一系列包。然而,在安装完成后,你可能会发现系统上有些软件无法正常运行了。在我的系统上,gnome-tweak-tool 就出现了这样的情况。本文将讲解引起该问题的原因及其解决方案。

    前言

    在安装 Anaconda 时,你可能会选择将其执行路径添加到 PATH 环境变量中,这样在 Shell 中输入 python 时,就会执行 Anaconda 的 python 程序,非常方便:

    将 Anaconda 添加到 PATH 后

    然而,在安装完成后,我发现在桌面启动 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 看看系统上有没有,毕竟原先程序是可以正常运行的:

    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 设置中。这就是万恶之源...

    如果想要修改它的搜索路径设置,可以阅读文末的参考文献。

    参考文献

    相关文章

      网友评论

        本文标题:安装 Anaconda 后引起的包问题

        本文链接:https://www.haomeiwen.com/subject/yvizoxtx.html