Shebang 不适用于 python3

新手上路,请多包涵

我有以下程序:

 #!/usr/local/bin/python3

print("Hello")

通过终端我做 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'

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

Hello

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

原文由 zer0uno 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 380
1 个回答

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

  1. 在脚本上设置 可执行标志chmod u+x test.py

  2. 尝试 使用前面的点“./”执行,因此调用 ./test.py 否则它可能会从你的 PATH 中执行其他脚本

  3. 还要确保 你没有 windows line endings ,这似乎也阻止了 shebang 评估。关于如何转换格式,有一些建议,例如 在这个答案 中。

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

  1. #!/usr/bin/env python3 是定义 shebang 的最佳方式(即将其用作脚本的第一行),因为 python 二进制文件可能安装在其他地方。 env 将检查 PATH 环境以找到二进制文件

  2. 正如@ShaileshKumarMPatel 在这里的评论中指出的那样,确保没有错误的行开头(颜色字符等)

编辑:对我来说,OP 的那种错误看起来像是 Windows 行结尾。我也有它们,虽然输出不同

原文由 DomTomCat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题