#!/usr/bin/env python:出现“command not found”和“Permission Denied”错误

6

我在文件的顶部有#!/usr/bin/env python。那么当我运行文件时它应该工作吗?但是它并没有。当我使用python file.py时它才能工作。

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk 

class App1:
  def __init__(self):
    self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    self.window.show()

  def main(self):
    gtk.main()

if __name__ == "__main__":
  app = App1()
  app.main()

Python这里发生了什么事情:

jiewmeng@jiewmeng:/labs/projects/learnPython$ app1.py
app1.py: command not found
jiewmeng@jiewmeng:/labs/projects/learnPython$ ./app1.py
bash: ./app1.py: Permission denied
jiewmeng@jiewmeng:/labs/projects/learnPython$ ll
total 12
drwxr-xr-x 2 jiewmeng jiewmeng 4096 2011-07-16 22:08 ./
drwxr-xr-x 4 jiewmeng jiewmeng 4096 2011-07-16 21:45 ../
-rwxrwxr-x 1 jiewmeng jiewmeng  256 2011-07-16 22:05 app1.py*

2
如果你在命令行中只输入/usr/bin/env python,Python解释器会启动吗? - Michael Berkowski
3
如果执行命令时出现 command not found 错误,那是因为 $PATH 中没有包含 .(点号),解决方法是执行命令 PATH=$PATH:. app1.py,这样就能避免这个错误。请注意,此命令不会更改原有意思,只是将路径添加到环境变量中,以便让系统找到该文件。 - Chris Morgan
@jiewmeng - 你解决了这个问题吗? - mac
4个回答

7

在评论中,Chris提出了一个非常好的建议。如果你属于sudoer组(即可以修改属于其他用户的文件),而Chris的建议不起作用时,Peter的答案涵盖了你应该做什么。下面是你的下一个选项。

在命令行中输入:

which python

这个命令会告诉你Python安装的位置。然后,你可以相应地修改Python文件中的shebang行。例如,在我的系统上:

$ which python
/usr/bin/python

因此,我的Shebang应该是:
#!/usr/bin/python

请注意,这样做会使您的文件在您的系统上工作,但很有可能会导致它无法在其他系统上运行...


0

像这样的基本Python代码发生了什么:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "Hello World !"

也许问题出在 GTK 或其他方面,而不是 #!/usr/bin/env python


0

看起来最有可能的问题是您没有执行 /usr/bin/env 的权限。尝试sudo chmod 755 /usr/bin/env。肯定这不是正常状态,所以有人一定手动破坏了 /usr/bin/env 的权限。


1
我不相信这就是答案。在Ubuntu 11.04上使用bash 4.2.8,如果我给它错误的权限,我会得到bash: ./file.py: /usr/bin/env: bad interpreter: Permission denied - Chris Morgan

0
在Windows 10中:开始按钮->“管理应用程序执行别名”->关闭全部
错误原因:当你在cmd中输入“python”时,它会打开Microsoft Store。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接