cPanel 应用程序在 Python2 而不是 Python3 上运行

cPanel App runs on Python2 instead of Python3

我在 cPanel 中有一个 VPS 主机,还有一个 Flask-App。 我遵循了 How to install WSGI Application in cPanel.

的说明

一切正常,当我 运行 使用终端的应用程序时,但是当我打开应用程序 URL 时,它显示以下错误:

Traceback (most recent call last):
  File "/opt/cpanel/ea-ruby24/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 369, in <module>
    app_module = load_app()
  File "/opt/cpanel/ea-ruby24/root/usr/share/passenger/helper-scripts/wsgi-loader.py", line 76, in load_app
    return imp.load_source('passenger_wsgi', startup_file)
  File "/home/qsemh/Maidan/passenger_wsgi.py", line 8, in <module>
    wsgi = imp.load_source('wsgi', 'wsgi.py')
  File "wsgi.py", line 1, in <module>
    from flaskr import create_app
  File "/home/qsemh/Maidan/flaskr/__init__.py", line 133
    print(f"Validate {len(users)} Users At {current_time}")
                                                         ^
SyntaxError: invalid syntax

所以我决定创建一个更简单的应用程序来检测问题,该应用程序如下:

passenger_wsgi.py

#!/usr/bin/env python3
import sys
from flask import Flask

application = Flask(__name__)

application.route("/")
def index():
    return sys.version

当我 运行 这个简单的应用程序使用 URL 它显示以下内容作为响应:

2.7.5 (default, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

即使我在文件开头使用了 shebang #!/usr/bin/env python3,并且当我 运行 使用终端时,它的工作方式就好像它使用 python3 一样。

我尝试将 shebang 更改为以下格式:

#!/usr/bin/python3

#!/usr/bin/env 'python3'

但他们给出了相同的结果。

这里有什么问题,我该如何解决?

我找到了解决这个问题的正确方法;

基本上,我只需要在 passenger_wsgi.py 文件的开头添加以下几行:

import os
INTERP = "/usr/bin/python3"
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)

所以最终结果将是:

passenger_wsgi.py


#!/usr/bin/env python3
import sys
import os

# Solution
INTERP = "/usr/bin/python3"
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)

from flask import Flask

application = Flask(__name__)

application.route("/")
def index():
    return sys.version

并且响应正确,正如我最初预期的那样:

3.6.8 (default, Apr  2 2020, 13:34:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]