목차
.env 파일 필요한 이유
- 우리는 보통 코드를 작성하면 깃허브에 올리거나 어디에 공유합니다. 이럴 경우 보안상 매번 API key 값을 지우고 올리고 이런 작업을 반복해야 합니다. 이러한 작업을 방지하기 위해 .env 파일을 생성한 뒤 API key 등 보안적인 값들을 작성하고 .gitignore에 .env파일을 작성해 주면 됩니다.
- 또한 여러 가지 세팅 정보들이 존재할 수 있습니다. 자동매매를 예시로 들면 몇 개의 종목을 매수할지 제한사항이나 몇 번 분할 매수를 진행할지 몇 프로 익절을 할지 등 여러 세팅값들이 존재합니다. 이러한 값들을 .env 파일에 작성해두면 추후에 .env 파일만 변경해주면 해당 값을 손쉽게 변경해줄 수 있습니다.
.env 파일 예시
- .env 파일 예시
-
BINANCE_KEY = "" BINANCE_SECRET = "" EBEST_KEY = "" EBEST_SECRET = "" STOCK_BUY_COUNT = "5" STOCK_PROFIT_PERCENT = "1" STOCK_LOSS_PERCENT = "1"
-
- dotenv 라이브러리를 통해 .env 파일을 읽어올 수 있습니다.
- 설치 : pip install python-dotenv
- 코드
-
from dotenv import load_dotenv import os # .env 파일 로드 load_dotenv() # 환경 변수 읽기 BINANCE_KEY = os.getenv("BINANCE_KEY") BINANCE_SECRET = os.getenv("BINANCE_SECRET") EBEST_KEY = os.getenv("EBEST_KEY") EBEST_SECRET = os.getenv("EBEST_SECRET") print(BINANCE_KEY) print(BINANCE_SECRET) print(EBEST_KEY) print(EBEST_SECRET)
-
FastAPI에서 .env 파일 읽어오기
- 참고 : https://fastapi.tiangolo.com/advanced/settings/
- 이 프로젝트에서는 .env 파일에 작성한 내용을 수정하지 않을 것이기 때문에, 전역객체를 생성하는 방법을 적용하도록 하겠습니다.
- utils 폴더 안에 __init__.py와 config.py 파일을 작성합니다.
- config.py 파일 작성
-
from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): BINANCE_KEY: str BINANCE_SECRET: str EBEST_KEY: str EBEST_SECRET: str STOCK_BUY_COUNT : int STOCK_PROFIT_PERCENT : int STOCK_LOSS_PERCENT : int model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8") settings = Settings()
- Settings 클래스 안에는 .env 안에 있는 모든 변수에 대한 type 이 지정되어야 합니다.
-
- __init__.py 파일 작성
-
from utils.config import settings
- 이렇게 __init__.py안에 작성해 두면 추후에 from utils import settings 만 입력하더라도 settings 객체를 불러올 수 있습니다.
-
- config.py 파일 작성
- main.py 파일 작성
-
import uvicorn from fastapi import FastAPI from utils import settings app = FastAPI() @app.get("/info") async def info(): return { "BINANCE_KEY": settings.BINANCE_KEY, "BINANCE_SECRET": settings.BINANCE_SECRET, "EBEST_KEY": settings.EBEST_KEY, "EBEST_SECRET":settings.EBEST_SECRET, "STOCK_BUY_COUNT":settings.STOCK_BUY_COUNT } if __name__ == "__main__": uvicorn.run("main:app",host="127.0.0.1", port=8000 ,reload=True)
-
- 실행 결과
'Algorithm Trading > ComDon 프로그램 개발이야기' 카테고리의 다른 글
8. pyautogui (1) | 2024.01.27 |
---|---|
7. 이베스트투자증권 OPEN API (0) | 2024.01.22 |
5. 주문딜레이 시간 체크 / 비동기 처리의 장점 (1) | 2024.01.09 |
4. CCXT 라이브러리 (0) | 2023.12.30 |
3. webhook 연결(포트포워딩) (1) | 2023.12.29 |