2012-03-20 11 views
8

¿Deben los módulos de biblioteca de Python comenzar con #!/usr/bin/env python?¿Los módulos de la biblioteca de Python deberían comenzar con #!/Usr/bin/env python?

En cuanto a las primeras líneas de *.py en /usr/share/pyshared (donde las bibliotecas de Python se almacenan en Debian) revela que hay dos archivos que comienzan con la línea hashbang y los que no.

¿Hay alguna razón para incluir u omitir esta línea?

+0

BTW ¿Hay algún problema con '' python'? – Kos

+0

@Kos: sí, lo hay: no funciona. Al menos no en todas partes. '/ usr/bin/env' se usa únicamente para la portabilidad. –

+1

Y también porque la ubicación del intérprete de Python real cambiará si está utilizando virtualenv o algunas de las otras herramientas populares. –

Respuesta

6

La razón por la cual algunos archivos en /usr/share/pyshared han declarado el shebang & algunos no son fáciles de explicar. Tome los archivos uno.py y pyinotify.py. El primero no tiene shebang y el segundo tiene.

  1. uno.py es un módulo de Python que se importará y utilizará en otros programas/scripts. Por lo tanto, nunca se ejecutará directamente desde la línea de comando.
  2. Por otro lado pyinotify.py contiene el tinglado y se puede ver que contiene la siguiente línea en la parte inferior (que puede hecho en un archivo ejecutable si se ejecuta una chmod u+x encima):

    if __name__ == '__main__': 
        command_line() 
    

Puede codificar el binario de python en el shebang, pero como otros lo han mencionado, usar /usr/bin/env lo hará más portátil.

0

si desea que su escritura sea un ejecutable, usted tiene que incluir esta línea

+1

Esto no responde directamente la pregunta. Por favor, mejore su respuesta. – Tadeck

+0

Si no lo hago, ¿hay alguna razón para incluir esta línea? No hay nada ejecutable en el nivel superior, solo definiciones. –

+6

-1. Esta respuesta es incorrecta. Esta línea se usa para especificar un intérprete y no para "hacer el guión y el ejecutable". Esto último se logra cambiando los permisos de archivos (en UNIX). –

5

Esta línea es una línea Shebang. Para más detalles, consulte el wikipedia article. Básicamente, especifica el intérprete con el que se puede ejecutar el archivo si se ejecuta directamente desde la línea de comandos.

No es necesario incluir esta línea en la parte superior de un archivo a menos que esté planeando ejecutarlo directamente desde el shell. Algunos módulos de Python (por ejemplo, ftplib) tienen alguna funcionalidad cuando los ejecuta directamente. Estos tendrán la línea #! en la parte superior. La mayoría no tiene esa funcionalidad y, por lo tanto, no necesita esta línea.

Cuestiones relacionadas