无法在Mac终端中运行Python .py文件

9
我刚刚下载了Python 3.2到Mac OS 10.6环境。我是编程新手,正在尝试运行我的第一个独立的.py文件,但我一直收到错误信息,显示“没有这样的目录或文件”。文件名为“script1.py”,我将其保存在/Users/billp/Documents中。当我打开终端运行这个文件时,我输入:
python script1.py

我也尝试在脚本开头添加了这一行代码:
#!/usr/local/bin/python

除此之外,还有这一个:

#!/usr/bin/env python

然而,我一直收到相同的错误提示。非常感谢您的任何帮助。


你能否将错误完整地展示给我们看? - aayoubi
当你在提示符下键入python时会发生什么?你会得到Python解释器吗? - gomad
1
请记住,您必须cd到正确的目录,例如cd /Users/billp/Documents。或者您可以执行python /Users/billp/Documents/script1.py - Griffin
1
以下是整个错误信息:python: 无法打开文件 'script1.py':[Errno 2] 没有那个文件或目录 william-peirces-mac-pro:~ billp$ - Bill P
当我在提示符处输入 python 时,会看到以下内容:Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information.>>> 我相信这是预装在 OS 10.6 中的 Python 的默认版本。 - Bill P
Griffin,你的两个建议都非常完美。谢谢。我的教程作者没有提到“cd”命令。 - Bill P
4个回答

14

确保在打开终端后处于正确的工作目录中。输入

cd /Users/billp/Documents/

(使用 Tab 键自动补全)

然后

python ./script1.py

这种方式启动了Python可执行文件并将您的文件路径作为第一个参数传递。您提到的shebang#!行允许您直接启动脚本,例如:./script1.py,但您需要将文件标记为可执行文件chmod +x script1.py,并在shebang之后提供解释器(python)的路径。#!/usr/bin/env python引用了默认的Python安装。

./代表当前目录。默认情况下,当您键入script1.py时,您的shell(即通过终端键入命令的东西)将在PATH环境变量中列出的特殊文件夹中查找可执行文件。script1.py通常不在那里,因此会显示-bash: script1.py: command not found。另一方面,python是在PATH中的,所以它应该可以工作。


太棒了!在我指定目录之后,它运行成功了。感谢lormus的帮助。至于使用“#!/usr/local/bin/python”并用“chmod +x”标记文件为可执行文件的方法,我不太理解你的说明。你是这个意思吗: - Bill P
关于使用#!/usr/local/bin/python并通过chmod +x将文件标记为可执行,我不确定我是否理解了您的说明。 1)我在脚本的第一行包含上面列出的“#!”行,2)在打开终端后,在提示符后键入“./script.py”,3)我使用“chmod +x script1.py”标记该文件为可执行 -- 我该如何做?我在何时/何处输入该命令?顺便说一句,感谢您在解释方面如此基础和详细 -- 非常有帮助。 - Bill P
将2)和3)交换一下位置:)。在终端中键入chmod +x script1.py,它会将文件标记为可执行文件,而不是普通的数据文件。(在Windows世界中,扩展名'.exe'表示相同的含义,而在这里则是这个'执行位')然后,您就可以使用./script1.py启动该文件了。 - lormus
我仍然无法将文件作为可执行文件运行。再次说明一下,我的脚本中的第一行如下:#!/usr/local/bin/python 这是我的终端输入的样子 william-peirces-mac-pro:~ billp$ cd /Users/billp/Documents/ william-peirces-mac-pro:Documents billp$ chmod +x brian.py william-peirces-mac-pro:Documents billp$ ./brian.py -bash: ./brian.py: /usr/local/bin/python: bad interpreter: No such file or directory 这可能是脚本中Python路径的问题吗?我自己安装了3.2版本,但我认为操作系统将2.6版本视为默认版本(如果我说得清楚的话)。 - Bill P
我解决了。我的脚本路径需要是这样的:#!/usr/local/bin/python3 再次感谢您的帮助。现在可以开始运行了...希望一切顺利。 - Bill P

4
也许您忘记将文件设置为可执行文件了?请尝试在命令提示符下输入以下命令:
$ chmod +x script1.py

我喜欢在Mac电脑上使用以下代码启动Python脚本(当然,假设你的文件已经以UTF-8编码保存):

#!/usr/bin/env python
#coding=utf-8

此外,请确保 python 命令在路径中可用。如果一切设置正确,就不需要先输入 python,可以通过在脚本所在目录中键入 ./script1.py 直接运行脚本。
最后,如果要在命令行执行脚本(而不仅仅是加载文件中的定义),请在末尾写入以下内容:
if __name__ == '__main__':
    # the code you want to call

1
据我所知,当文件作为Python本身的参数时,您不需要将其设置为可执行文件。只有在使用shebang运行它时才需要。 - Griffin
@Griffin:没错,你不需要。将其变为可执行文件并提供一个shebang是使其自给自足的方法。 - jathanism

0

这里有你的Python二进制文件吗?

/Library/Frameworks/Python.framework/Versions/3.2/bin/python

我的“Python 二进制文件”是什么?您键入的路径存在,在 bin 文件夹中有几个文件,例如:2to3-3.2、idle3.2、pydoc3.2、python3、python 3.2 等等... - Bill P
你的Python二进制文件是随Python发行版一起提供的可执行代码。python是最重要的一个,但正如你注意到的那样,其他像pydoc这样的文件也存在于bin目录中。 - ObscureRobot

0
值得一提的是,只要文件在当前目录中,它就会自动可用。否则,任何文件都必须使用完整路径信息绝对引用。
因此,以下示例调用相同的文件: 显式(绝对路径)
python /Users/billp/Documents/script1.py
python /Users/billp/Documents/script2.py
python /Users/billp/Documents/script3.py

隐式(相对路径)

cd /Users/billp/Documents
python script1.py
python script2.py
python script3.py

只要你在同一个目录下操作文件(通常称为你的“工作目录”),你就可以始终安全地使用相对路径。如果文件在其他任何地方,你必须始终指定绝对路径。

显然,我的问题源于对路径的误解以及如何通过终端为Python解释器提供方向。你们两个选项都完美地解决了我的问题。谢谢。不过,我有一个关于短语“只要你在同一目录中使用文件” 的问题……和什么相同?和Python启动器所在的目录相同吗? - Bill P
那将是我的第二个例子。如果你改变为/Users/billp/Documents,你就不必指定绝对路径了。所以这就是我所说的,彼此在同一个目录中的文件。 :) - jathanism

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