./xx.py: 第1行: import: 找不到命令

36 投票
6 回答
161294 浏览
提问于 2025-04-17 21:27

我正在尝试使用这个链接中的代码:Python urllib2 Basic Auth Problem,来下载一个需要身份验证的URL内容。

我有以下这段代码:

import urllib2, base64

request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)

但是我遇到了这样的错误:

./xx.py: line 1: import: command not found
./xx.py: line 3: syntax error near unexpected token `('
./xx.py: line 3: `request = urllib2.Request("http://api.foursquare.com/v1/user")'

这是什么问题,我该怎么解决呢?


另见:如何让一个python脚本可执行?

6 个回答

2

我也遇到过同样的问题,现在我找到了自己的解决办法。

#!/usr/bin/python

import sys
import os

os.system('meld "%s" "%s"' % (sys.argv[2], sys.argv[5]))

这是我用的代码[1]。当我运行这个脚本时,出现了这样的错误信息:

import: 找不到命令

我发现有人提到过“shebang”。如你所见,我的Python代码里有shebang。我尝试了很多方法,但始终没有找到好的解决方案。

最后,我决定自己手动输入shebang。

#!/usr/bin/python

然后把复制的那个删掉了。

结果我的问题解决了!!!

我从网上复制了代码[1]。

我猜原来复制的shebang语句里可能有一些看不见的特殊字符。

我用的是vim,有时候也会遇到类似的问题……特别是当我从网上复制一些代码片段时,这种问题就会出现……网页上可能有一些特殊字符!我在怀疑。:-)

旅者

附注)我是在Windows 7的主操作系统中复制的代码,然后粘贴到我在Ubuntu的vim中。虚拟机是Oracle虚拟机。

[1] http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

5

如果你直接运行一个脚本,比如说 ./xx.py,而这个脚本的最上面没有写类似 #!/usr/bin/env python 的内容,那么你的命令行可能会把它当成一个普通的 shell 脚本来执行。根据 POSIX 的规定

如果 execl() 函数因为类似于 [ENOEXEC] 的错误而失败,命令行会执行一个相当于用找到的路径名作为第一个参数来调用 shell 的命令,并把其他参数传递给新的 shell,除了新的 shell 中的 "$0" 可能会被设置为命令名。如果可执行文件不是文本文件,命令行可能会跳过这个命令的执行。在这种情况下,它会写出一个错误信息,并返回状态码 126。

注意:如果你的文本文件没有 shebang,你可能会遇到 ENOEXEC 的错误。

没有 shebang 的话,你的命令行会试图把 Python 脚本当成 shell 脚本来运行,这样就会出现错误:import: command not found

另外,如果你用 python xx.py 来运行你的脚本,那么就不需要 shebang。你甚至不需要把它设置为可执行的 (+x)。在这种情况下,你的脚本是由 python 来解释的。

在 Windows 系统上,除非安装了 pylauncher,否则 shebang 是不被使用的。这个工具在 Python 3.3 及以上版本中包含

10

当你在第一次使用“import”时看到“import: command not found”的错误,这通常是因为解析器没有使用与你的.py文件匹配的字符编码。特别是当你的.py文件不是使用ASCII编码时,这个问题更常见。

解决这个问题的方法是在你的.py文件顶部指定正确的编码,以确保它与你的文件字符编码一致。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
11

你是在使用基于UNIX的操作系统,比如Linux吗?如果是的话,建议在你的脚本最上面加一行shebang

#!/usr/bin/python

在这行下面,你可以写下你已经有的其他代码(在你的情况下是xx.py)。然后在终端里运行同样的命令:

$ python xx.py

这样就可以正常工作了,因为现在它会把这些当作Python代码来解释。不过在终端运行时,这个并不重要,因为python已经告诉系统怎么解释它了。这样做的好处是,你可以在终端之外执行这个脚本,也就是说,你可以通过文件浏览器来运行它。

73

这不是跟身份验证有关的问题,问题出在第一步。你的 import 没有成功。所以,试着在第一行写这个:

#!/usr/bin/python

然后暂时用这个来运行:

python xx.py

这里给你一个解释:

>>> abc = "Hei Buddy"
>>> print "%s" %abc
Hei Buddy
>>> 

>>> print "%s" %xyz

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    print "%s" %xyz
NameError: name 'xyz' is not defined

一开始,我初始化了 abc 这个变量,它运行得很好。另一方面,xyz 这个变量没有初始化,所以它就不能正常工作!

撰写回答