Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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 Flask Swagger UI无法找到Swagger.json获取错误未找到/static/Swagger.json Flask API Docker_Python_Docker_Flask_Swagger - Fatal编程技术网

Python Flask Swagger UI无法找到Swagger.json获取错误未找到/static/Swagger.json Flask API Docker

Python Flask Swagger UI无法找到Swagger.json获取错误未找到/static/Swagger.json Flask API Docker,python,docker,flask,swagger,Python,Docker,Flask,Swagger,我已经在Docker容器中构建了FlaskAPI,现在我正在尝试将Swagger UI添加到我的应用程序中。问题是,即使目录中存在“swagger.json”,并且我给出了正确的路径,它仍然会给我错误。检查日志可提供以下信息: "/home/faraz/python_docker/TestApp/app/static/swagger.json" failed (2: No such file or directory) 我已经仔细检查并确认swagger.json存在并且存

我已经在Docker容器中构建了FlaskAPI,现在我正在尝试将Swagger UI添加到我的应用程序中。问题是,即使目录中存在“swagger.json”,并且我给出了正确的路径,它仍然会给我错误。检查日志可提供以下信息:

"/home/faraz/python_docker/TestApp/app/static/swagger.json" failed (2: No such file or directory)
我已经仔细检查并确认swagger.json存在并且存在于目录中

我正在添加views.py的代码,并在其中添加了特定于招摇的代码:

from app import app
from flask import render_template
from flask import request
from flask_swagger_ui import get_swaggerui_blueprint
#import pandas

@app.route('/')
def home():
   return "hello no  world!"

@app.route('/template',methods=['POST','GET'])
def template():
    output = request.args.values()
    return render_template('home.html',prediction_text="Listen to me... In this world, wherever there is light, there are always shadows. As long as there is a concept of victory, the vanquished will also exist. The selfish desire for peace give rise to war. And hatred is born in order to protect love. Wouldn't you agree {}?".format(list(output)[:]))
    

### swagger specific ###
SWAGGER_URL = '/swagger'
API_URL = '/static/swagger.json'
SWAGGERUI_BLUEPRINT = get_swaggerui_blueprint(
    SWAGGER_URL,
    API_URL,
    config={
        'app_name': "Seans-Python-Flask-REST-Boilerplate"
    }
)
app.register_blueprint(SWAGGERUI_BLUEPRINT, url_prefix=SWAGGER_URL)
### end swagger specific ###

@app.route("/static/swagger.json")
def specs():
    return send_from_directory(os.getcwd(), "swagger.json")

@app.route('/predict')
def predict():
    return render_template('index.html')
我还附上Dockerfile代码和Start.sh代码,以防这些文件中出现问题:

DockerFile:

FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7
RUN apk --update add bash nano
ENV STATIC_URL /static
ENV STATIC_PATH /home/faraz/python_docker/TestApp/app/static
COPY ./requirements.txt ./requirements.txt
RUN pip install -r requirements.txt 
Start.sh:

#!/bin/bash
app="docker.test_3"
docker build -t ${app} .
docker run -d -p 56734:80 \
  --name=${app} \
  -v $PWD:/app ${app}
我还将链接附加到我的Github存储库。希望这里有人能给我指引正确的方向:
尝试打印os.getcwd()的值。可能它没有返回您期望的值

我建议您使用pathlib中的路径来处理文件和目录的绝对和相对路径:

from pathlib import Path

# Getting the absolute path for the current file (views.py)
BASE_PATH = Path(__file__).resolve().parent

(...)

return send_from_directory(BASE_PATH.joinpath('static'), 'swagger.json')

谢谢你的回复。为了测试这个理论,我注释掉了以下部分:@app.route(“/static/swagger.json”)def specs():return send_from_目录(os.getcwd(),“swagger.json”),但是错误没有改变,错误日志显示的错误与以前相同。我相信views.py甚至在显示错误之前都不会到达那里。是否有可能他路径不存在于容器中,而我正在应用程序中安装东西?请分享你的想法。