pip 和 pip3 - 都指向 python3.5?

pip and pip3 - both pointing to python3.5?

我今天开始尝试 shade;并在我的 ubuntu 16.04 系统上为 python2 和 python3 安装了它;使用:

sudo pip install shade

分别

sudo pip3 install shade

两个命令都通过了;我还真没注意。

然后我尝试运行这个小测试脚本:

from shade import *

simple_logging(debug=True)
conn = openstack_cloud(cloud='myopenstack')
images = conn.list_images()
for image in images:
  print(image)

使用 python3,我得到一个证书错误(这很好,我会很惊讶地发现我们的 内部 基础设施使用正确的证书)。

但为了确定,我也想 运行 和 python2.7;我被告知:

ImportError: No module named shade

所以,我仔细看看 pip 和 pip3 必须说什么:

> pip -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)
> pip3 -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)

看起来 pippip3 实际上都在处理我的 python3 安装,但是当我这样做时:

 > python --version
 Python 2.7.12
 > python3 --version
 Python 3.5.2

有人知道吗?可能是什么原因造成的,或者如何为 python2/pip 实际安装 shade?

根据要求:

> for i in pip pip3 python python3 ; do type $i ; done
pip is /usr/local/bin/pip
pip3 is /usr/local/bin/pip3
python is /usr/bin/python
python3 is /usr/bin/python3
python -m pip

这将使用 python 可以看到的 pip 版本。

您在 /usr/local/bin/ 中 python3 的 pip 的本地安装隐藏了 /usr/bin 中 pip 的系统安装。为了使用系统默认的pip,您可以:

  • 明确指定路径:sudo /usr/bin/pip install shade
  • 删除 pip 的本地安装:sudo rm /usr/local/bin/pip
  • 将您的 $PATH 更改为更喜欢 /usr/bin 而不是 /usr/local/bin
  • 使用来自 /usr/binpip2 别名:sudo pip2 install shade
  • 从系统存储库安装 python3sudo apt-get install python3。如果您走这条路,请不要忘记删除本地 python3 安装。

pip3 看起来像默认选项 pip 使用。尝试使用 pip2 来显式安装 Python 2 包。

只需将 /usr/local/bin/pip 的第一行更改为:

#!/usr/bin/python

/usr/local/bin/pip3的第一行为:

#!/usr/bin/python3

然后就可以正常运行了:

> pip -V
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
> pip3 -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)

我 运行 遇到了这个问题(pip 与 Python 3 相关联),这是由于 pip 安装程序将 pip 更新为指向 Python 3。我认为这是非常令人困惑的行为,因为历史上每个人都将 pip 与 Python 2 关联,将 pip3 与 Python 3 关联。我们通过执行以下操作解决了这个问题:

# install pip
curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
sudo python3 /tmp/get-pip.py
sudo python /tmp/get-pip.py # install the python2 version last so the pip binary is not overwritten with the python3 version
rm /tmp/get-pip.py

这里的关键是在安装 Python 3 pip 之后安装 Python 2 pip。