使用pip或pip3安装Python 3的软件包?

205

我有一台安装有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。我的意思是,我可以导入它并在没有问题的情况下使用它。此外,当我在终端中只输入pip3时,会出现以下关于用法的消息:

Usage:   
  pip <command> [options]

当我只输入 pip 时,我收到的是相同的消息。

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


3
https://dev59.com/O7roa4cB1Zd3GeqPsNfI 被标记为重复问题,但并不特指于 MacOS,并且在我看来有更好的答案。 - tripleee
那个版本的MacOS上运行的内容也取决于你如何安装和配置Python 3。在过去,MacOS本身根本没有提供Python 3。 - tripleee
10个回答

135

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

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

您也可以使用以下命令以了解更多细节:

$ pip show pip
$ pip3 show pip

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

  • 将默认的pip设置为某个版本。
  • 为不同的版本创建不同的链接。

PythonPython2Python3的情况也是一样的。

如果您对不同情况下的操作方式感兴趣,可以查看以下更多信息:


3
我认为这是错误的。我的pip3在帮助输出中也称自己为pip,但是普通的pip会在我的系统上安装Python 2包。我认为https://dev59.com/VlkR5IYBdhLWcg3wygHp#40832677是正确的,至少它与我的观察结果相符。 - Torsten Bronger
1
我表示怀疑。虽然我没有Mac,但在我测试的Ubuntu版本中,pip的变量不是符号链接。相反,它们是微小的Python脚本,唯一不同的是shebang行。 - Torsten Bronger
是的,这就是我的意思。它会根据环境和安装Python的方式(brew、apt、pyenv、手动编译等)而发生变化。对于提问者的情况,这是因为它们是软链接,我们使用ls -lpip show来验证原因。当然,这个答案是为了回答他的问题。 - CSJ
我认为提问者的电脑上没有符号链接。我没有找到任何关于pip曾经/现在以这种方式工作的参考资料。 - Torsten Bronger
更多信息,请参考Fedora家族和Archlinux家族的相同方式:https://src.fedoraproject.org/cgit/rpms/python-pip.git/tree/python-pip.spec#n415,https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/python#n118。 - CSJ
显示剩余4条评论

48
如果您之前安装了 Python 2.x,然后再安装了 Python 3,那么您的 pip 将指向 pip3。 您可以通过输入 pip --version 来验证这一点,这与 pip3 --version 相同。
在您的系统上现在有 pip、pip2 和 pip3
如果您希望将 pip 指向 pip2 而不是 pip3,可以更改设置。

1
你如何改变那个? - ahnbizcad
3
最简单的方法是定义一个别名,像这样:alias pip="pip3"。 - apadana
2
我曾经遇到过这个问题,我的pip3版本是v9,而pip的版本是v10。所以我输入了pip3 install --upgrade pip,这样就将两个版本都升级到了v10。 - Kevin Danikowski
3
这个答案是错误的。pip不会指向pip3。pip将安装Python 2包,而pip3将安装Python 3包。已在Lubuntu 18.10上进行测试。 - Torsten Bronger
@TorstenBronger,请问您在环境中安装 Python 的顺序是怎样的? - apadana
显示剩余8条评论

24
当你安装python3时,会自动安装pip3。如果你没有其他Python安装(如Python2.7),则会创建一个指向pip3的链接,这个链接就是pip
因此,如果没有安装除Python3以外的其他版本,则pip是指向pip3的链接。而pip通常指向第一个安装的Python版本。

18

举个例子:

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


10

我认为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虚拟环境中,则pip将在Python3环境中运行。


我认为说pip与适合上下文的任何环境相关联有点误导人。在venv的情况下,pip可执行文件是特定于venv而不是系统的。除非您在同一个venv中安装了多个版本的python,否则我看不到会出现这个问题。当不使用venv时,使用的pip版本有时是不直观的,并且取决于您系统的配置(通常由先安装哪个版本的python确定,正如其他人所说)。但是Pip没有任何智能用于动态选择版本。 - Luke Baumann
这是针对您的系统而言,而不是一般的Linux。无论如何,原帖是关于MacOS的问题。 - tripleee

8

这是一个棘手的问题。最终,如果你调用 pip 它会调用 pip2pip3,具体取决于你如何设置系统。


1
这应该是一条评论,因为它并没有提供对所提出问题的答案,只是说“这取决于情况”,甚至没有详细说明依据什么情况而定。 - TylerH

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

或者
pip2.7 install some_package

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


1
在我的Windows实例上 - 我并不完全了解我的环境 - 使用pip3安装kaggle-cli包是有效的,而pip则不行。我在一个conda环境中工作,而这些环境似乎是不同的。

0

somepath/venv 中激活 Python 3.6 虚拟环境后,以下别名解决了在 macOS Sierra 上 pip 坚持指向 Apple 的 2.7 Python 的各种问题。

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

当我以root用户身份执行sudo pip时,这种方法并不奏效,因为root用户并不知道我的别名或虚拟环境,所以我不得不添加一个额外的别名来处理这个问题。虽然这是一种hack方法,但它能够解决问题,而且我知道它的作用:

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

背景:

开始时,pip3不存在(命令未找到),而which pip会返回/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip,即Apple Python。

通过macports安装了Python 3.6。

在激活我想要使用的3.6虚拟环境后,which python会返回somepath/venv/bin/python

不知何故,pip install会正确地进入我的虚拟环境,但pip list会列出Python 2.7的包。

对于Python来说,这远远低于我对于初学者友好性的期望。


期望达成:同意。这个问题始于Python 3与Python 2不太兼容。 - Roland
1
@Roland,这与2和3几乎没有关系,而与路径管理、pip与Python以及Python版本之间的关系更多。仅仅弄清楚如何安装pip和Python就已经很麻烦了,至少在macOS上是这样。而且,大多数情况下pip坚持以过时的版本进入,需要立即更新。 - JL Peyret
当然,你是正确的。但是你的解释显示了导致我误解的复杂性。学习Fortran很容易,同样的还有Pascal、Lisp、C、C++、C#、JS和Python。构建Linux,设置X Windows、Apache,这些都是可行的。但是设置Python,真的让我无法应对 :-( - Roland

0
在我的系统中,我使用update alternatives
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,则第一行就足够了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接