on
[Python] Class Import 정리 및 Config 사용 예제
[Python] Class Import 정리 및 Config 사용 예제
들어가며
회사에서 파이썬을 사용하게 되며 여러 우여곡절을 겪고있다. 특히 나는 자바를 메인 언어로 사용했다보니 모든걸 클래스 파일로 코딩하는 것에 익숙하다. (이 방법이 더욱 객체 지향적이기도 하다) 따라서 나는 회사 온보딩 과제도 모듈을 class로 만들고 class에서 모든걸 처리하다 보니 다양한 파일을 import 했어야 했다. 이 과정에서 오류가 생겼고 이를 정리하고자 해당 포스팅을 작성한다.
개념정리
파이썬은 import 할 때 Cpython으로 컴파일 되기 때문에 import를 잘 작성하는 것이 무엇보다 중요하다. 그래서 모듈을 import하는 방법들을 다시 정리하면 아래와 같다.
방법
import 모듈이름 import 모듈이름 as 별칭 from 모듈이름 import 특정변수, 함수, 클래스 (이 때 소괄호를 사용하면 안된다.) from 모듈이름 import* (모듈 내부의 모든 내용을 가져오겠다)
내가 자주 사용한 방법은 3번째 방법인데 이를 제대로 사용하지 못했다. 내가 사용한 방법은 아래와 같다
from directory_a import 클래스의 특정 메소드
이러다 보니 import Error가 발생했는데 정확한 방법으로 import하면 아래와 같이 사용해야 한다.
from directory_a.<모듈명> import 클래스 # 클래스 기능 호출 클래스.메소드()
실습 - Config.py를 분리하여
flask app을 고도화해서 사용하다 보면 다양한 환경에서 실행할 일이 생기게 된다. 따라서 config.py를 통해서 실행환경에 맞게 실행할 수 있도록 하는 것이 확장성을 갖춘 flask app이라고 볼 수 있다.
app.py
# flask_app에서 create_app 함수를 import from flask_app import create_app # flask_app.config BaseConfig 클래스를 import from flask_app.config import BaseConfig if __name__ == "__main__": app = create_app(BaseConfig) app.run(host="0.0.0.0", debug=True)
BaseConfig.py
class BaseConfig: APP_NAME = 'myapp' SECRET_KEY = 'secret-key-of-myapp' ADMIN_NAME = 'administrator' AWS_DEFAULT_REGION = 'ap-northeast-2' STATIC_PREFIX_PATH = 'static' ALLOWED_IMAGE_FORMATS = ['jpg', 'jpeg', 'png', 'gif'] MAX_IMAGE_SIZE = 5242880 # 5MB class DevelopmentConfig(Config): DEBUG = True AWS_ACCESS_KEY_ID = 'aws-access-key-for-dev' AWS_SECERT_ACCESS_KEY = 'aws-secret-access-key-for-dev' AWS_S3_BUCKET_NAME = 'aws-s3-bucket-name-for-dev' DATABASE_URI = 'database-uri-for-dev' class TestConfig(Config): DEBUG = True TESTING = True AWS_ACCESS_KEY_ID = 'aws-access-key-for-test' AWS_SECERT_ACCESS_KEY = 'aws-secret-access-key-for-test' AWS_S3_BUCKET_NAME = 'aws-s3-bucket-name-for-test' DATABASE_URI = 'database-uri-for-test' class ProductionConfig(Config): DEBUG = False AWS_ACCESS_KEY_ID = 'aws-access-key-for-prod' AWS_SECERT_ACCESS_KEY = 'aws-secret-access-key-for-prod' AWS_S3_BUCKET_NAME = 'aws-s3-bucket-name-for-prod' DATABASE_URI = 'database-uri-for-prod'
보통 고도화된 서비스를 개발한다면 개발 환경, 테스트 환경, 프로덕션 환경등에 대한 설정이 각기 다르기 때문에 여러 설정들을 다음과 같이Class로 작상하여 관리하는것이 좀 더 효율적이다.
따라서 Class를 Import하는 방법에 대해서 잘 아는 것이 중요하다.
from http://bloowhale.tistory.com/115 by ccl(A) rewrite - 2021-10-31 16:00:47