Shebang werkt niet met python3

Ik heb het volgende programma:

#!/usr/local/bin/python3
print("Hello")

Via terminal doe ik test.pyen krijg ik:

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'

Als ik in plaats daarvan python3 test.pytyp dat het werkt, krijg ik:

Hello

P.S. which python3—-> /usr/local/bin/python3


Antwoord 1, autoriteit 100%

Houd in het algemeen rekening met enkele valkuilen:

  1. stel de uitvoerbare vlagin op het script: chmod u+x test.py

  2. Probeer uit te voeren met een voorgaande punt “./”, dus bel ./test.pyanders kan het een ander script uitvoeren vanuit uw PATH

  3. Zorg er ook voor dat geen Windows Line-eindes heeft , dit lijkt ook de Shebang-evaluatie te voorkomen. Er zijn enkele suggesties in de buurt, b.v. in dit antwoord , over het converteren van het formaat.

    Indien python3 test.pyWorks, dan zijn de Windows Line-eindes waarschijnlijk uw probleem.

  4. #!/usr/bin/env python3is de beste manier om de Shebang te definiëren (dwz gebruik dit als eerste regel van uw script), sindsdien Het python-binair kan ergens anders worden geïnstalleerd. envZAL DE PATHMilieu Inspecteren om het binair bestand te vinden

  5. Zoals @Shaileshkumarmpatel heeft opgemerkt in de opmerkingen hier, zorg er dan voor dat er geen afspraken van de verkeerde lijn (kleurenpersonages enz.)

EDIT: De vorm van Fout van de OP ziet eruit als Windows Line-eindes aan mij. Ik heb ze ook gehad met verschillende output


Antwoord 2, Autoriteit 3%

Windows-eindlijn was ook mijn probleem. Het schrijven van hetzelfde programma met een Linux-editor zoals VI opgelost het voor mij. Ook, met behulp van “Minder” -opdracht, was ik in staat om de Windows End Line-tekens

te zien


Antwoord 3

U kunt de ImportError: No module named '_sysconfigdata_m'omdat /usr/lib/command-not-foundis verbroken op uw systeem vanwege de Ubuntu Bug .

Om dit te omzeilen, voert u ./test.pyuit, niet test.py— de huidige map bevindt zich gewoonlijk niet in $PATH(vanwege veiligheidsredenen) en daarom moet u het pad expliciet specificeren, anders wordt de opdracht niet gevonden die ertoe kan leiden dat u /usr/lib/command-not-foundprobeert uit te voeren, wat resulteert in de ImportError.

Als ./test.pymislukt met dezelfde fout, controleer dan of er geen '\r\v\f'(onverwachte witruimte) in de keet(print(repr(open('test.py', 'rb').readline()))). Als test.pyWindows nieuwe regels gebruikt, dan is de poging om '/usr/local/bin/python3\r'te vinden (let op: '\r'als gevolg van '\r\n'nieuwe regel) zal waarschijnlijk mislukken, wat de fout kan veroorzaken.


Antwoord 4

Een andere reden kan de aanwezigheid zijn van de byte ordermarkering (BOM)aan het begin van het bestand, als het bestand een Unicode-codering gebruikt.

De aanwezigheid van de stuklijst was mijn probleem voor mijn Python-script gecodeerd in UTF-8. Ik heb de stuklijst verwijderd met mijn teksteditor Geany, maar Notepad++ kan het ook verwijderen, en ik kon mijn script uitvoeren met een beginnende shebang-regel met ./myscript.py .

Om Wikipedia te citeren:

De Unicode-standaard staat de stuklijst toe in UTF-8, maar vereist niet:
of het gebruik ervan aanbevelen. Bytevolgorde heeft geen betekenis in UTF-8 […]

Other episodes