在macOS上从Python 2升级到3

在macOS上从Python 2升级到3,python,Python,我正在准备将一个web应用程序从Python 2.7升级到3.7。我遇到了以下问题: 在终端中输入/usr/bin/python正在工作: Python 2.7.10 (default, Feb 22 2019, 21:55:15) 输入/usr/local/bin/python也可以: Python 3.7.4 (v3.7.4:e09359112e, Jul 8 2019 14:54:52) 使用#/test.py文件中的usr/bin/python在浏览器中显示: 2.7.10 (d

我正在准备将一个web应用程序从Python 2.7升级到3.7。我遇到了以下问题:

在终端中输入/usr/bin/python正在工作:

Python 2.7.10 (default, Feb 22 2019, 21:55:15)
输入/usr/local/bin/python也可以:

Python 3.7.4 (v3.7.4:e09359112e, Jul  8 2019 14:54:52) 
使用#/test.py文件中的usr/bin/python在浏览器中显示:

2.7.10 (default, Feb 22 2019, 21:55:15) 
因此,Python2.7正在运行。现在在#中插入“/local”/上述test.py文件中的usr/bin/python导致:

500 Internal Server Error
为什么呢?我不知道,因为路径/usr/local/bin/python在终端中工作

test.py是一个简单的文件,如下所示:

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

print "Content-Type: text/plain;charset=utf-8"
print
import sys
print(sys.version)
和.htaccess如下所示:

Options +ExecCGI
AddHandler cgi-script .py

在Python 2中,
print
是一个关键字,因此不需要括号,
print“Content Type”
是有效的语法

在Python 3中,
print
是一个函数,需要调用括号

因此,您看到的500错误是由于程序失败(在本地运行脚本或web应用程序进行验证)

有关更多信息,请参阅

将Python 2代码移植到Python 3

要自动将Python 2代码转换为Python 3,请尝试2to3:

2to3-自动Python 2到3代码翻译

您可能还希望选择以下shebang系列:

#/usr/bin/env python
如果安装了多个版本的Python,
/usr/bin/env
将确保使用的解释器是环境的
$PATH
上的第一个解释器。另一种选择是硬编码,比如
#/usr/bin/python
;没关系,但灵活性较低


/usr/bin/python
/usr/local/bin/python
可能只是指向其他文件的链接,有人将它们设置为指向不同版本的python。Python 2和Python 3是不同的。例如,
print“Content-Type:text/plain;charset=utf-8”
在Python 3中是一个语法错误。请看或只看谷歌“python 3中的新功能”,好的,非常感谢。当然,他们会链接到其他文件–他们必须这样做。好的,谢谢–但不会太多。如果提到缺少的括号,而不是仅仅写一般的“语法错误”,会更有帮助。