为什么 `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".
我将我的 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
。请参阅
pip/_vendor/distlib/scripts.py:_make_script()
是完成这项工作的代码(寻找 "shebang")。
绝对没有理由(因此没有提供方法)禁用此功能:运行使用与安装目的不同的安装脚本几乎肯定会破坏它。如果你真的想要它,你可以随时运行 <different python> <path_to_script.py>
。正如 Python 的格言所说:"make right things easy, make wrong things hard".