我在 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)]
关于python - cPanel 应用程序在 Python2 而不是 Python3 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64374198/