2012-05-10 1 views
5

I miei script Python funzionano bene da IDLE, ma quando provo a eseguirli dalla riga di comando, le cose vanno male. Per prima cosa ho avuto problemi nell'importazione di pygame, ma ho aggiunto C: \ Python27 \ Lib \ site-packages alla variabile di ambiente PYTHONPATH e tutto andava bene, pensavo. Tuttavia, ora quando cerco di eseguire qualcosa dalla riga di comando, ottengo questo:Python non può gestire l'importazione tramite la riga di comando

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 

Qualche idea?

Questo non è un problema di localizzazione; quando provo ad eseguire un altro script dalla riga di comando, ottengo questo:

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 

e che la sintassi è sicuramente OK ...

Pong.py comincia così:

#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

Sei sicuro che lo script sia esattamente uguale a quello che stai utilizzando dall'IDE? Sembra che l'affermazione if sia sulla linea sbagliata dallo stactkrace. –

+0

È lo stesso identico script, l'istruzione if non è nemmeno nel mio file! È in C: \ Python27 \ Lib \ ntpath.py. Anche quella sintassi mi sembrava strana ... – ian93

+0

Perché stai usando 'ntpath' invece di' os.path'? – japreiss

risposta

10

Mi sembra che tu abbia due diverse versioni di Python sul tuo computer. Una è una versione più recente che accetta la versione di Python dell'espressione ternaria e una è una versione precedente. Quando si utilizza IDLE, viene chiamata la versione più recente. Quando si usa la riga di comando, viene chiamata la versione precedente. È possibile confermare o confutare questa ipotesi eseguendo python -V dalla riga di comando.

Per l'elaborazione, il supporto per le espressioni condizionali è stato aggiunto in Python 2.5. Quindi, quando hai modificato PYTHONPATH, hai finito con l'esecuzione di un nuovo file python (da 2.7, sembra) con una versione precedente di python (2.4, secondo il tuo test).

+1

Ho appena commentato questo sopra ... Ora devo rintracciare la vecchia versione ... – ian93

+0

Sì, l'ho trovato ... il colpevole era Lilypond, che stava eseguendo un exe Python24 separato e aveva aggiunto la sua directory bin al PATH davanti al mio cestino Python27. Quindi l'ho rimosso e tutto va bene. Grazie per il vostro aiuto ragazzi! – ian93

0

Assicurati che il tuo python della riga di comando sia almeno versione 2.5 perché, prima di allora, non esisteva un operatore ternario (http://marc-abramowitz.com/archives/2008/05/18/python-ternary-operator /).

+0

Sì, quello era il problema, un po '. – ian93