我有以下程序:
#!/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
附: which python3
----> /usr/local/bin/python3
一般来说,要注意一些陷阱:
chmod u+x test.py
./test.py
否则它可能会执行你的PATH
中的其他一些脚本python3 test.py
工作,那么windows行结尾可能是你的问题。#!/usr/bin/env python3
是定义shebang的最佳方式,因为python二进制文件可能安装在其他地方。 env
将检查PATH
环境以找到二进制文件编辑:OP的那种错误看起来像Windows行结束给我。我也有它们,虽然有不同的输出
你可能会看到ImportError: No module named '_sysconfigdata_m'
,因为/usr/lib/command-not-found
因你的系统而导致the ubuntu bug被打破。
要解决它,运行./test.py
,而不是test.py
- 当前目录通常不在$PATH
中(由于安全原因),因此你应该明确指定路径,否则找不到可能导致尝试运行/usr/lib/command-not-found
的命令导致ImportError
。
如果./test.py
失败并出现相同的错误,那么检查没有'\r\v\f'
(unexpected whitespace) in the shebang(print(repr(open('test.py', 'rb').readline()))
)。如果test.py
使用Windows换行符,则尝试查找'/usr/local/bin/python3\r'
(注意:由于'\r'
换行符引起的'\r\n'
)可能会失败,从而可能触发错误。