Кто-нибудь знает это? Я никогда не мог найти ответ.
Почему "#!/Usr/bin/env python" предположительно более корректен, чем просто "#!/Usr/bin/python"?
Ответ 1
Если вы склонны устанавливать python в разных и интересных местах вашего PATH (как в $PATH
в типичных оболочках Unix, %PATH
на обычных Windows-системах), использование /usr/bin/env
будет соответствовать вашей прихоти (ну, в Unix-подобных средах по крайней мере), идя прямо на /usr/bin/python
, не будет. Но потеря контроля над версией Python, на которой работают ваши скрипты, не является выгодной сделкой... если вы посмотрите на мой код, вы, скорее всего, начнете с него, например, #!/usr/local/bin/python2.5
, а не с открытого и принимающего #!/usr/bin/env python
- предполагая, что script важен, мне нравится, чтобы он работал с конкретной версией, которую я тестировал, и разработал ее, а не полуслучайным; -).
Ответ 2
От wikipedia
Shebangs указывают абсолютные пути к системным исполняемым файлам; это может вызвать проблемы с системами, которые имеют нестандартные макеты файловой системы
Часто программа /usr/bin/env может использоваться для обхода этого ограничение
Ответ 3
он находит исполняемый файл python в вашей среде и использует это. это более портативно, поскольку python может не всегда находиться в /usr/bin/python. env всегда находится в/usr/bin.
Ответ 4
Он находит "python" также в /usr/local/bin, ~/bin,/opt/bin,... или везде, где он может скрываться.
Ответ 5
Вы можете найти это сообщение, представляющее интерес: http://mail.python.org/pipermail/python-list/2008-May/661514.html
Это может быть лучшее объяснение: http://mail.python.org/pipermail/tutor/2007-June/054816.html