Shebang无法使用python3

zer*_*uno 20 python shebang python-3.x

我有以下程序:

#!/usr/local/bin/python3

print("Hello")
Run Code Online (Sandbox Code Playgroud)

通过终端我做test.py,我得到:

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'
Run Code Online (Sandbox Code Playgroud)

相反,如果我输入python3 test.py它,我得到:

Hello

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

Dom*_*Cat 46

一般来说,要注意一些陷阱:

  1. 在脚本上设置可执行标志:chmod u+x test.py
  2. 尝试使用前面的点 "./" ./test.py执行,否则调用它可能会从你的内部执行一些其他脚本PATH
  3. 还要确保你没有windows line endings,这似乎也阻止了shebang评估.关于如何转换格式,有一些建议,例如在这个答案中.

    如果python3 test.py有效,那么windows行结尾可能是你的问题.

  4. #!/usr/bin/env python3是定义shebang的最佳方法,因为python二进制文件可能安装在其他地方.env将检查PATH环境以找到二进制文件

编辑:OP的那种错误看起来像Windows行结束给我.我也有它们,虽然有不同的输出

  • Windows 行结束也是我的问题 (2认同)

小智 5

如果 python 脚本与 Windows 机器接触过,那么值得尝试清理以下行结尾:

$ dos2unix programmer.py
Run Code Online (Sandbox Code Playgroud)