Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连接中的ModuleNotFoundError_Python_Openapi_Connexion - Fatal编程技术网

Python 连接中的ModuleNotFoundError

Python 连接中的ModuleNotFoundError,python,openapi,connexion,Python,Openapi,Connexion,我有一个规范,我想用它来运行Python服务 API规范的相关部分如下: paths: /find: post: summary: XXX description: XXX operationId: service.controllers.api.find requestBody: content: application/json: schema:

我有一个规范,我想用它来运行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()
但是,当我使用运行它时,我看到一个
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'">
错误:connexion.api.abstract:无法为POST/v2/find添加操作
回溯(最近一次呼叫最后一次):
文件“/home/XXX/anaconda3/envs/find/lib/python3.6/site packages/connexion/api/abstract.py”,第206行,添加路径
self.add_操作(路径、方法)
[...]
文件“/home/XXX/anaconda3/envs/find/lib/python3.6/site packages/connexion/resolver.py”,第64行,来自操作id的解析函数
引发解析错误(消息,sys.exc_info())
connexion.exceptions.ResolverError:
在这种情况下,路径/包名称可能有问题。然而,我也尝试过从
lib
目录等中调用它的许多变体,但没有成功。另外,我尝试只使用方法名,并在
x-swagger-router-controller
属性中指定包,但也没有成功

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

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

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

尝试执行:

PYTHONPATH=。connexion运行lib/service/resources/openapi/openapi.yaml

您的openapi文档(swagger.yaml?)对
x-openapi-router-controller
说了什么?顺便说一句,JSON在实践中不如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'">