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)]
我在 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)]