如何解决腾讯云函数No module named ‘pydantic_core._pydantic_core‘的报错?

当您在腾讯云函数中使用FastAPI项目时,您很可能遇到报错No module named 'pydantic_core',完整的报错信息类似于这样:

{"errorMessage":"
	1 code exit unexpected: Traceback (most recent call last):
	  File "/var/user/start.py", line 37, in <module>
	    from app.main import Host_IP, Host_Port
	  File "/var/user/app/main.py", line 38, in <module>
	    from fastapi import FastAPI
	  File "/var/user/fastapi/__init__.py", line 7, in <module>
	    from .applications import FastAPI as FastAPI
	  File "/var/user/fastapi/applications.py", line 16, in <module>
	    from fastapi import routing
	  File "/var/user/fastapi/routing.py", line 24, in <module>
	    from fastapi import params
	  File "/var/user/fastapi/params.py", line 5, in <module>
	    from fastapi.openapi.models import Example
	  File "/var/user/fastapi/openapi/models.py", line 4, in <module>
	    from fastapi._compat import (
	  File "/var/user/fastapi/_compat.py", line 21, in <module>
	    from fastapi.exceptions import RequestErrorModel
	  File "/var/user/fastapi/exceptions.py", line 3, in <module>
	    from pydantic import BaseModel, create_model
	  File "/var/user/pydantic/__init__.py", line 421, in __getattr__
	    module = import_module(module_name, package=package)
	  File "/var/lang/python39/lib/python3.9/importlib/__init__.py", line 127, in import_module
	    return _bootstrap._gcd_import(name[level:], package, level)
	  File "/var/user/pydantic/main.py", line 29, in <module>
	    import pydantic_core
	ModuleNotFoundError: No module named 'pydantic_core'
","requestId":"3e200f7a-ed11-11ef-a3d1-5254006a6788","statusCode":443}

这是因为FastAPI依赖于pydantic-core,而pydantic-core在不同的架构中,会安装不同的版本。

虽然云函数的本意是为了让我们不关注底层架构,但为了让程序正常运行,我们仍然需要调查云函数运行环境的底层架构,以便安装上对应的pydantic-core。

要调查云函数运行环境的架构,首先查看你的云函数的Python环境,这里我的是Python 3.9

然后运行以下命令,检查云函数运行环境的操作系统、硬件架构、C标准库的版本。

cat /etc/redhat-release
uname -m
ldd --version

运行命令后的输出示例图

知道这些信息后,把你的Python版本+控制台的输出发给AI,让他为你选择合适的pip的platform参数。
可以这么问AI
AI的回复

这里AI为我们推荐的参数组合是manylinux2014_x86_64或者manylinux_2_28_x86_64,我们先选第一个试试看。

我们拼接出最终的pip安装依赖的命令

python3.9 -m pip install -r requirements.txt \
--platform manylinux_2_17_x86_64 \
--target . \
--python-version 3.9 \
--only-binary=:all: \
--upgrade

这个命令中指定了--platform--python-version参数,以便pip知道安装匹配云函数运行环境的pydantic-core包。

--platform参数是刚刚AI给我们推荐的,--python-version参数是我们自己知道的云函数的Python版本(我这个例子中,是Python 3.9)。

我的云函数的requirements.txt文件内容是这样的:

requirements.txt文件内容

fastapi>=0.68.0
uvicorn>=0.15.0

我的云函数的app.py是这样的:

app.py文件内容

from fastapi import FastAPI, Query
import random
import uvicorn

app = FastAPI(
    title="随机数生成器",
    description="一个简单的随机数生成 API"
)

@app.get("/random")
async def get_random_number(
    min_value: int = Query(default=0, description="最小值"),
    max_value: int = Query(default=100, description="最大值")
):
    if min_value >= max_value:
        return {"error": "最小值必须小于最大值"}
    
    random_number = random.randint(min_value, max_value)
    return {
        "random_number": random_number,
        "range": {
            "min": min_value,
            "max": max_value
        }
    }

@app.get("/")
async def root():
    return {"message": "欢迎使用随机数生成器 API"}

if __name__ == "__main__":
    uvicorn.run(
        app,  # 直接用 app
        host="0.0.0.0",  # 允许外部访问
        port=9000,
        reload=False,  # 不自动重载
        log_level="info"
    )

我们打开云函数的终端,先cd到src目录,然后运行依赖安装命令。

在云函数代码编辑器的终端中运行依赖安装命令

观察依赖安装命令运行的输出,确认被安装的pydantic_core的架构是和AI告诉我们的架构是一致的:

被安装的pydantic_core的架构

最终安装结果:

依赖安装命令运行输出内容的结尾

再观察现在的项目结构,可以看到pydantic_core的.so文件的Python版本也是正确的:

_pydantic_core.cpython-39-x86_64-linux-gnu.so

现在我们点击云函数的“部署”按钮,测试一下依赖是否安装到位,这个FastAPI服务能否正常运行。

部署成功

用Postman请求一下服务,看看是否正常运行。
FastAPI服务正常运行

服务成功运行,您成功在腾讯云函数中跑起来了FastAPI服务,感谢您的阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值