python3.6-venv 劫持 pip。什么是防止这种情况的方法?

python3.6-venv hijacks pip. what is a way to prevent this?

我正在查找安装失败的原因。我有一个全新的 ubuntu xenial 安装。我有几个不同的项目,每个项目都涉及需要不同版本 python 的依赖项,包括一个 gnuradio 项目,它似乎有合理的期望 pip 指向 python2.7。这是我的第一部分 运行:

$ sudo apt-get update
$ sudo apt-get -yq upgrade
$ sudo apt-get -yq install python-pip
$ sudo pip install --upgrade pip
$ sudo apt-get install -yq python3-pip
$ sudo pip3 install --upgrade pip
$ sudo apt-get update
$ sudo apt-get -yq upgrade
$ sudo apt-get -yq install python-dev python3-dev
$ sudo apt-get install --fix-missing python-apt
$ sudo pip install numpy scipy matplotlib pybombs virtualenv
$ sudo apt-get -yq install build-essential libffi-dev libssl-dev python3-setuptools
$ sudo pip3 install --upgrade setuptools wheel
$ sudo pip3 install numpy scipy matplotlib virtualenv
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get install python3.6
$ sudo apt-get -yq install python3.6-venv python3.6-dev
$ sudo apt-get update
$ sudo apt-get upgrade

到目前为止没有投诉,当我检查 pip 和 pip3 时,它们指向我希望它们指向的位置:

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

现在我创建了一个python3.6的虚拟环境,进去,里面pip果然指向了python3.6,我又安装了几个包,然后退出虚拟环境,突然点指向 python3.5

$ mkdir projvenv
$ python3.6 -m venv /home/username/projvenv/
$ source /home/tom/vertexprojvenv/bin/activate
(projvenv) $ pip -V
pip 9.0.1 from /home/tom/projvenv/lib/python3.6/site-packages (python 3.6)
(projvenv) $ pip install numpy scipy matplotlib
(projvenv) $ deactivate
$ pip -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)

我看了 which seems to address a purely anaconda issue, while the solution does not apply in my case. This discussion更切题,指出了pip的问题。那个特定的错误至少不是我正在发生的事情,因为我能够升级指向 python2.7 的 pip 和指向 python3.5 的 pip3,并且 pip 劫持不是由升级。非常感谢在这个问题上的任何智慧。

(编辑)

$ which pip
/usr/local/bin/pip
$ head -1 `which pip`
#!/usr/bin/python3

恢复 /usr/local/bin/pip 中的 shebang 行 — 使其成为 #!/usr/bin/python2

PS。好吧,正式来说这不是一个完整的答案,因为问题是 "How to prevent?" 我不知道什么程序改变了 shebang 行;但我怀疑是虚拟环境。