pip 或 pip3 为 Python 3 安装包?

Posted

技术标签:

【中文标题】pip 或 pip3 为 Python 3 安装包?【英文标题】:pip or pip3 to install packages for Python 3? 【发布时间】:2017-04-11 11:32:06 【问题描述】:

我有一台装有 OS X El Captain 的 Macbook。我认为Python 2.7 是预装的。但是,我也安装了Python 3.5。当我开始使用Python 3 时,我读到如果我想安装一个包,我应该输入:

pip3 install some_package

不管怎样,现在当我使用

pip install some_package

我为Python 3 安装了some_package。我的意思是我可以导入它并毫无问题地使用它。此外,当我在Terminal 中输入pip3 时,我收到了有关用法的消息:

Usage:   
  pip <command> [options]

这与我输入 pip 时收到的消息相同。

这是否意味着在以前的版本中,情况有所不同,现在pippip3 可以互换使用?如果是这样,并且为了争论,我如何为Python 2而不是Python 3安装软件包?

【问题讨论】:

【参考方案1】:

在我的系统中,我使用更新选项

sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip2 2

如果我想在它们之间切换,我使用以下命令。

sudo update-alternatives --config pip

注意:如果您只安装了 pip3 而没有安装 pip2,则第一行就足够了。

【讨论】:

【参考方案2】:

我认为pippip2pip3 不是指向同一个可执行文件路径的软链接。在我的 Linux 终端中记下这些命令和结果:

mrz@mrz-pc ~ $ ls -l `which pip`
-rwxr-xr-x 1 root root 292 Nov 10  2016 /usr/bin/pip
mrz@mrz-pc ~ $ ls -l `which pip2`
-rwxr-xr-x 1 root root 283 Nov 10  2016 /usr/bin/pip2
mrz@mrz-pc ~ $ ls -l `which pip3`
-rwxr-xr-x 1 root root 293 Nov 10  2016 /usr/bin/pip3
mrz@mrz-pc ~ $ pip -V
pip 9.0.1 from /home/mrz/.local/lib/python2.7/site-packages (python 2.7)
mrz@mrz-pc ~ $ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
mrz@mrz-pc ~ $ pip3 -V
pip 9.0.1 from /home/mrz/.local/lib/python3.5/site-packages (python 3.5)

如您所见,它们存在于不同的路径中。

pip3 始终只在 Python3 环境中运行,就像 pip2 对 Python2 一样。 pip 在适合上下文的任何环境中运行。例如,如果你在 Python3 venv 中,pip 将在 Python3 环境中运行。

【讨论】:

我想说说 pip 与适合上下文的任何环境相关联有点误导。对于 venv,pip 可执行文件特定于 venv 而不是系统。除非您在同一个 venv 中安装了多个版本的 python,否则我看不到那里出现这个问题。当不使用 venv 时,使用的 pip 版本有时不直观,并且取决于系统的配置(通常由首先安装的 python 版本决定,正如其他人所说)。但是 Pip 没有任何智能来动态选择版本【参考方案3】:

您的pip 是指向与pip3 相同的可执行文件路径的软链接。 您可以使用以下命令检查您的pippip3 真实路径在哪里:

$ ls -l `which pip`
$ ls -l `which pip3`

您也可以使用以下命令了解更多详情:

$ pip show pip
$ pip3 show pip

当我们安装不同版本的python时,我们可能会创建这样的软链接到

将默认点设置为某个版本。 为不同的版本制作不同的链接。

python,python2,python3也是同样的情况

如果您对它在不同情况下的发生方式感兴趣,请在下面了解更多信息:

MacOS/Homebrew Fedora/CentOS Debian/Ubuntu

【讨论】:

我认为这是错误的。我的 pip3 在它的帮助输出中也称自己只是 pip,不过,普通的 pip 在我的系统上安装 Python 2 包。我认为***.com/a/40832677/188108 是正确的,至少它符合我的观察。 它会随着环境和安装python的方式而变化,这个答案是为了提供线索如何知道pip的工作原理,并回答提问者的情况。如果它在您的系统上不一样,您仍然可以使用相同的方式找出原因。并不意味着这是错误的答案。 我对此表示怀疑。我没有 Mac,但在我测试的 Ubuntu 版本中,pip 变体不是符号链接。相反,它们是微小的 Python 脚本,仅在 shebang 行中有所不同。 是的,这就是我的意思是它会改变环境和安装 python 的方式(brew、apt、pyenv、手动编译等)以及提问者的情况,因为它们是软链接,并且我们使用ls -lpip show来验证原因。当然,这个答案是为了回答他的问题。 我认为提问者的计算机上没有符号链接。我没有找到任何 pip 曾经以这种方式工作/工作的参考资料。【参考方案4】:

鉴于 somepath/venv 中激活了 Python 3.6 virtualenv,以下别名解决了 macOS Sierra 上 pip 坚持指向 Apple 的 2.7 Python 的各种问题。

alias pip='python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

当我不得不做sudo pip 时,这并没有那么好,因为root 用户不知道我的别名或virtualenv,所以我还必须添加一个额外的别名来处理这个问题。这是一个 hack,但它有效,而且我知道它的作用:

alias sudopip='sudo somepath/venv/bin/python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

背景:

pip3 不存在以启动(command not found),which pip 将返回 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/ pip,Apple Python。

Python 3.6 是通过 macports 安装的。

激活我想使用的 3.6 virtualenv 后,which python 将返回 somepath/venv/bin/python

不知何故,pip install 会做正确的事并访问我的 virtualenv,但 pip list 会喋喋不休地推出 Python 2.7 包。

对于 Python,就初学者友好性而言,这远远低于我的预期。

【讨论】:

期望:同意。这个问题始于 Python 3 与 Python 2 并不真正兼容 @Roland 它与 2 vs 3 几乎没有关系,而与路径管理和 pip 通常与 python 和 python 版本的模糊关系有更多关系。仅仅弄清楚如何用 python 安装 pip 是一件令人头疼的事情,至少在 macOS 上是这样。 pip 坚持在大多数情况下作为过时版本出现也是如此,需要立即更新。 你当然是对的。但是您的解释显示了导致我误解的复杂性。学习 Fortran 很容易,同样是 Pascal、Lisp、C、C++、C#、JS、Python。构建 linux,设置 X Windows,Apache,这是可行的。但是设置 python,这真的让我失望:-(【参考方案5】:

图解:

pip --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

pip3 --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

python --version
  Python 3.7.3

which python
  /usr/bin/python

ls -l '/usr/bin/python'
  lrwxrwxrwx 1 root root 7 Mar 26 14:43 /usr/bin/python -> python3

which python3
  /usr/bin/python3

ls -l /usr/bin/python3
  lrwxrwxrwx 1 root root 9 Mar 26 14:43 /usr/bin/python3 -> python3.7

ls -l /usr/bin/python3.7
  -rwxr-xr-x 2 root root 14120 Mar 26 14:43 /usr/bin/python3.7

因此,我在我的默认系统 python (Python 3.7.3) 中,pip pip3

【讨论】:

【参考方案6】:

在我的 Windows 实例上 - 我不完全了解我的环境 - 使用 pip3 安装 kaggle-cli 包有效 - 而 pip 没有。我在 conda 环境中工作,环境似乎有所不同。

(fastai) C:\Users\redact\Downloads\fast.ai\deeplearning1\nbs>pip --版本

来自 C:\ProgramData\Anaconda3\envs\fastai\lib\site-packages (python 3.6) 的 pip 9.0.1

(fastai) C:\Users\redact\Downloads\fast.ai\deeplearning1\nbs>pip3 --版本

来自 c:\users\redact\appdata\local\programs\python\python36\lib\site-packages 的 pip 9.0.1 (python 3.6)

【讨论】:

【参考方案7】:

如果你有 python 2.x 然后安装了 python3,你的 pip 将指向 pip3。 您可以通过键入pip --version 来验证这一点,这与pip3 --version 相同。

在您的系统上,您现在拥有 pip、pip2 和 pip3

如果您愿意,可以将 pip 更改为指向 pip2 而不是 pip3。

【讨论】:

你如何改变它 @ahnbizcad 最简单的方法是定义这样的别名: alias pip="pip3" 我这样做了,但是当 pip 是 v10 时,我的 pip3 是 v9,所以我输入了 pip3 install --upgrade pip 并且它都变成了 v10 这个答案是错误的。 pip 不会指向 pip3。 pip 将安装 Python 2 包,而 pip3 将安装 Python 3 包。在 Lubuntu 18.10 上测试。 @TorstenBronger 在您的环境中安装 python 的顺序是什么?【参考方案8】:

当您安装python3 时,pip3 将被安装。如果您没有其他 python 安装(如 python2.7),则会创建一个链接,将 pip 指向 pip3

所以 pip 是指向 pip3 的链接,如果没有安装其他版本的 python(除了 python3)。 pip 一般指向第一次安装。

【讨论】:

【参考方案9】:

如果您安装了 Python 2.7,我认为您可以使用 pip2pip2.7 来安装专门用于 Python 2 的软件包,例如

pip2 install some_pacakge

pip2.7 install some_package

您可以使用pip3pip3.5 专门为Python 3 安装包。

【讨论】:

【参考方案10】:

这是一个棘手的话题。最后,如果您调用pip,它将调用pip2pip3,具体取决于您如何设置系统。

【讨论】:

以上是关于pip 或 pip3 为 Python 3 安装包?的主要内容,如果未能解决你的问题,请参考以下文章

如何在安装pip3以及第三方python库

kali python pip3 的安装和卸载

Centos7下安装python3及pip3

如何在安装pip3以及第三方python库

linux2

pip3安装和卸载以及常用命令