2012-05-10 15 views
5

Moje skrypty pythona działają poprawnie od IDLE, ale kiedy próbuję je uruchomić z wiersza poleceń, wszystko idzie nie tak. Najpierw miałem problemy z importowaniem pygame, ale dodałem C: \ Python27 \ Lib \ site-packages do zmiennej środowiskowej PYTHONPATH i wszystko było dobrze, pomyślałem. Jednak teraz, gdy próbuję uruchomić coś z wiersza poleceń, otrzymuję:Python nie może obsłużyć importowania za pomocą wiersza polecenia

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 

Jakieś pomysły?

To nie jest problem lokalizacyjny; gdy próbuję uruchomić inny skrypt z linii poleceń, otrzymuję to:

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 

i że składnia jest zdecydowanie OK ...

Pong.py zaczyna tak:

#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

Czy jesteś pewien, że skrypt jest dokładnie taki sam jak ten, z którego korzystasz z IDE? Wygląda na to, że instrukcja if znajduje się w niewłaściwym wierszu ze stactkrace. –

+0

To jest dokładnie ten sam skrypt, instrukcja if nie jest nawet w moim pliku! Jest w C: \ Python27 \ Lib \ ntpath.py. Ta składnia również wydawała mi się dziwna ... – ian93

+0

Dlaczego używasz 'ntpath' zamiast' os.path'? – japreiss

Odpowiedz

10

Wydaje mi się, że masz na komputerze dwie różne wersje Pythona. Jedna to nowsza wersja, która akceptuje wersję trójskładnikową w języku Python, a druga jest starszą wersją. Gdy używasz IDLE, wywoływana jest nowsza wersja. Podczas korzystania z wiersza poleceń wywoływana jest starsza wersja. Możesz potwierdzić lub odrzucić tę hipotezę, uruchamiając python -V z wiersza poleceń.

Aby rozwinąć, obsługa wyrażeń warunkowych została dodana w Python 2.5. Więc kiedy zmodyfikowałeś PYTHONPATH, skończyło ci się uruchamianie nowszego pliku pythona (z 2.7, brzmi jak) ze starszą wersją pythona (2.4, zgodnie z twoim testem).

+1

Po prostu skomentowałem to powyżej ... Teraz muszę wyśledzić stara wersja ... – ian93

+0

Tak, znalazłem ... winowajcą była firma Lilypond, która uruchomiła osobny plik Python24 i dodała swój katalog bin do ścieżki PATH przed moim bin Python27. Więc usunąłem go i wszystko jest w porządku. Dzięki za pomoc! – ian93

0

Upewnij się, że python linii poleceń ma co najmniej wersję 2.5, ponieważ wcześniej nie było operatora trójskładnikowego (http://marc-abramowitz.com/archives/2008/05/18/python-ternary-operator /).

+0

Tak, to był problem, trochę. – ian93

Powiązane problemy