python - Python 2.7 + 烧瓶 + Apache + mod_wsgi
问题描述
我正在尝试配置 Apache 以运行我的示例 Flask 应用程序,但我遇到了一个我无法解决的问题。以下是我遵循的步骤(全部作为 root 用户以避免任何权限问题):
- 在 CentOS 上安装 httpd (yum install httpd)
- 使用 pip 安装 mod_wsgi (yum install mod_wsgi)
- 在 /var/www/FlaskApp/ 下创建了一个 VirtualEnv
- 在 VirtualEnv 中安装了 Flask (pip install Flask)
- 在 /var/www/FlaskApp/app.py 下创建了一个示例应用程序
- 在 /var/www/FlaskApp/wsgi.py 下创建了一个 wsgi 文件
- 在 Apache 上配置 VirtualHost (httpd.conf)
- 重新启动 Apache
wsgi 文件:
activate_this = '/var/www/FlaskApp/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import sys
import site
site.addsitedir('/var/www/FlaskApp/venv/lib/python2.7/site-packages')
site.addsitedir('/var/www/FlaskApp/venv/lib64/python2.7/site-packages')
sys.path.insert(0, '/var/www')
from FlaskApp import app as application
应用程序.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
httpd.conf:
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess FlaskApp user=ec2-user group=ec2-user threads=2
WSGIScriptAlias / /var/www/FlaskApp/wsgi.py
<Directory /var/www/FlaskApp>
Allow from all
</Directory>
</VirtualHost>
目录结构:(/var/www/FlaskApp/)
-rw-r--r-- 1 root root 154 Dec 8 23:04 app.py
drwxr-xr-x 7 root root 4096 Dec 8 23:11 venv
-rw-r--r-- 1 root root 0 Dec 8 23:36 __init__.py
-rw-r--r-- 1 root root 356 Dec 8 23:41 wsgi.py
httpd error_log 中的错误:
Apache/2.2.34 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.9 configured -- resuming normal operations
[client 127.0.0.1] mod_wsgi (pid=15119): Target WSGI script '/var/www/FlaskApp/wsgi.py' cannot be loaded as Python module.
[client 127.0.0.1] mod_wsgi (pid=15119): Exception occurred processing WSGI script '/var/www/FlaskApp/wsgi.py'.
[client 127.0.0.1] Traceback (most recent call last):
[client 127.0.0.1] File "/var/www/FlaskApp/wsgi.py", line 12, in <module>
[client 127.0.0.1] from FlaskApp import app as application
[client 127.0.0.1] File "/var/www/FlaskApp/app.py", line 1, in <module>
[client 127.0.0.1] from flask import Flask
[client 127.0.0.1] File "/var/www/FlaskApp/venv/lib/python2.7/site-packages/flask/__init__.py", line 16, in <module>
[client 127.0.0.1] from werkzeug.exceptions import abort
[client 127.0.0.1] File "/var/www/FlaskApp/venv/lib/python2.7/site-packages/werkzeug/__init__.py", line 32
[client 127.0.0.1] self._origin = {item: mod for mod, items in available.items() for item in items}
[client 127.0.0.1] ^
[client 127.0.0.1] SyntaxError: invalid syntax
有人可以帮我解决这个问题吗?谢谢!
解决方案
根据错误日志的第一行,您使用的是 Python 2.6.9,但您的 virtualenv 包含适用于 Python 2.7+ 的包。语法错误是 Python 2.7 中引入的 dict 理解。
mod_wsgi 文档在这里讨论这个问题:https ://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html#virtual-environment-and-python-version
正如 furas 所说,Python 2.7 即将结束,因此您应该考虑将整个项目升级到 Python 3。
推荐阅读
- elasticsearch - Kibana 可视化:使用 JSON 文档中的字段创建条形图
- php - 登录不直接到页面
- r - 在我的 gganimate 上操作胶水生成的标题
- algorithm - 使用 Dijkstra 时如何加权其他因素
- angular - 角度反应形式使用什么方法来注册表单控件名称
- python - matplotlib 中子图的多个颜色条(具有不同的范围/刻度)
- docker - 我的 docker-compose.yml 无法构建 mysql5.7 容器
- css - 我可以更改斜体文本的背景颜色吗?
- python - 注册鼠标事件的不可见窗口
- nginx - 如何通过 Nginx-sticky-module 在两个上游中使用一个 Nginx Cookie(路由)