xuzhengfu / pilot

进入编程世界的第一课
1 stars 0 forks source link

/usr/bin/python: No module named pip #14

Open xuzhengfu opened 4 years ago

xuzhengfu commented 4 years ago

感谢李骏老师!

0. 问题

Issues 中有个一样的问题 #307 ,最后的解决方案是执行以下命令:

python3 -m pip install --upgrade pip
pip3 install jupyterlab

问题在于:为什么我们要执行的命令和教程中的不一样,是环境配置的某个步骤做错了吗?

老师在 #307 中回复道:

如果你用 Homebrew 安装的 Python,不太会有这个问题。 首先用 python -V 确认你的 Python 版本是 3.7.4,然后尝试 python -m ensurepip 来补安装 pip。

可我用 python -V 的时候,发现 Python 版本是 2.7.10,为什么会这样?

1. 基本信息

  1. 操作系统:macOS Mojave 10.14.6

  2. 执行命令 which pip,命令行无反应。

  3. 执行命令 which pip3,结果如下:

    /usr/local/bin/pip3
  4. 执行命令 which python,结果如下:

    /usr/bin/python
  5. 执行命令 which python3,结果如下:

    /usr/local/bin/python3
  6. 执行命令 python -V,结果如下:

    Python 2.7.10
  7. 执行命令 python3 -V,结果如下:

    Python 3.7.6

2. 思考

  1. Google “/usr/bin/python: No module named pip” ,在第一页未发现类似的情况。

  2. Google “/usr/bin/python vs /usr/local/bin/python”,发现了这里描述了一些可供参考的内容,提取出有用的信息,如下:

    1. Each installation of Python comes with its own pip.
    2. You've got multiple pythons installed, so which one is being used when you run the wrapper script pip? You don't know, because it depends on the shebang line that was written to that script when it was auto-generated. And that can actually change over time, e.g. each time you install the module it's potentially rewritten.
    3. By always invoking python directly, you always know which one you're getting — it's whatever one you have your PATH setup to find first. And if you want to install modules to a different python, you just change the name of the interpreter that you're invoking, e.g. /foo/python -m pip install quux vs /bar/python -m pip install quux.

    综览上述信息,得出了如下结论:

    在执行命令 python -m pip install --upgrade pip 时,使用的是 /usr/bin/python 的那个 python,而这个 python 里没有 pip。

  3. 另,之前执行命令 brew install git python 时,命令行反馈过如下信息:

    
    ==> python
    Python has been installed as
    /usr/local/bin/python3

Unversioned symlinks python, python-config, pip etc. pointing to python3, python3-config, pip3 etc., respectively, have been installed into /usr/local/opt/python/libexec/bin

If you need Homebrew's Python 2.7 run brew install python@2

You can install Python packages with pip3 install They will install into the site-package directory /usr/local/lib/python3.7/site-packages



## Reference
1. https://github.com/neolee/pilot/blob/master/x2-students-book.md
2. https://www.reddit.com/r/learnpython/comments/4zqw0d/usrbinpython_vs_usrlocalbinpython/
3. https://github.com/Xuzhengfu/pilot/issues/4

## Logging
2020-02-05 14:17:46 initialize
xuzhengfu commented 4 years ago

老师回复:

为啥发了俩一样的 issue……

系统环境可能各异,比如你的系统里就有一个 Python 2 的内置 Python 环境,这个环境里没有安装 pip(这在 Python 2 的时代不算奇怪);然后你用 Homebrew 装了 Python 3,这时 python3pip3 命令一定是指向你新装的 Python 3 的,而 python pip 命令则不确定,根据环境差别可能有差异。

总之你现在开始用 python3pip3 这俩命令就好了,前者用于执行 Python 3 的解释器,后者用于安装 Python 第三方软件包。

另外,python3 -m pip install --upgrade pippip3 install --upgrade pip 是一样的,只不过在 Windows 下后者会有问题,而在 macOS 下两个都可以。

xuzhengfu commented 4 years ago

我回复:

为啥发了俩一样的 issue……

尝试加 “question” label 的,结果还是没加上……

总之你现在开始用 python3 和 pip3 这俩命令就好了,前者用于执行 Python 3 的解释器,后者用于安装 Python 第三方软件包。

知道了,感谢老师!