Pip 还是 pip3来安装 Python 3的软件包?

我有一台苹果笔记本电脑,上面有 OS X El Captain 操作系统。我认为 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可以互换使用?如果是这样的话,为了便于讨论,我怎样才能为 Python2而不是 Python3安装软件包呢?

208474 次浏览

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

如果您安装了 Python 2.7,我认为您可以使用 pip2pip2.7来安装专门针对 Python 2的包,比如

pip2 install some_pacakge

或者

pip2.7 install some_package

您可以使用 pip3pip3.5来安装专门针对 Python3的包。

安装 python3时,将安装 pip3。如果您没有另一个 python 安装(比如 python2.7) ,那么将创建一个链接,该链接将 pip指向 pip3

因此,如果没有安装其他版本的 python (python3除外) ,则使用 ABC0是到 pip3的链接pip通常指向第一个安装。

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

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

你亦可使用以下命令以了解更多详情:

$ pip show pip
$ pip3 show pip

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

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

pythonpython2python3的情况也是如此

如果你对不同情况下如何发生这种情况感兴趣,更多信息如下:

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

在你的系统上你现在有 Pip,pip2和 pip3

如果需要,可以将 pip 更改为指向 pip2而不是 pip3。

我认为 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环境中进行操作。

在我的 Windows 实例上——我并不完全理解我的环境——使用 pip3安装 kaggle-cli 包是有效的——而 pip 则没有。我在一个康达环境中工作,环境似乎有所不同。

用户编辑下载 fast 版本

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

(fastai) C: 用户编辑快速下载 版本

Pip 9.0.1 from c: users redact appdata local program python python36 lib site-package (python 3.6)

插图:

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

假设在 翻译中有一个激活的 Python 3.6 viralenv,下面的别名解决了 macOS Sierra 上的各种问题,pip 坚持指向苹果的2.7 Python。

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

当我不得不执行 sudo pip时,这个工作不是很好,因为 root 用户对我的别名或 viralenv 一无所知,所以我不得不添加一个额外的别名来处理这个问题。这是黑客技术,但很有效,我知道它的作用:

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

背景:

Pip3并不存在(找不到命令) ,而 which pip将返回 /opt/local/Library/Framework/Python. Framework/Versions/2.7/bin/pip,即 Apple Python。

Python 3.6是通过 macports 安装的。

在激活我想使用的3.6 Virtual alenv 之后,which python将返回 Sompath/venv/bin/python

不知怎么的,pip install做了正确的事情,命中了我的 viralenv,但是 pip list会喋喋不休地说出 Python 2.7包。

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

在我的系统中,我使用 更新备选方案

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,那么第1行就足够了。