调用了错误的Python解释器
我更新了我的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 个回答
你可能猜对了,问题可能出在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
首先,推荐的开头行(shebang)是:
#!/usr/bin/env python
这行代码可以确保当你执行 ./foo.py
时,调用的 Python 解释器和你在命令行中输入 python 时调用的是同一个解释器。
根据你的描述,我猜如果你执行了:
which python
它不会给你 /usr/bin/python
。而是会给你其他的路径,那是 Python 3 解释器所在的位置。你可以选择把你的开头行改成上面的那一行,或者把 Python 解释器的路径换成 which
命令返回的路径。
根据脚本的第一行 #!/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
(这应该是你安装的较新版本)。