Shebang无法使用python3

时间:2014-03-06 11:00:35

标签: python python-3.x shebang

我有以下程序:

#!/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

P.S。 which python3 ----&gt; /usr/local/bin/python3

4 个答案:

答案 0 :(得分:40)

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

  1. 在脚本上设置可执行标志chmod u+x test.py
  2. 尝试使用前一个点执行&#34; ./",因此请调用./test.py,否则可能会在PATH内执行其他一些脚本
  3. 还要确保你没有窗口行结尾,这似乎也阻止了shebang评估。有一些建议,例如in this answer,关于如何转换格式。

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

  4. #!/usr/bin/env python3 是定义shebang的最佳方式,因为python二进制文件可能安装在其他地方。 env将检查PATH环境以查找二进制文件
  5. 编辑:OP的那种错误看起来就像是Windows行尾。我也有过它们,虽然有不同的输出

答案 1 :(得分:1)

Windows结束行也是我的问题。用像VI这样的Linux编辑器编写相同的程序可以解决我的问题。另外,使用“ less”命令,我可以看到Windows结束符

答案 2 :(得分:0)

您可能会看到ImportError: No module named '_sysconfigdata_m',因为the ubuntu bug导致/usr/lib/command-not-found因您的系统而中断。

要解决此问题,请运行./test.py,而不是test.py - 当前目录通常不在$PATH中(出于安全原因),因此您应明确指定路径,否则找不到可能导致/usr/lib/command-not-found运行导致ImportError的命令。

如果./test.py因相同错误而失败,请检查是否存在'\r\v\f' (unexpected whitespace) in the shebangprint(repr(open('test.py', 'rb').readline())))。如果test.py使用Windows换行符,那么尝试查找'/usr/local/bin/python3\r'(通知'\r'由于'\r\n'换行符)可能会失败,从而导致错误。

答案 3 :(得分:0)

如果文件使用的是Unicode编码,另一个原因可能是文件byte order mark (BOM)的开头。

BOM的存在是我使用UTF-8编码的Python脚本的问题。我使用文本编辑器Geany删除了BOM,但是Notepad ++也可以删除它,并且能够使用./myscript.py开头的shebang行来运行脚本。

引用维基百科:

Unicode标准允许使用UTF-8中的BOM,但不需要 或建议使用。字节顺序在UTF-8 [...]

中没有意义