2009-08-30 8 views
63

¿Alguien sabe esto? Nunca he podido encontrar una respuesta.¿Por qué es '#!/Usr/bin/env python' supuestamente más correcto que solo '#!/Usr/bin/python'?

+4

no es una tonelada. Estoy en OSX y la página de env es bastante ambigua allí. –

+16

@ S.Lott: ¿Lo * leyó * últimamente? En mi caja de Debian, es una de las páginas de manualidades más inútiles que he visto en mi vida, y eso es decir algo. (Aquí está toda la "Descripción": Establezca cada NOMBRE a VALOR en el entorno y ejecute COMANDO. Sí, lo borraría). – Telemachus

+0

@Telemachus: Sí, lo leí. Es por eso que encontré la entrada de Wikipedia. –

Respuesta

64

Si usted es propenso a la instalación de pitón en diversas e interesantes lugares en su camino (como en $PATH en conchas típicas de Unix, %PATH en las típicas de Windows), usando /usr/bin/env se acomodará a su capricho (bueno, en entornos de tipo Unix al menos) yendo directamente a /usr/bin/python no. Pero perder el control sobre en qué versión de Python se ejecutan tus scripts no es una ganga pura ... si miras mi código, es más probable que comiences con, por ejemplo, #!/usr/local/bin/python2.5 en lugar de abrir y aceptar #!/usr/bin/env python - asumiendo el guión es importante. Me gusta asegurarme de que se ejecute con la versión específica que he probado y desarrollado con, NO una semi-aleatoria ;-).

+38

Por supuesto, siempre puede usar #!/Usr/bin/env python2.5 para restringir el conjunto de opciones semialeatorias: =) –

+1

+1 ¡Gran explicación, gracias! No había encontrado el uso de "env" antes ... ahora tengo algo que agregar a mi bolsa de trucos de scripting. –

+3

+1 para la justificación de NO usar "env python". Me hizo darme cuenta de que si quiero usar "env python", será mejor que esté codificando el mínimo común denominador, ya que no tendría control sobre la versión de python que el usuario tiene primero en el PATH. –

5

Encuentra 'python' también en/usr/local/bin, ~/bin,/opt/bin, ... o donde sea que se pueda ocultar.

+0

gracias! en realidad me causó un problema porque, por alguna razón, env no existía. –

+3

Eso es un poco engañoso. Solo encontrará la primera "python" en sus instancias actuales de $ PATH y Python en OS X y puede ser bastante bueno para ocultarse. En particular, el marco estándar se construye desde python.org y otros tienen subdirectorios "bin" dentro del marco donde se almacenan "python" y otros ejecutables y scripts. Es muy fácil terminar con varias instancias que pueden o no tener enlaces simbólicos con ellos en los lugares habituales, como/usr/local/bin et al. Administrar $ PATH en OS X en este caso no es tan sencillo como en sistemas sin compilaciones de estilo de marco. –

+2

@KennethReitz: si '/ usr/bin/env' no existe, su sistema está roto. 'env' es una herramienta obligatoria según el estándar POSIX. – MestreLion

24

De wikipedia

Shebangs especificar rutas absolutas a ejecutables del sistema; esto puede causar problemas en sistemas que tienen diseños de sistema de archivos no estándar

A menudo, el programa/usr/bin/env se pueden utilizar para evitar este limitación

10

se encuentra el ejecutable de Python en su ambiente y lo usa. es más portátil porque python puede no estar siempre en/usr/bin/python. env siempre se encuentra en/usr/bin.

+0

env no siempre está ahí, pero estamos aumentando la probabilidad de que el script encuentre python en más máquinas. :) – Will

Cuestiones relacionadas