V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leverestfish
V2EX  ›  问与答

macOS 下 Python lxml 库安装后依然运行 “ No module named 'lxml' ”

  •  
  •   leverestfish · 2019-09-11 22:15:12 +08:00 · 4199 次点击
    这是一个创建于 1907 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自闭了,求助,如图所示

    macOS python3,在终端用 pip3 命令装的,装完之后 import lxml 还是 No module named 'lxml'

    第 1 条附言  ·  2019-09-12 00:22:49 +08:00
    @mzfenng 3L 正解,非常感谢!

    但是我电脑上应该只有 python2 和 python3 两个解释器啊,是这两个冲突了吗?

    希望大佬能帮忙解释或者推一些关于 python 路径 (macOS) 的答疑文章,萌新真的有点晕晕的诶

    p.s.
    which python3 结果:
    /usr/local/bin/python3
    14 条回复    2019-09-25 12:43:56 +08:00
    ysc3839
        1
    ysc3839  
       2019-09-11 22:22:37 +08:00 via Android
    执行
    ```
    pip3 -V
    which python3
    ```
    看看?
    zer
        2
    zer  
       2019-09-11 23:08:11 +08:00
    用 venv 吧
    mzfenng
        3
    mzfenng  
       2019-09-11 23:23:19 +08:00   ❤️ 1
    用 python3 -m pip install lxml 安装
    ipwx
        4
    ipwx  
       2019-09-11 23:35:40 +08:00
    3L 正解。
    trys1
        5
    trys1  
       2019-09-11 23:38:54 +08:00 via Android
    venv 或 pyenv 了解一下
    ericls
        6
    ericls  
       2019-09-11 23:45:46 +08:00 via iPhone
    which python?
    ynyounuo
        7
    ynyounuo  
       2019-09-12 04:35:00 +08:00 via iPhone
    pip3 的 shebang 指向的和你 PATH 指向的 python3 可能不同,head -2 $(which pip3) 看一下咯
    leverestfish
        8
    leverestfish  
    OP
       2019-09-12 08:02:51 +08:00
    @ynyounuo #!/usr/local/opt/python/bin/python3.7
    请问这是什么意思? 我系统里还有第二个 python 解释器吗
    ynyounuo
        9
    ynyounuo  
       2019-09-12 08:20:57 +08:00
    @leverestfish
    可以用 readlink -f 看看 /usr/local/bin/python3 和 /usr/local/opt/python/bin/python3.7 是否为同一个 python 的软链
    leverestfish
        10
    leverestfish  
    OP
       2019-09-12 08:33:21 +08:00
    @ynyounuo 我看了下两个好像不一样,一个是 homebrew 装的,一个是我直接在官网下载后安装的
    另外这个命令我用不来,Google 了也没搞明白。
    gIrl1990
        11
    gIrl1990  
       2019-09-12 12:54:11 +08:00
    ```text
    for v in "/usr/bin" "/usr/local/bin" "/usr/local/opt"
    find -E "$v" -regex ".*/python[^.]?([0-9]\.?)*.?"|xargs gls -lF --color
    end

    for v in "/usr/bin" "/usr/local/bin" "/usr/local/opt"
    find -E "$v" -regex ".*/pip[^.]?([0-9]\.?)*.?"|xargs gls -lF --color
    end
    ```

    你可以试下,搜下 python,然后看看 pip 是否对应 python
    注释 1. 上面是 fish shell 的命令,大致明白意思就是
    leverestfish
        12
    leverestfish  
    OP
       2019-09-12 16:35:45 +08:00
    @gIrl1990 我大概理解,但我不会用 fish shell
    gIrl1990
        13
    gIrl1990  
       2019-09-12 16:58:36 +08:00   ❤️ 1
    @leverestfish 其实就是在这 3 个目录"/usr/bin" "/usr/local/bin" "/usr/local/opt"里面找满足规则的 python/pip 的文件,它可能是个 executable file 也可能是个链接或者文件夹(一般来说不会放到其它目录里;如果是链接的话,可以使用 greadlink -f 递归找到最终文件)。 这样就知道了共有哪几个 Python

    pip 的话就是个可执行文本,参考前人说的,head -n 2 看下文件头,看它指向哪个 python 就可以了

    gls, greadlink 都是 gnu coreutils 的,和 macos bad 对应的命令是有些许区别的。通过 brew install coreutils 安装
    gIrl1990
        14
    gIrl1990  
       2019-09-25 12:43:56 +08:00   ❤️ 1
    @leverestfish 那就给你来个 bash 的吧
    ```bash
    #!/bin/bash
    IFS=":" read -r -a REPLY <<< "$PATH"
    for x in "python" "pip"; do
    for v in "${REPLY[@]}"; do
    find "$v" -regex ".*/${x}[^\-]*" -exec gls -lFhAv --color {} \;
    done
    done
    ```

    ps: https://github.com/koalaman/shellcheck/wiki/SC2207
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2685 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:20 · PVG 17:20 · LAX 01:20 · JFK 04:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.