无法运行由招摇代码生成器生成的服务器

时间:2020-04-16 21:16:40

标签: python api flask openapi

我正在学习为机器学习服务开发宁静的api。我用openapi规范定义了我的api规范,为此我尝试使用flask rest。但是,我发现this medium post与我的意图有关,因此我下载了源代码并尝试在本地运行服务器,但是服务器端点失败。我可以在同一端点上运行其他烧瓶应用程序,但是即使我遵循了它的说明,该项目也无法正常工作。我创建了open api spec文件,因此我想通过本地运行服务器来学习和了解this medium post。谁能指出我发生的情况this medium post source code?任何快速的解决方案,以弄清楚如何在本地运行服务器?谢谢

对我来说,一个简单的flask应用程序可以工作,并且可以在服务器端点上运行它。

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run()

我想从此APIs with OpenAPI运行服务器,因为我想使用相同的结构来开发我的api。谁能指出我为什么不能运行服务器?有什么主意吗?

更新

this medium post中,由openapi代码生成器生成并由openapi规范文件构成的所有工件,因此能够从其源代码运行服务器将帮助我理解如何继续工作流程。

1 个答案:

答案 0 :(得分:2)

您提到的存储库中的示例带有docker文件。您可以使用Docker快速启动服务器。

cd api_tutorial/openapi/photo_album/codegen_server
docker build . -t codegen_server
docker run codegen_server

但是,这不起作用。

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/usr/src/app/openapi_server/__main__.py", line 3, in <module>
    import connexion
  File "/usr/local/lib/python3.8/site-packages/connexion/__init__.py", line 3, in <module>
    from .apis import AbstractAPI  # NOQA
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/__init__.py", line 1, in <module>
    from .abstract import AbstractAPI  # NOQA
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/abstract.py", line 16, in <module>
    from ..operations import OpenAPIOperation, Swagger2Operation
  File "/usr/local/lib/python3.8/site-packages/connexion/operations/__init__.py", line 1, in <module>
    from .abstract import AbstractOperation  # noqa
  File "/usr/local/lib/python3.8/site-packages/connexion/operations/abstract.py", line 11, in <module>
    from ..decorators.response import ResponseValidator
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 12, in <module>
    from .validation import ResponseBodyValidator
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/validation.py", line 9, in <module>
    from werkzeug import FileStorage
ImportError: cannot import name 'FileStorage' from 'werkzeug' (/usr/local/lib/python3.8/site-packages/werkzeug/__init__.py)

正如this Github问题所指出的,此问题与connexion有关,版本2.6.0不会发生。因此,让我们更新requirements.txt以使用此版本。

connexion == 2.6.0

使用docker和voilá构建并再次运行,它应该可以工作。

docker run codegen_server
 * Serving Flask app "__main__" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

您也可以通过在根目录中进行cd-ing操作来运行没有Docker的服务器。

python -m openapi_server

事实上,正如我们在Dockerfile中看到的那样,这正是Docker的工作。

...

ENTRYPOINT ["python3"]
CMD ["-m", "openapi_server"]