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

时间:2018-05-28 01:12:11

标签: python pip pypi

我将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在执行安装时不更改解释器行?

1 个答案:

答案 0 :(得分:1)

这是故意完成的:如果你有多个Python安装,那么将这个文件作为可执行文件运行将始终调用它所安装的Python,而不管你当前的PATH。有关这会产生影响的情况,请参阅pytest running with another version of python - 具体而言,可以防止基于Python的系统脚本破坏。

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

完全没有理由(因此没有提供方法)来禁用此功能:运行与安装的安装不同的安装脚本几乎可以保证打破它。如果你真的想要它,你可以随时运行<different python> <path_to_script.py>。正如Python的座右铭所说的那样:&#34;让正确的事情变得简单,让事情变得更加困难&#34;。