2014-03-06 21 views
10

Ich habe folgendes Programm:Shebang funktioniert nicht mit python3

#!/usr/local/bin/python3 

print("Hello") 

Via Terminal ich test.py und ich bekomme:

Traceback (most recent call last): 
    File "/usr/lib/python3.3/site.py", line 629, in <module> 
    main() 
    File "/usr/lib/python3.3/site.py", line 614, in main 
    known_paths = addusersitepackages(known_paths) 
    File "/usr/lib/python3.3/site.py", line 284, in addusersitepackages 
    user_site = getusersitepackages() 
    File "/usr/lib/python3.3/site.py", line 260, in getusersitepackages 
    user_base = getuserbase() # this will also set USER_BASE 
    File "/usr/lib/python3.3/site.py", line 250, in getuserbase 
    USER_BASE = get_config_var('userbase') 
    File "/usr/lib/python3.3/sysconfig.py", line 610, in get_config_var 
    return get_config_vars().get(name) 
    File "/usr/lib/python3.3/sysconfig.py", line 560, in get_config_vars 
    _init_posix(_CONFIG_VARS) 
    File "/usr/lib/python3.3/sysconfig.py", line 432, in _init_posix 
    from _sysconfigdata import build_time_vars 
    File "/usr/lib/python3.3/_sysconfigdata.py", line 6, in <module> 
    from _sysconfigdata_m import * 
ImportError: No module named '_sysconfigdata_m' 

Stattdessen, wenn ich tippe python3 test.py es funktioniert, erhalte ich:

Hello

PS which python3 ---->/usr/local/bin/python3

+16

Versuchen Sie '#!/Usr/bin/env python3'. –

+3

Sehen Sie sich https://github.com/limetext/lime/issues/155 an. Wenn das nicht hilft, lesen Sie https://www.google.de/search?q=ImportError%3A+No+ module + named +% 27_sysconfigdata_m% 27 – NPE

+1

@TomLese Ich bekomme immer noch Fehler – zer0uno

Antwort

21

Im Allgemeinen kümmern einige Tücken:

  1. stellen Sie die ausführbare Flag auf dem Skript: chmod u+x test.py
  2. versuchen ausführen mit einem vorangestellten Punkt“./", also rufe ./test.py an, sonst könnte es ein anderes Skript aus deinem PATH
  3. ausführen, auch sicherstellen, dass du kein Windows li hast ne Endungen, scheint dies auch die Shebang-Auswertung zu verhindern. Es gibt einige Vorschläge, z.B. in this answer, zum Umwandeln des Formats
  4. #!/usr/bin/env python3 ist der beste Weg, den Shebang zu definieren, da die Python-Binärdatei irgendwo anders installiert werden kann. env die PATH Umgebung inspizieren den binär

EDIT zu finden: Die obige Art von Fehler sieht aus wie Windows-Zeilenende zu mir. Ich hatte sie auch, mit unterschiedlichen Ausgaben, obwohl

+1

Windows Zeilenende war auch mein Problem – arod

0

Sie könnten ImportError: No module named '_sysconfigdata_m' sehen, weil /usr/lib/command-not-found auf Ihrem System wegen the ubuntu bug gebrochen ist.

es Umgehung ./test.py, nicht test.py laufen - das aktuelle Verzeichnis nicht in der Regel in $PATH (aus Sicherheitsgründen) und deshalb sollten Sie den Pfad explizit ansonsten wird der Befehl angeben nicht gefunden wird, die versuchen, führen zu laufen /usr/lib/command-not-found das ergibt die ImportError.

Wenn ./test.py mit dem gleichen Fehler fehlschlägt, dann überprüfen Sie, dass es keine '\r\v\f' (unexpected whitespace) in the shebang (print(repr(open('test.py', 'rb').readline()))) gibt. Wenn test.py Windows-Zeilenvorschübe verwendet, wird der Versuch, '/usr/local/bin/python3\r' zu finden (Hinweis: '\r' aufgrund von '\r\n' newline), wahrscheinlich fehlschlagen, wodurch der Fehler ausgelöst werden kann.