¿Cómo ejecutar scripts de Python en Windows?

Tengo un script simple blah.py (usando Python 2):

import sys print sys.argv[1] 

Si ejecuto mi script por:

 python c:/..../blah.py argument 

Imprime argumento pero si ejecuto script por:

 blah.py argument 

se produce un error:

IndexError …

Así que los argumentos no pasan al guión.

python.exe en PATH. Carpeta con blah.py también en PATH.
python.exe es el progtwig predeterminado para ejecutar archivos * .py.

¿Cuál es el problema?

Cuando ejecutas un script sin escribir “python” al frente, necesitas saber dos cosas acerca de cómo Windows invoca el progtwig. Lo primero es averiguar qué tipo de archivo Windows cree que es:

     C: \> assoc .py
     .py = Python.File

A continuación, necesita saber cómo Windows está ejecutando cosas con esa extensión. Se asocia con el tipo de archivo “Python.File”, por lo que este comando muestra lo que hará:

     C: \> ftype Python.File
     Python.File = "c: \ python26 \ python.exe" "% 1"% *

Así que en mi máquina, cuando escribo “blah.py foo”, ejecutará este comando exacto, sin diferencia en los resultados que si yo mismo lo hubiera escrito todo:

     "c: \ python26 \ python.exe" "blah.py" foo

Si escribe lo mismo, incluidas las comillas, obtendrá resultados idénticos a los que acaba de escribir “blah.py foo”. Ahora estás en posición de resolver el rest de tu problema por ti mismo.

(O publique más información útil en su pregunta, como copias reales cortadas y pegadas de lo que ve en la consola. Tenga en cuenta que las personas que hacen ese tipo de cosas obtienen sus preguntas, las obtienen puntos de reputación y más personas es probable que les ayude con buenas respuestas.)

Traído de los comentarios:

Incluso si assoc y ftype muestran la información correcta, puede suceder que los argumentos se eliminen. Lo que puede ayudar en ese caso es corregir directamente las claves de registro relevantes para Python. Selecciona el

 HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command 

clave para:

 "C:\Python26\python26.exe" "%1" %* 

Probablemente, anteriormente, %* faltaba. Del mismo modo, establecer

  HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 

al mismo valor. Consulte http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

configuración de registro de ejemplo para python.exe HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command La ruta del registro puede variar, use python26.exe o python.exe o lo que ya esté en el registro.

introduzca la descripción de la imagen aquí HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

debe hacer que la aplicación predeterminada para manejar archivos python sea python.exe.

haga clic derecho en un archivo * .py, seleccione el diálogo “Abrir con”. Allí, seleccione “python.exe” y marque “siempre use este progtwig para este tipo de archivo” (algo así).

entonces sus archivos python siempre se ejecutarán usando python.exe

Además, si desea poder ejecutar sus scripts de Python sin escribir el .py (o .pyw ) al final del nombre del archivo, debe agregar .PY (o .PY;.PYW ) a la lista de extensiones en la variable de entorno PATHEXT.

En Windows 7:

clic derecho en la computadora
Haga clic izquierdo en Propiedades
Haga clic izquierdo en Configuración avanzada del sistema
haz clic izquierdo en la pestaña Avanzado
clic izquierdo en Variables de entorno …
debajo de “variables del sistema”, desplácese hacia abajo hasta que vea PATHEXT
clic izquierdo en PATHEXT para resaltarlo
clic izquierdo Editar …
Edite el “Valor variable” para que contenga ;.PY (la tecla Fin salta hasta el final)
clic izquierdo Aceptar
clic izquierdo Aceptar
clic izquierdo Aceptar

Nota n. ° 1: las ventanas de la línea de comandos no verán que el cambio se cierre y se vuelva a abrir.

Nota # 2: la diferencia entre las extensiones .py y .pyw es que la primera abre un indicador de comando cuando se ejecuta, y la última no.

En mi computadora, agregué ;.PY;.PYW como las últimas extensiones (de prioridad más baja), por lo que los valores “antes” y “después” de PATHEXT fueron:

antes: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

después de .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

Aquí hay algunos comandos instructivos:

 C:\>echo %pathext% .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW C:\>assoc .py .py=Python.File C:\>ftype Python.File Python.File="C:\Python32\python.exe" "%1" %* C:\>assoc .pyw .pyw=Python.NoConFile C:\>ftype Python.NoConFile Python.NoConFile="C:\Python32\pythonw.exe" "%1" %* C:\>type c:\windows\helloworld.py print("Hello, world!") # always use a comma for direct address C:\>helloworld Hello, world! C:\> 

¿Cómo ejecutar scripts de Python en Windows?

Podrías instalar pylauncher . Se utiliza para iniciar archivos .py, .pyw, .pyc, .pyo y es compatible con varias instalaciones de Python:

 T\:> blah.py argument 

Puede ejecutar su script de Python sin especificar la extensión .py si tiene .py, .pyw en la variable de entorno PATHEXT:

 T:\> blah argument 

Agrega soporte para shebang ( #! Header line) para seleccionar la versión de Python deseada en Windows si tiene varias versiones instaladas. Podría usar la syntax compatible con * nix #! /usr/bin/env python #! /usr/bin/env python .

Puede especificar la versión explícitamente, por ejemplo, para ejecutar la última versión de Python 3 instalada:

 T:\> py -3 blah.py argument 

También debería solucionar su problema de sys.argv como un efecto secundario.

Encontré el mismo problema pero en el contexto de la necesidad de empaquetar mi código para usuarios de Windows (provenientes de Linux). Mi paquete contiene varios scripts con opciones de línea de comandos.

Necesito estos scripts para instalarlos en la ubicación adecuada en las máquinas de los usuarios de Windows para que puedan invocarlos desde la línea de comandos. Como el paquete es supuestamente fácil de usar, pedir a mis usuarios que cambien su registro para ejecutar estos scripts sería imposible.

Encontré una solución que la gente de Continuum usó para los scripts de Python que vienen con su paquete Anaconda. Revise su directorio de Anaconda / Scripts para ver ejemplos.

Para una test script de Python, cree dos archivos: un test.bat y un test-script.py .

test.bat tiene el siguiente aspecto (los archivos .bat en Anaconda\Scripts llaman a python.exe con una ruta relativa que python.exe para mis propósitos):

 @echo off set PYFILE=%~f0 set PYFILE=%PYFILE:~0,-4%-script.py "python.exe" "%PYFILE%" %* 

test-script.py es su script de Python real:

 import sys print sys.argv 

Si deja estos dos archivos en su directorio local, puede invocar su script Python a través del archivo .bat haciendo

 test.bat hello world ['C:\\...\\test-scripy.py', 'hello', 'world'] 

Si copia ambos archivos en una ubicación que se encuentra en su PATH (como Anaconda\Scripts ), incluso puede invocar su secuencia de comandos .bat sufijo .bat

 test hello world ['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world'] 

Descargo de responsabilidad: no tengo idea de lo que está pasando y cómo funciona, por lo que agradecería cualquier explicación.

En Windows ,

Para ejecutar un módulo de python sin escribir “python” ,

-> Haga clic derecho en cualquier archivo python (*. Py)

-> Establezca el abierto con la propiedad en “python.exe”

-> Marque la casilla “Usar siempre este progtwig para este tipo de archivo”

-> Agregue la ruta de acceso de python.exe al entorno de variables, por ejemplo, agregue C: \ Python27 a la variable de entorno PATH.

Para ejecutar un módulo de Python sin escribir la extensión “.py”

-> Edite la variable del sistema PATHEXT y agregue la extensión “.PY” a la lista.

Encontró una respuesta increíblemente útil aquí : ¿Cómo ejecutar diferentes versiones de Python en cmd?

Yo sugeriría usar la utilidad Python Launcher para Windows que se introdujo en Python 3.3 hace un tiempo. También puede descargarlo manualmente e instalarlo directamente desde el sitio web del autor para usarlo con versiones anteriores de Python 2 y 3.

Independientemente de cómo lo obtenga, después de la instalación se asociará con todas las extensiones de archivo estándar de Python (es decir, los archivos .py, .pyw, .pyc y .pyo). No solo podrá controlar explícitamente qué versión se usa en el símbolo del sistema, sino también en cada script agregando los comentarios Linux / Unix-y shebang #! / Usr / bin / env pythonX en la comienzo de tus scripts de Python.

Como sugiere JF Sebastian, Python Launcher para Windows es la mejor y la opción predeterminada para lanzar diferentes versiones de Python en Windows. Solía ​​ser una herramienta de terceros, pero ahora es oficialmente compatible desde Python 3.3.

Nuevo en la versión 3.3.

El iniciador de Python para Windows es una utilidad que ayuda en la ubicación y ejecución de diferentes versiones de Python. Permite que los scripts (o la línea de comandos) indiquen una preferencia por una versión específica de Python, y localizarán y ejecutarán esa versión.

Esta es una gran herramienta, solo úsala!

¿Puedes ejecutar python.exe desde cualquier mapa? Si no lo hace, compruebe si tiene los valores adecuados para python.exe en el entorno PATH

¿Estás en el mismo directorio que blah.py. Verifique esto emitiendo el comando -> edite blah.py y verifique si puede abrir este archivo

EDITAR:

En ese caso no puedes. ( Python Arg significa que usted llama python.exe con algunos parámetros que Python asume que es el nombre de archivo del script que desea ejecutar)

Puede crear un archivo bat con líneas en su mapa de ruta y ejecutar el archivo .bat

Ejemplo:
En uno de los mapas de ruta, cree blah.py.bat Editar archivo y poner línea

 python C:\Somedir\blah.py 

Ahora puede ejecutar blah.py desde cualquier lugar, ya que no necesita poner extensión .bat al ejecutar archivos bat

Si eso es lo que entendí, es así:

 C:\Users\(username)\AppData\Local\Programs\Python\Python(version) 

COPIAR (no eliminar) python.exe y cambiarle el nombre a py.exe y ejecutar:

 py filename.py 

Simplemente ejecute el comando:

 C:>python .\file_name.py 

Suponiendo que el nombre del archivo esté dentro de la misma carpeta y Python ya se haya agregado a las variables de entorno.