leverestfish
V2EX  ›  问与答

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

  •  
  •   leverestfish · Sep 11, 2019 · 4744 views
    This topic created in 2445 days ago, the information mentioned may be changed or developed.

    自闭了,求助,如图所示

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

    Supplement 1  ·  Sep 12, 2019
    @mzfenng 3L 正解,非常感谢!

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

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

    p.s.
    which python3 结果:
    /usr/local/bin/python3
    14 replies    2019-09-25 12:43:56 +08:00
    ysc3839
        1
    ysc3839  
       Sep 11, 2019 via Android
    执行
    ```
    pip3 -V
    which python3
    ```
    看看?
    zer
        2
    zer  
       Sep 11, 2019
    用 venv 吧
    mzfenng
        3
    mzfenng  
       Sep 11, 2019   ❤️ 1
    用 python3 -m pip install lxml 安装
    ipwx
        4
    ipwx  
       Sep 11, 2019
    3L 正解。
    trys1
        5
    trys1  
       Sep 11, 2019 via Android
    venv 或 pyenv 了解一下
    ericls
        6
    ericls  
       Sep 11, 2019 via iPhone
    which python?
    ynyounuo
        7
    ynyounuo  
       Sep 12, 2019 via iPhone
    pip3 的 shebang 指向的和你 PATH 指向的 python3 可能不同,head -2 $(which pip3) 看一下咯
    leverestfish
        8
    leverestfish  
    OP
       Sep 12, 2019
    @ynyounuo #!/usr/local/opt/python/bin/python3.7
    请问这是什么意思? 我系统里还有第二个 python 解释器吗
    ynyounuo
        9
    ynyounuo  
       Sep 12, 2019
    @leverestfish
    可以用 readlink -f 看看 /usr/local/bin/python3 和 /usr/local/opt/python/bin/python3.7 是否为同一个 python 的软链
    leverestfish
        10
    leverestfish  
    OP
       Sep 12, 2019
    @ynyounuo 我看了下两个好像不一样,一个是 homebrew 装的,一个是我直接在官网下载后安装的
    另外这个命令我用不来,Google 了也没搞明白。
    gIrl1990
        11
    gIrl1990  
       Sep 12, 2019
    ```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
       Sep 12, 2019
    @gIrl1990 我大概理解,但我不会用 fish shell
    gIrl1990
        13
    gIrl1990  
       Sep 12, 2019   ❤️ 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  
       Sep 25, 2019   ❤️ 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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1438 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 17:03 · PVG 01:03 · LAX 10:03 · JFK 13:03
    ♥ Do have faith in what you're doing.