【问题标题】:Should I use pip or pip3? [duplicate]我应该使用 pip 还是 pip3? [复制]
【发布时间】:2020-08-23 03:44:00
【问题描述】:

最终,每次我安装一个新的 Linux 发行版时,我都会使用sudo apt-get install python3。

但是,一旦安装,我总是会感到困惑。 python 是 Python 2.7,python3 是 Python 3.x。但似乎pip 用于 Python 2,pip3 用于 Python 3。也就是说,我在 Internet 上看到的大多数教程总是使用传统的 pip install,即使它是关于 Python 3 的。

我应该如何处理这个问题?我是否应该在每次使用 Python 时继续输入这个烦人的3(pip3、ipython3、python3...)?在我的大部分讲座中,我都读到创建符号链接python->python3 是一种不好的做法。对吗?

【问题讨论】:

标签: python


【解决方案1】:

使用python3 -m pip 或python -m pip。这将为您想要的 python 版本使用正确的pip。这个方法在pip documentation中提到:

python -m pip 使用您指定为 python 的 Python 解释器执行 pip。所以/usr/bin/python3.7 -m pip 表示您正在为位于/usr/bin/python3.7 的解释器执行pip。

符号链接python->python3 是个坏主意,因为某些程序可能依赖python 作为python 2。不过,我已经看到了一些Dockerfiles 符号链接python->python3,例如TensorFlow's CPU dockerfile(在Docker 映像中这不是问题)。巧合的是,同一个 Dockerfile 使用了我推荐的 python3 -m pip install 语法。

【讨论】:

  • 为什么没有人在他们的教程中使用python3 -m pip?
  • 因为它通常被理解为指的是“pip,无论你以何种身份使用它”。在我的系统上,pip 指向由 miniconda 打包的 python3 pip。在其他系统上可能会有所不同
  • @nowox - 我也没有看到python3 -m pip 用得太多,但 pip 文档确实包含它:pip.pypa.io/en/stable/user_guide/#running-pip
【解决方案2】:

创建符号链接 python->python3 是一种不好的做法。对吗?

有时。一些操作系统(看着你,macOS)非常依赖 python 指向 Python 2 解释器来执行内部工具和任务。删除附带的 Python 2 解释器(或将 python 别名为 Python 3 解释器)会破坏一些东西。 How to uninstall Python 2.7 on a Mac OS X 10.6.4?

【讨论】:

    【解决方案3】:

    Python 3 的正确命令是 pip 还是 pip3 或(比如说)gaschplutzga 取决于多种因素。

    如果您只有 Python 3,并且有一个名为 pip 的命令,那么使用它可能是安全的。展望未来,这将在越来越多的地方成为简单、明显、安全的答案。

    如果两者都有,并且您的系统上安装了一个名为 pip3 的命令,可能这是正确的使用命令。

    更一般地,您可以通过PATH 查找具有合适名称的命令。在具有 POSIX 兼容 shell 的类 Unix 系统上,尝试使用命令 command -V pip3 和 command -V pip。 (在 Windows 系统上,也许可以试试 where pip3 和 where pip,或者向任何告诉你选择操作系统的黑暗神灵祈祷。)

    如果你收到类似的输出

    /opt/random/nonstandard/whoa/pip
    /usr/local/bin/pip
    /usr/bin/pip
    

    您可以使用完整路径依次尝试其中的每一个,并添加--version 选项以让它们识别自己。当您指定完整路径时,您将完全绕过系统的PATH 机制。例如,

    /opt/random/nonstandard/whoa/pip --version
    

    可能将自己标识为属于 Python 版本 3.2.1。如果那是您想要的,并且它位于您的PATH 的顶部,您只需键入pip 时就可以简单地依靠PATH 为您提供此版本。如果没有,也许您可​​以改组您的PATH(但要了解,这会更改目录中您更改位置的所有命令的解析顺序)或创建一个简单的别名或包装器,以绕过您的特定命令的PATH个人账户。在具有 POSIX 兼容外壳的类 Unix 系统上,这可能看起来像

    alias pip=/opt/random/nonstandard/whoa/pip
    

    (要在会话中保留此内容,您可以将其添加到您的 .profile 或类似内容中 - 对于 Bash,如果存在,请尝试 .bash_profile;对于 Zsh,请尝试 .zshrc。每个 shell 的完整独家新闻更多比我能塞进这些窄括号里的复杂);在 Windows 上,可能可以通过设置环境变量 PY_PYTHON 来控制它,但在“可能”后面有一个 huge can of worms。

    一些网站和操作系统/发行版具有额外的包装器或约定,它们引入了额外的选项;如果您使用特定的包管理器,也许还要研究它的文档。 (一个常见的例子是 Anaconda,尽管我认为它不会特别影响 pip 的命名或位置。)

    【讨论】:

      【解决方案4】:

      使用虚拟环境,然后pip 将与用于创建该虚拟环境的python 相关联。无论您使用pip 还是pip3,都将等效于jakub's answer 中提到的python3 -m pip。此外,鉴于 Python 2.7 已经 EOL(这意味着您很可能会使用 Python 3)并且应该避免在系统包上添加 pip install-ing 内容,那么虚拟环境在这里会有所帮助。

      例如,使用pipenv:

      $ pipenv --python=/usr/local/opt/python@3.8/bin/python3
      
      $ pipenv shell
      Launching subshell in virtual environment...
      
      (TEMP) $ pip --version
      pip 20.2.3 from /Users/me/.venvs/temp2-SbXvZiFd/lib/python3.8/site-packages/pip (python 3.8)
      (TEMP) $ pip3 --version
      pip 20.2.3 from /Users/me/.venvs/temp2-SbXvZiFd/lib/python3.8/site-packages/pip (python 3.8)
      

      例如,使用venv:

      $ python3.8 -m venv .venv
      $ source .venv/bin/activate
      
      (.venv) $ pip --version
      pip 20.2.3 from /Users/me/temp2/.venv/lib/python3.8/site-packages/pip (python 3.8)
      (.venv) $ pip3 --version
      pip 20.2.3 from /Users/me/temp2/.venv/lib/python3.8/site-packages/pip (python 3.8)
      

      虚拟环境负责确保此 env 中的 pip 或 pip3 引用来自正确 Python 版本的 pip。然后,您可以愉快地学习仍然使用 pip install something 的教程(当然,除非该教程指的是 Python 2.7 或系统范围的安装)。

      【讨论】:

        【解决方案5】:

        您可以通过pip3 安装pip ,这应该可以解决此问题。

        $ pip --version
        pip 19.0.3 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
        

        请注意,这里的 pip 是 Python 2.7(在此示例中)。

        然后您可以强制 Python 3.X 的 pip3 在其自身下安装 pip。

        $ sudo pip3 install pip --upgrade
        Installing collected packages: pip
          Found existing installation: pip 8.1.1
            Not uninstalling pip at /usr/lib/python3/dist-packages, outside environment /usr
        Successfully installed pip-19.0.3
        

        再次检查后,它应该引用 Python 3.X,因此您不必处理 什么是什么。

        $ pip --version
        pip 19.0.3 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
        

        我怀疑在此之后您会想要使用 Python 2,但如果您确实使用 Python 2 代码,您可以创建一个虚拟环境来再次访问这些命令。否则,您不必担心之后的 pip 或 pip3 区别。

        不是这个问题的真正重复,但这帮助我提出了这个答案:Can pip (python2) and pip3 (python3) coexist?

        【讨论】:

        • 如果你运行which -a pip,你会看到python2和python3 pip仍然存在,所以找到正确的pip是PATH配置的问题。
        【解决方案6】:

        pip 适用于低于 3 的 python 版本。当您要安装适用于 python 3 或更高版本的软件包时,请使用 pip3。

        【讨论】:

          猜你喜欢
          • 2021-03-30
          • 1970-01-01
          • 2013-01-30
          • 2011-08-08
          • 1970-01-01
          • 2019-08-06
          • 2013-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多