调用了错误的Python解释器

11 投票
6 回答
18941 浏览
提问于 2025-04-15 11:48

我更新了我的Python解释器,但我觉得还是在用旧的那个。当我检查版本时,我得到了:

$ python -V
Python 3.0.1

但是我相信还是在调用旧的解释器。当我运行这个命令:

python myProg.py

脚本运行得很好。但是当我用这个命令调用它时:

./myProg.py

我收到了错误信息:

AttributeError: 'str' object has no attribute 'format'

这显然是因为调用了旧的解释器。我该怎么解决这个问题呢?我用的是Mac OS X 10.5。这和第一行有关系吗:

#!/usr/bin/python

我刚开始学习Python,对解释型语言还不太熟悉,所以我不太确定发生了什么。

6 个回答

3

你可能猜对了,问题可能出在shebang行调用了旧版本的Python。你可以检查以下两件事:

1) 查看一下/usr/bin/python这个路径下的解释器版本:

/usr/bin/python -V

2) 找找你安装的Python 3解释器在哪里:

which python

如果你在命令行中得到了正确的版本,那么就把你的shebang行替换成这个:

#!/usr/bin/env python

补充说明:你也可以把旧版本的Python替换成指向Python 3的符号链接,但要注意,任何大的操作系统更新(比如从10.5.6更新到10.5.7)可能会导致这个链接失效:

sudo mv /usr/bin/python /usr/bin/python25
sudo ln -s /path/to/python/3/python /usr/bin/python
6

首先,推荐的开头行(shebang)是:

#!/usr/bin/env python

这行代码可以确保当你执行 ./foo.py 时,调用的 Python 解释器和你在命令行中输入 python 时调用的是同一个解释器。

根据你的描述,我猜如果你执行了:

which python

它不会给你 /usr/bin/python。而是会给你其他的路径,那是 Python 3 解释器所在的位置。你可以选择把你的开头行改成上面的那一行,或者把 Python 解释器的路径换成 which 命令返回的路径。

16

根据脚本的第一行 #!/usr/bin/python,你是在调用位于 /usr/bin/python 的Python解释器(这通常是Mac OS X自带的版本)。你需要把这个路径改成你安装的Python 3解释器的路径(可能是 /usr/local/bin/python 或者 /opt/local/bin/python);或者你可以把这一行改成 #!/usr/bin/env python,这样就会调用你 PATH 变量中列出的第一个 python(这应该是你安装的较新版本)。

撰写回答