我把colorize.py包裹放上去PyPi,发现了以下奇怪的行为。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
Run Code Online (Sandbox Code Playgroud)
但是,在我的同一台Ubuntu 16.04.4 LTS笔记本电脑上,如果我使用安装pip,则第一行已被替换:
$ pip install colorize.py
$ head -n1 $(which colorize.py)
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
另一方面,我的朋友在她的 OS X 笔记本电脑上运行相同的安装命令,并获得原始的解释器行。
这是怎么回事,是否可以pip在执行安装时强制不更改解释器行?
这是故意这样做的:如果您安装了多个 Python,则将此文件作为可执行文件运行将始终调用它所安装的 Python,无论您当前的PATH. 请参阅使用另一个版本的 python 运行 pytest,了解这会产生影响的情况——具体来说,可以防止基于 Python 的系统脚本被破坏。
pip/_vendor/distlib/scripts.py:_make_script()是完成这项工作的代码(查找“shebang”)。
绝对没有理由(因此没有提供方法)禁用此功能:使用与安装目的不同的安装运行脚本实际上肯定会破坏它。如果你真的想要的话,你可以随时跑<different python> <path_to_script.py>。正如 Python 的座右铭所说:“让正确的事情变得简单,让错误的事情变得困难”。
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |