gpt4 book ai didi

python - Connexion 中的 ModuleNotFoundError

转载 作者:行者123 更新时间:2023-11-28 18:01:18 26 4
gpt4 key购买 nike

我有一个 OpenAPI 3.0规范,我想将其与 Connexion 一起使用运行 Python 服务。

API 规范的相关部分在这里:

paths:
/find:
post:
summary: XXX
description: XXX
operationId: service.controllers.api.find
requestBody:
content:
application/json:
schema:
type: object
[...]
servers:
- url: /v2
[...]

Python 代码的结构如下:

├── lib
│   └── service
│   ├── controllers
│   │   ├── api.py
│   │   ├── __init__.py
│   ├── __init__.py
│   ├── models
│   │   └── __init__.py
│   └── resources
│   └── openapi
│   └── openapi.yaml

api.py的内容:

def find():
return "TEST"

find 函数本身按预期工作:

import service.controllers.api
service.controllers.api.find_skills()

'TEST'

在 Python 中,Connexion 可以很好地加载 API:

import connexion
app = connexion.FlaskApp(__name__,
specification_dir='lib/service/resources/openapi/')
app.add_api('openapi.yaml')

<connexion.apis.flask_api.FlaskApi at 0x7f2241e35b38>

app.run()

现在,我可以成功调用端点:

$ curl -X POST http://localhost:5000/v2/find

但是,当我使用 Connexion CLI 运行它时,我看到一个 ModuleNotFoundError:

$ connexion run lib/service/resources/openapi/openapi.yaml

输出:

ERROR:connexion.apis.abstract:Failed to add operation for POST /v2/find
Traceback (most recent call last):
File "/home/XXX/anaconda3/envs/find/lib/python3.6/site-packages/connexion/apis/abstract.py", line 206, in add_paths
self.add_operation(path, method)
[...]
File "/home/XXX/anaconda3/envs/find/lib/python3.6/site-packages/connexion/resolver.py", line 64, in resolve_function_from_operation_id
raise ResolverError(msg, sys.exc_info())
connexion.exceptions.ResolverError: <ResolverError: Cannot resolve operationId "service.controllers.api.find"! Import error was "No module named 'service'">

在这种情况下,路径/包名称可能有问题。但是,我也尝试过从 lib 目录等调用它的多种变体,但没有成功。此外,我尝试仅使用方法名称并在 x-swagger-router-controller 属性中指定包,但也没有成功。

我在 Connexion 文档中找不到关于如何正确指定 operationId 的更多具体细节,所以我什至不清楚这是否与 Python 模块本身、OpenAPI 规范有关,或者调用Connexion的方式。

关于从哪里开始挖掘的任何提示?为什么命令行客户端找不到service模块?模块相对于工作目录应该驻留在何处?

最佳答案

我无法重现您的问题,但我相信这是由于 PYTHONPATH 造成的。

尝试执行:

PYTHONPATH=.连接运行 lib/service/resources/openapi/openapi.yaml

关于python - Connexion 中的 ModuleNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com