改变我的python路径:helloworld.py返回未找到的命令 -

cke*_*ble 7 python

对这个令人尴尬的问题大肆道歉 -

我正在使用我的MacBook Pro,运行雪豹,并使用Python 2.7.1.试图运行我的第一个脚本和我所有教程的所有第一页都在嘲笑我:

我先写一下:

$ whereis python  
/usr/bin/python  
$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
Run Code Online (Sandbox Code Playgroud)

(这是我的问题吗?)

我在vim中向/ users/charles写了helloworld.py:

$ vim helloworld.py  
#!/usr/bin/python  
# Hello World Python Program  

print "Hello World!";
Run Code Online (Sandbox Code Playgroud)

尝试从终端运行它时:

$ helloworld.py
-bash: helloworld.py: command not found
Run Code Online (Sandbox Code Playgroud)

当试图从python运行它:

$ python
>>> helloworld.py
Traceback (most recent call last):
  File :<stdin>", line 1, in <module>
NameError: name 'helloworld' is not defined
Run Code Online (Sandbox Code Playgroud)

从Dive Into Python(不确定这是否相关):

$ python
>>> import sys,os
>>> print 'sys.argv[0] =',sys.argv[0]
sys.argv[0]=
>>> pathname=os.path.dirname(sys.argv[0])
>>> print 'path=',pathname
path=
>>> print 'full path=',os.path.abspath(pathname)
full path= /Users/charles
Run Code Online (Sandbox Code Playgroud)

我迷糊了!我是否需要更改其中一条路径以便找到我的脚本?

我对编程非常陌生,实际上我发现终端是你可以使用的东西.

谢谢!

Rei*_*chs 11

让我们从您收到的第一个错误开始.了解错误消息很重要.

-bash: helloworld.py: command not found
Run Code Online (Sandbox Code Playgroud)

这表明helloworld.py不是可以执行的命令.要运行该文件,您有两个选项:

  1. 使用python解释器运行它. python helloworld.py
  2. 使文件可执行,然后直接运行它. ./helloworld.py

要使文件在*nix环境中可执行,您必须更改其模式以允许执行.为此,请使用chmod命令(man chmod有关详细信息).

chmod +x helloworld.py
Run Code Online (Sandbox Code Playgroud)

这假设您位于包含helloworld.py文件的目录中.如果没有,cd首先或使用完整路径.

./是必要的,因为它告诉shell运行位于此处的文件,而不是通过查看$PATH.$PATH是可能的可执行位置的列表.当您尝试helloworld.py直接运行时,shell会尝试查找它$PATH.您想要运行本地文件,因此您必须在其前面添加./,这意味着"从这里".

顺便说一句,请注意python脚本的第一行:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

这称为shebang行,并告诉系统使用/usr/bin/python可执行文件加载文件.在内部,这意味着程序加载器将会这样做/user/bin/python helloworld.py.

最后,当您python使用无参数调用时,您将被放入交互式Python解释器会话中.>>> helloworld.py在这个环境中没有引用该名称的文件,它只是被解释为python代码.无效的python代码.这就是你得到第二个错误的原因NameError: name 'helloworld' is not defined.


jat*_*ism 8

要将Python模块或脚本转换为UNIX系统上的独立程序,您必须执行以下两项操作:

1.)确保脚本顶部有"shebang":

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

2.)确保脚本文件是可执行的.这是使用以下chmod命令完成的:

chmod +x /path/to/helloworld.py
Run Code Online (Sandbox Code Playgroud)

/path/to/是您的脚本的完全限定文件路径.如果它在当前目录中,则可以省略该路径.

% ls -l
total 0
drwxr-xr-x  2 jathan jathan   60 2011-04-13 15:28 ./
drwxrwxrwt 12 root   root   6.5K 2011-04-13 15:28 ../
-rw-r--r--  1 jathan jathan    0 2011-04-13 15:28 helloworld.py
Run Code Online (Sandbox Code Playgroud)

它在我当前的目录中,所以让它可执行!

% chmod +x helloworld.py 
% ls -l                 
drwxr-xr-x  2 jathan jathan   60 2011-04-13 15:28 ./
drwxrwxrwt 12 root   root   6.5K 2011-04-13 15:28 ../
-rwxr-xr-x  1 jathan jathan    0 2011-04-13 15:28 helloworld.py*
Run Code Online (Sandbox Code Playgroud)

请参阅左侧权限位中的"x"?你做到了!现在我们可以运行它:

% ./helloworld.py   
Hello World!
Run Code Online (Sandbox Code Playgroud)

最后,永远不要在Python中使用分号作为行结尾.这不是必需的,而且很难看!