2011-09-27 652 views
42

Tengo algunos pequeños scripts de utilidad escritos en Python que quiero que se puedan usar tanto en Windows como en Linux. Quiero evitar tener que invocar explícitamente el intérprete de Python. ¿Hay alguna manera fácil de apuntar la notación shebang a las ubicaciones correctas tanto en Windows como en Linux? Si no es así, ¿hay alguna otra manera de permitir la invocación implícita del intérprete de Python tanto en Windows como en Linux sin tener que modificar el script cuando se transfiere entre sistemas operativos?Nota de Shebang: ¿Scripts de Python en Windows y Linux?

Editar: El soporte de shebang en Windows se proporciona Cygwin, pero quiero utilizar el intérprete nativo de Windows Python en Windows, no el de Cygwin.

Edición n. ° 2: Parece que la notación shebang anula las asociaciones de archivos en los terminales Cygwin. Creo que podría simplemente desinstalar Cygwin Python y symlink/usr/bin/python para Windows nativo Python.

+6

No creo que Windows tiene ningún tipo de apoyo tinglado. Podría intentar crear una asociación de archivos con el intérprete de Python para archivos .py. –

+0

Siguiendo el comentario de Nic ODell: Cada vez que instalé Python en una caja de Windows, el proceso de instalación se encargó de crear la asociación de archivos .py. Esto siempre ha estado usando el instalador de Python para Windows desde el sitio python.org. – GreenMatt

+0

@eryksun Gracias. –

Respuesta

0
No

con tinglado ... pero que podría ser capaz de crear una asociación de archivos, consulte this SO question que se ocupa de Perl y las respuestas asociadas que también sea pertinente ya que no hay problemas conocidos con Windows y la entrada estándar/redirección a cabo ..

31

A menos que esté utilizando cygwin, windows no tiene soporte shebang. Sin embargo, cuando instala Python, agrega como asociación de archivos para .py. Si pone solo el nombre de su script en la línea de comando, o hace doble clic en él en el explorador de Windows, se ejecutará a través de python.

Lo que hago es incluir un shebang #!/usr/bin/env python en mis scripts. Esto permite el soporte de shebang en Linux. Si lo ejecuta en una máquina de Windows con Python instalado, entonces la asociación de archivos debe estar allí, y se ejecutará también.

+4

Es bueno incluir el número de versión de Python. "python" no se vincula con "python2.7" en todas las distribuciones. –

+0

@mid_kid, por eso utilicé env para obtener la versión de python que el usuario ha especificado como predeterminada. –

+1

Mi punto es que ese no es siempre el correcto. Especialmente cuando distribuyes tu script. –

2

Instalar pywin32. Una de las cosas buenas es que configura la asociación de archivos de * .py al intérprete de Python.

23

Lea sobre Python Launcher for Windows en los documentos, que fue descrito inicialmente en PEP 397. Deja definir configuraciones de shebang personalizadas en una ini (por ejemplo, para usar pypy), pero listas para usar puedes utilizar shebangs virtuales como #!/usr/bin/env python3, o shebangs con rutas reales como #!C:\Python33\python.exe. También puede agregar opciones de línea de comandos a un shebang. Por ejemplo, el siguiente shebang agrega la opción para ingresar al modo interactivo después de que termina el script: #!/usr/bin/python3 -i.

Python 3.3 asocia los tipos de archivo .py (consola) y .pyw (GUI) con los nombres respectivamente launchers, py.exe y pyw.exe, para habilitar el soporte shebang para scripts en Windows. Los nuevos iniciadores se instalan en la carpeta raíz de Windows (es decir, %SystemRoot%) cuando se instalan para todos los usuarios. De lo contrario, querrá agregar el directorio de instalación al PATH para usar py.exe en el shell cmd. Luego, desde la línea de comandos, puede ejecutar py -2, py -3, py -2.6, py -3.3-32 (32 bits), y así sucesivamente. El iniciador es útil cuando se combina con -m para ejecutar un módulo como un script, p. py -3 -m pip install.

También hay una versión de pylauncher que se puede instalar por separado si sólo utiliza Python 2.

Cuestiones relacionadas