为什么 `pip install` 似乎改变了某些机器上的解释器行?

Why does `pip install` seem to change the interpreter line on some machines?

我将我的 colorize.py 包放到 PyPi 上并发现了以下奇怪的行为。如果我从 project page 下载 colorize.py-0.9.1.tar.gz,并检查 colorize.py 的第一行,我会得到以下输出:

$ wget https://files.pythonhosted.org/packages/91/d8/805853c14a8ccf67ddfe2cf41b634395ef69a1138a0dade303bf4b7c9b45/colorize.py-0.9.1.tar.gz
$ tar xvfz colorize.py-0.9.1.tar.gz
$ head -n1 colorize.py-0.9.1/colorize.py
#!/usr/bin/env python

但是,在我的 Ubuntu 16.04.4 LTS 笔记本电脑上,如果我使用 pip 安装,则第一行已被替换:

$ pip install colorize.py
$ head -n1 $(which colorize.py)
#!/usr/bin/python

另一方面,我的朋友在她的 OS X 笔记本电脑上运行相同的安装命令,并获得原始解释器行。

这是怎么回事,是否可以强制pip在执行安装时不更改解释器行?

这是有意为之:如果您有多个 Python 安装,运行将此文件作为可执行文件将始终调用安装它的 Python,无论您的当前 PATH。请参阅 以了解这会产生不同的情况——具体来说,可以防止破坏基于 Python 的系统脚本。

pip/_vendor/distlib/scripts.py:_make_script() 是完成这项工作的代码(寻找 "shebang")。

绝对没有理由(因此没有提供方法)禁用此功能:运行使用与安装目的不同的安装脚本几乎肯定会破坏它。如果你真的想要它,你可以随时运行 <different python> <path_to_script.py>。正如 Python 的格言所说:"make right things easy, make wrong things hard".