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
时收到的消息相同。
这是否意味着在以前的版本中,情况有所不同,现在pip
和pip3
可以互换使用?如果是这样,并且为了争论,我如何为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】:我认为pip
、pip2
和pip3
不是指向同一个可执行文件路径的软链接。在我的 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
相同的可执行文件路径的软链接。
您可以使用以下命令检查您的pip
和pip3
真实路径在哪里:
$ 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 -l
和pip 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,我认为您可以使用 pip2
和 pip2.7
来安装专门用于 Python 2 的软件包,例如
pip2 install some_pacakge
或
pip2.7 install some_package
您可以使用pip3
或pip3.5
专门为Python 3 安装包。
【讨论】:
【参考方案10】:这是一个棘手的话题。最后,如果您调用pip
,它将调用pip2
或pip3
,具体取决于您如何设置系统。
【讨论】:
以上是关于pip 或 pip3 为 Python 3 安装包?的主要内容,如果未能解决你的问题,请参考以下文章