Почему `pip install`, похоже, меняет строку интерпретатора на некоторых машинах? - PullRequest
0 голосов
/ 28 мая 2018

Я положил 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

Однако на том же моемUbuntu 16.04.4 LTS ноутбук, если я установлю с использованием pip, первая строка будет заменена:

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

С другой стороны, моя подруга запускает ту же команду установки на своем ноутбуке с OS X и получаетисходная строка интерпретатора.

Что здесь происходит, и можно ли заставить pip не изменять строку интерпретатора при выполнении установки?

1 Ответ

0 голосов
/ 28 мая 2018

Это сделано намеренно: если у вас несколько установок Python, запуск этого файла в качестве исполняемого файла всегда будет вызывать Python, для которого он был установлен, независимо от вашего текущего PATH.См. pytest, работающий с другой версией python , для случая, когда это имеет значение - в частности, предотвращает поломку системных сценариев на основе Python.

pip/_vendor/distlib/scripts.py:_make_script() - это код, выполняющий эту работу (ищите «shebang»).

Абсолютно нет причин (следовательно, нет предоставленного способа) отключить эту функцию: запуск сценария с установкой, отличной от установленнойпрактически гарантированно сломать его.Если вы действительно этого хотите, вы всегда можете запустить <different python> <path_to_script.py>.Как гласит девиз Python: «Делай правильные вещи легко, усложняй неправильные».

...