2012-05-10 13 views
5

Mis scripts python funcionan bien desde IDLE, pero cuando intento ejecutarlos desde la línea de comandos, las cosas salen mal. Primero tuve problemas para importar pygame, pero agregué C: \ Python27 \ Lib \ site-packages a la variable de entorno PYTHONPATH y todo estaba bien, pensé. Sin embargo, ahora cuando intento ejecutar algo desde la línea de comandos, obtengo esto:Python no puede manejar la importación a través de la línea de comandos

C:\Users\Ian Sinke\Documents\Pong>python pong.py 
'import site' failed; use -v for traceback 
Traceback (most recent call last): 
    File "pong.py", line 3, in ? 
    import pygame 
    File "C:\Python27\Lib\site-packages\pygame\__init__.py", line 27, in ? 
    import sys, os, string 
    File "C:\Python27\Lib\os.py", line 63, in ? 
    import ntpath as path 
    File "C:\Python27\Lib\ntpath.py", line 401 
    backslash, dot = (u'\\', u'.') if isinstance(path, unicode) else ('\\', '.') 

            ^
SyntaxError: invalid syntax 

¿Alguna idea?

Esto no es un problema de localización; cuando trato de ejecutar otro script desde la línea de comandos, me sale esto:

C:\Users\Ian Sinke\Documents>python app.py 
'import site' failed; use -v for traceback 
Traceback (most recent call last): 
    File "app.py", line 4, in ? 
    import urllib2 
    File "C:\Python27\Lib\urllib2.py", line 92, in ? 
    import base64 
    File "C:\Python27\Lib\base64.py", line 346 
    with open(args[0], 'rb') as f: 
      ^
SyntaxError: invalid syntax 

y que la sintaxis es sin duda está bien ...

Pong.py comienza así:

#import sys 
import math 
import pygame 
import time 
from pygame.locals import * 

# Helper functions 
def centerdist(paddletop, balltop): 
    return balltop - paddletop - 30 

# Constants 
BLACK = 0, 0, 0 

pygame.init() 
+0

¿Está seguro de que la secuencia de comandos es exactamente la misma que la que ejecuta desde el IDE? Porque parece que la instrucción if está en la línea incorrecta de la stactkrace. –

+0

¡Es exactamente el mismo script, la declaración if ni siquiera está en mi archivo! Está en C: \ Python27 \ Lib \ ntpath.py. Esa sintaxis me pareció extraña también ... – ian93

+0

¿Por qué estás usando 'ntpath' en lugar de' os.path'? – japreiss

Respuesta

10

Esto me parece que tienes dos versiones diferentes de Python en tu computadora. Una es una versión más reciente que acepta la versión de Python de la expresión ternaria, y una es una versión anterior. Cuando usa IDLE, se llama a la versión más nueva. Cuando usa la línea de comando, se llama a la versión anterior. Puede confirmar o refutar esta hipótesis ejecutando python -V desde la línea de comandos.

Para más información, se agregó soporte para expresiones condicionales en Python 2.5. Entonces, cuando modificó PYTHONPATH, terminó ejecutando un archivo python más nuevo (desde 2.7, parece) con una versión anterior de python (2.4, según su prueba).

+1

Acabo de comentar esto antes ... Ahora tengo que buscar la versión anterior ... – ian93

+0

Sí, lo encontré ... el culpable era Lilypond, que estaba ejecutando un exe Python24 separado y había agregado su directorio bin al PATH delante de mi bin Python27. Entonces lo eliminé y todo está bien. ¡Gracias por su ayuda chicos! – ian93

0

Asegúrate de que tu línea de comando python sea al menos la versión 2.5 porque, antes de eso, no había un operador ternario (http://marc-abramowitz.com/archives/2008/05/18/python-ternary-operator /).

+0

Sí, ese era el problema, un poco. – ian93

Cuestiones relacionadas