You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7下Flask2.2.2+Python3.10遇annotations未定义语法错误求助

问题排查与解决方案

核心原因

你的WSGI守护进程实际调用的不是虚拟环境里的Python3.10,而是系统默认的低版本Python(CentOS7默认Python3为3.6或更低,不支持from __future__ import annotations特性)。

解决步骤

1. 确认mod_wsgi绑定的Python版本

执行以下命令查看当前mod_wsgi关联的Python版本:

mod_wsgi -v

如果输出的版本不是3.10,说明mod_wsgi是基于系统旧版本Python编译的,需要重新编译适配Python3.10。

2. 重新编译mod_wsgi适配Python3.10

  • 卸载旧版mod_wsgi:
yum remove mod_wsgi
  • 安装编译依赖:
yum install python3.10-devel httpd-devel
  • 用Python3.10的pip安装适配版本的mod_wsgi:
python3.10 -m pip install mod_wsgi
  • 生成并配置mod_wsgi模块:
    执行mod_wsgi-express install-module,复制输出中的LoadModule和WSGIPythonHome配置行,添加到httpd的配置文件(如/etc/httpd/conf.d/wsgi.conf)。

3. 修改VirtualHost配置指定Python环境

在VirtualHost的配置中,明确指定虚拟环境的Python路径,避免调用系统版本:

WSGIDaemonProcess appname python-home=/实际路径/venv2 python-path=/实际路径/site.com:/实际路径/venv2/lib/python3.10/site-packages
WSGIScriptAlias / /实际路径/wsgi.py

替换上述代码中的/实际路径/为你的项目和虚拟环境真实路径。

4. 修正wsgi.py的shebang行

将wsgi.py的第一行改为虚拟环境内Python的绝对路径,避免依赖系统默认Python:

#!/实际路径/venv2/bin/python

5. 重启httpd服务生效

systemctl restart httpd

额外验证(可选)

在wsgi.py开头添加版本打印代码,验证实际运行的Python版本:

import sys
print(f"Python version: {sys.version}", file=sys.stderr)

查看httpd错误日志(/var/log/httpd/error_log),确认输出的版本为3.10。

内容的提问来源于stack exchange,提问作者Joshua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:52:50