—ฅ/ᐠ. ̫ .ᐟ\ฅ —

언어 및 개념 일반

FastAPI와 favicon error

WIFI-Aircat 2024. 11. 22. 21:54

API란?


: Application Programming Interface
정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다. 이는 고유한 기능을 가진 소프트웨어 간의 요청과 응답을 사용한 통신을 뜻한다.


FastAPI란?


현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.8+의 API를 빌드하기 위한 웹 프레임워크 (공식 사이트 설명)

terminal
`pip install fastapi`
`pip install "uvicorn[standard]"`

 

# main.py
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
def read_root():
    return 'hello'


이렇게 해서 `uvicorn main:app --reload` 명령어를 실행하고
만들어진 페이지에 접속하면 "hello"를 출력한다.


favicorn 에러

 

내 경우에는 처음부터 favicorn 에러가 나기 시작했다.
실행한 창에는 'Internal Server Error'라고 떴다.
문제는... 검색해봐도 안 되는 사람이 아무도 없었다.
(😥 나만... 안 되나본데...?)

`"GET /favicon.ico HTTP/1.1" 500`

favicorn이 같은 경로에 있지 않아서 생기는 error라고 한다.

flask에서는 이렇게 해결 하는 것 같았다.

import os
from flask import Flask, send_from_directory

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, '파일명'),
    'favicon.ico', mimetype='image/v[nd.microsoft.icon')



근데 fastapi에서는 send from directroy를 지원하지 않는다며 오류가 나서 사용할 수 없었다.

그리고 ChatGPT와 시도해본 것들...
 
- favicon을 넣는 함수를 추가
- vs code의 language server를 변경
- fastapi와 starlette를 업그레이드
- 미들웨어 관련 코드를 추가&수정
- --port 8000
- fastapi와 starlette의 호환 버전을 확인해 교체
- fastapi와 starlette 라이브러리 재설치


해결 방법

 

# main.py
from fastapi import FastAPI, Response
from fastapi.responses import HTMLResponse
app = FastAPI()

@app.get("/favicon.ico", response_class=HTMLResponse)
async def favicon():
    return Response(content="", media_type="image/x-icon")

@app.get("/")
def read_root():
    return {"hello"}



1. 일단 설치된 fastapi와 starlette를 제거했다.
`pip uninstall fastapi starlette`


2. myenv라는 이름의 가상공간을 만들었다.
`python -m venv myenv`


3. myenv 가상환경 활성화
`source myenv/bin/activate`


4. fastapid와 starlette 재설치
`pip install fastapi starlette`
`pip install "uvicorn[standard]"`

5. 재실행
`uvicorn main:app --reload --port 8000`

6. (추가사항) 패키지 설치 확인 방법
`pip list | grep fastapi`
`pip list | grep starlette`




반응형