¿Cómo ejecutar un programa Python directamente?

13

¿Cómo ejecutar un programa Python directamente?

He creado un archivo .py (por ejemplo, mnik.py ) en gedit. Funciona sin problemas en la terminal.

El comando va

python3 mnik.py

Pero cada vez que hago clic en el archivo, se abre con gedit. No puedo ejecutarlo directamente haciendo clic.

¿Qué hacer?

Priyadarshi Paul
fuente
44
@kasperd Escribir python3en la línea de comando con un argumento es una excelente manera de ejecutar scripts de Python. De hecho, es la forma más fácil de ejecutar un programa que requiere un terminal y argumentos (como muchos de mis propios guiones, sino también programas como mercurial, sphinx). ¿Quiere explicar por qué lo que he estado haciendo durante más de 20 años no es la forma correcta?
Anthon
3
@kasperd Un script (o programa) Python escrito correcto no tiene que tener una línea shebang. Si no es así, sigue siendo un script de Python en todos los sentidos. Ese script simplemente no puede ejecutarse desde los shells de Linux en la forma abreviada que parece preferir. También hay entornos que no requieren que los scripts de Python tengan una línea shebang y les permitan iniciar el script haciendo doble clic.
Anthon
1
@kasperd Lo que el núcleo necesita para ./scriptnameque se ejecute un script de Python no valida su afirmación de que ejecuta un script desde la línea de comandos mediante python3. Hay diferentes formas de ejecutar scripts de Python y hacer python3 ./mnik.pytambién es una forma adecuada de hacer las cosas, es simplemente diferente (y al menos obtienes Python3 de esa manera y no Python2, ya que es más probable con la mayoría de las respuestas hasta ahora)
Anthon
1
Usar <language> <script> es una forma totalmente válida y aceptada de ejecutar un script. Sugerir que es una mala práctica debería ser mal visto.
Jacob Vlijm

Respuestas:

26

Hay dos cosas necesarias.

  1. Un script debe tener una #!línea que le indique al sistema operativo qué intérprete usar. En su caso, su primera línea en el código debe ser#!/usr/bin/env python3
  2. Debe abrir el administrador de archivos, vaya a Editar -> Preferencias -> Comportamiento, y seleccione qué hacer con los archivos ejecutables

    ingrese la descripción de la imagen aquí

    1. Finalmente, asegúrese de que su archivo en sí tenga permisos ejecutables establecidos. En la terminal que puede hacer chmod +x /path/to/script.pyy en la GUI, haga clic derecho en el archivo y modifique sus Propiedades -> Permisos

    ingrese la descripción de la imagen aquí

    ingrese la descripción de la imagen aquí

Nota sobre la línea shebang

La primera línea se llama línea shebang y debe comenzar con #!; lo que viene después es el nombre del intérprete que leerá su código. En caso de que lo esté usando python3, puede usarlo #!/usr/bin/python3o #!/usr/bin/env python3para portabilidad. Si no está utilizando código que sea específico para la versión de Python, simplemente use#!/usr/bin/env python

Nota sobre la salida del script:

Si su script imprime la salida a la consola, necesitará tener una ventana de terminal o, alternativamente, usar diálogos de GUI como zenity. Prefiere usar la Run in Terminalopción si quieres ver el código. Si desea que el script haga algo sin ver la salida de la consola, use la Runopción.

ingrese la descripción de la imagen aquí

Además, si tiene parámetros de línea de comandos, como sys.argv[1]en el script, no puede configurarlos a menos que tenga abierta la ventana de terminal.

Sergiy Kolodyazhnyy
fuente
1
@PriyadarshiPaul Eso es lo mismo que el Filesprograma en el lanzador. En Windows-Hablar sería explorador de archivos oMy Computer
Sergiy Kolodyazhnyy
@PriyadarshiPaul es nautilusen el Terminal
grooveplex
3
#!/usr/bin/env pythoninvocará Python2 en la mayoría de los sistemas Ubuntu. Aunque puede hacer que un script de Python escrito para Python3 sea compatible con Python2, no supondría que el OP lo haya hecho. #!/usr/bin/env python3parece un shebang más apropiado
Anthon
1
¿Y por qué estamos trayendo Arch Linux aquí? Tal vez parezca un poco mezquino, pero estamos hablando de Ubuntu aquí. En Ubuntu, por defecto, python está vinculado a python2.7. Si está desarrollando software, probablemente debería saber qué enlaces, si utiliza algo distinto de la versión predeterminada de su sistema operativo, especifíquelo explícitamente. Claro, podemos atender cada pregunta individual, pero por el amor de Dios, si codifica, hágalo bien.
Sergiy Kolodyazhnyy
3

Debe colocar la ubicación del programa para ejecutar su código en la primera línea y luego debe configurar el script para que se ejecute como un archivo ejecutable cambiando sus permisos. Esto supone que está iniciando sus aplicaciones desde la terminal u otro script.

Encuentra tu instalación de Python

$ which python
/usr/bin/python

Agregue la ubicación de los programas a la línea superior de su programa con un #!frente

#!/usr/bin/python

# Python code goes here....

Establecer el script de Python para tener derechos de ejecución

$ chmod 700 test.py

Ahora puedes ejecutar el script directamente

$ ./test.py

Listado de código para test.py

#!/usr/bin/python

print "test"
José
fuente
2

Si desea ejecutar este programa sin escribir python3 mnik.py, debe hacer que el script sea ejecutable y asegurarse de que python3se utiliza para ejecutarlo.

Lo primero que puedes hacer corriendo

 chmod +x mnik.py

lo segundo que puede hacer agregando como primera línea de un script una línea shebang que invoca python3 . En todos los sistemas Ubuntu con los que he trabajado que vienen con python3, puede obtener python3 agregando esta línea en la parte superior:

#!/usr/bin/env python3

Después de esos dos cambios, puede escribir /path/to/mnik.py, ./mnik.pyo simplemente mnik.py(el último requiere que el script esté en su RUTA).

Si realiza estos cambios es posible que también desee considerar el cambio de nombre mnik.pya mnik, que es una práctica común con los paquetes de Python con los comandos que se publican en PyPI.

Anthon
fuente
ok, cualquiera de estos ahora no funciona
Priyadarshi Paul
Que está bien"? ¿A qué se refiere "estos"?
Anthon
Está diciendo ** usr / bin / env: mal intérprete: No existe tal archivo o directorio **
Priyadarshi Paul
Hay al menos un /desaparecido en el frente allí. Por favor explique qué es "It" en su comentario. ¿Es el bash shell? ¿Es Windows Command.com? ¿Desde qué invoca el programa y con qué sintaxis de línea de comandos?
Anthon