Почему "#!/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,... или везде, где он может скрываться.