繁体   English   中英

pip 或 pip3 为 Python 3 安装软件包?

[英]pip or pip3 to install packages for Python 3?

我有一台装有 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 我的意思是我可以导入它并毫无问题地使用它。 此外,当我在Terminalpip3时,我收到了有关用法的消息:

Usage:   
  pip <command> [options]

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

是不是说以前的版本不一样了,现在pippip3可以互换使用了? 如果是这样,为了争论,我如何为Python 2而不是Python 3安装包?

您的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。 您可以通过输入pip --version来验证这一点,这与pip3 --version相同。

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

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

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

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

举例说明:

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) 中, pippip3

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

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

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

pip2 install some_pacakge

pip2.7 install some_package

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

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

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

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

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

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

鉴于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 一无所知,所以我不得不添加一个额外的别名来处理这个问题。 这是一个黑客,但它有效,我知道它的作用:

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。

Python 3.6 是通过 macports 安装的。

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

不知何故pip install会做正确的事情并击中我的 virtualenv,但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,第一行就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM