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

在Jelastic PaaS用mod_wsgi部署FastAPI应用遇TypeError错误求助

部署FastAPI到Jelastic PaaS(mod_wsgi)的报错解决

问题背景

我计划在Python项目中使用FastAPI并部署到Jelastic PaaS平台,由于mod_wsgi仅支持WSGI应用,因此通过a2wsgi将ASGI类型的FastAPI转换为WSGI应用,编写了wsgi.py文件:

import os, sys

virtenv = os.path.expanduser('~') + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
    if sys.version.split(' ')[0].split('.')[0] == '3':
        exec(compile(open(virtualenv, "rb").read(), virtualenv, 'exec'), dict(__file__=virtualenv))
    else:
        execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
    pass

sys.path.append(os.path.expanduser('~'))
sys.path.append(os.path.expanduser('~') + '/ROOT/')


from fastapi import FastAPI
app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}


from a2wsgi import ASGIMiddleware
application = ASGIMiddleware(app)

同时针对虚拟环境执行了以下命令:

virtualenv virtenv
source virtenv/bin/activate
pip install a2wsgi
pip install fastapi
deactivate

部署后无法正常运行,出现报错。

报错信息

mod_wsgi (pid=14438): Failed to exec Python script file '/var/www/webroot/ROOT/wsgi.py'.
mod_wsgi (pid=14438): Exception occurred processing WSGI script '/var/www/webroot/ROOT/wsgi.py'.
Traceback (most recent call last):
File "/var/www/webroot/ROOT/wsgi.py", line 24, in <module>
from fastapi import FastAPI
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/__init__.py", line 7, in <module>
from .applications import FastAPI as FastAPI
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/applications.py", line 16, in <module>
from fastapi import routing
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/routing.py", line 22, in <module>
from fastapi import params
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/params.py", line 5, in <module>
from fastapi.openapi.models import Example
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/openapi/models.py", line 4, in <module>
from fastapi._compat import (
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/_compat.py", line 20, in <module>
from fastapi.exceptions import RequestErrorModel
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/fastapi/exceptions.py", line 3, in <module>
from pydantic import BaseModel, create_model
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/__init__.py", line 12, in <module>
from . import dataclasses
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/dataclasses.py", line 11, in <module>
from ._internal import _config, _decorators, _typing_extra
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/_internal/_decorators.py", line 15, in <module>
from ..fields import ComputedFieldInfo
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/pydantic/fields.py", line 19, in <module>
import annotated_types
File "/var/www/webroot/virtenv/lib/python3.12/site-packages/annotated_types/__init__.py", line 361, in <module>
IsNotFinite = Annotated[_NumericType, Predicate(Not(math.isfinite))]
^^^^^^^^^^^^^^^^^^
TypeError: Not() takes no arguments

环境信息

APACHE_VERSION=2.4.57
DOCKER_EXPOSED_PORT=21,22,25,443,7979,80
MOD_WSGI_VERSION=4.9.4
OWASP_MODSECURITY_CRS_VERSION=3.3.2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHON_VERSION=3.12.0
STACK_VERSION=2.4.57
VERSION=3.12.0
WEBROOT=/var/www/webroot
WSGI_SCRIPT=/var/www/webroot/ROOT/wsgi.py

解决方法

错误原因

报错TypeError: Not() takes no arguments是因为annotated-types包的新版本(0.6.0及以上)使用了Python 3.13才支持的typing.Not参数语法,而当前环境是Python 3.12,该版本的typing.Not不接受参数,导致兼容性问题。

修复步骤

  1. 固定annotated-types版本
    重新安装依赖时指定兼容Python 3.12的版本:
virtualenv virtenv
source virtenv/bin/activate
pip install a2wsgi
pip install fastapi annotated-types==0.5.0
deactivate

这个版本的annotated-types不会使用Python 3.13的新语法,能和Python 3.12兼容。

  1. 验证虚拟环境激活
    确保wsgi.py中的虚拟环境激活逻辑正确,mod_wsgi确实使用了虚拟环境内的依赖。可以在wsgi.py开头添加调试代码(部署后查看日志确认):
print(f"Python executable path: {sys.executable}")
print(f"Virtualenv site-packages: {os.path.join(virtenv, 'lib', 'python3.12', 'site-packages')}")

确认输出路径指向你的虚拟环境目录,而非系统Python路径。

  1. 重新部署
    将更新后的虚拟环境和wsgi.py重新部署到Jelastic PaaS,即可解决报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:55:06