[TIL] 파이썬 모듈 임포트와 관련하여

mgm-dev·2020년 9월 18일
0

📚TL;DR

  1. 절대경로 : 최상위 다이렉토리 기준 경로
  2. 상대경로 : 현재 파일 기준 경로
  3. if __name__ == '__main__': : 인터프리터에서 실행되는 경우라면
  4. main.py에서의 임포트 시 : 절대경로로 임포트
  5. __init__.py : 패키지임을 명시, 임포트를 깔끔하게
  6. import 순서 : sys.modules -> built-in modules -> sys.path

1. Definitions

import?

이미 만들어진 파이썬 프로그램 파일, 라이브러리안에 있는 파일등을 사용할 수 있게 해주는 명령어

모듈이란?

모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고도 할 수 있다.

패키지란?

파이썬 패키지는 다이렉토리와 파이썬 모듈로 이루어진다. 즉 패키지란 파이썬 모듈이 모여있는 폴더이다.

__init__.py?

__init__.py 파일은 해당 다이렉토리가 패키지의 일부임을 알려주는 역할을 한다. 추가적으로 패키지내 모듈을 하나로 묶어주고, 임포트 하지 않을 모듈을 설정할 수 있다.

절대 vs 상대

절대경로는 최상위 다이렉토리 부터 경로를 명시하면 된다. 상대경로의 경우 현재 다이렉토리 부터 경로를 명시하면 된다.

__name__ 변수란?

파이썬이 내부적으로 사용하는 특별한 변수 이름이다. 모듈은 다른 모듈에서 호출 되거나, 직접 인터프리터에서 실행 된다. 인터프리터에서 모듈을 실행하는 경우 __name__ 변수에 __main__ 값이 저장 된다.

그래서 __main__이 뭐라고?

'__main__'는 코드가 실행되는 최상위 스코프의 이름이다. 인터프리터에서 모듈을 실행 시, 모듈의 __name__ 변수는 '__main__'으로 설정 된다.

main module에서 import 하기

relative import 시, 현재 모듈의 이름이 다이렉토리의 기준이 된다. 그런데, 인터프리터에서 모듈을 실행 시키면 현재 모듈의 이름이 무조건 __main__이 된다. 따라서 최상위로 실행 시킬 모듈에서는 absolute import를 사용해야한다.

built-in modules

파이썬에서 제공하는 파이썬 공식 라이브러리

sys.modues

이미 import된 모듈과 package를 딕셔너리로 저장

sys.path

하위 경로를 list에 string 형식으로 저장하고 있음. 포함 하는 경로는 현재 다이렉토리, 환경변수로 지정된 다이렉토리, 파이썬과 같이 설치된 기본 라이브러리이다.

sys는 무엇인가?

sys는 모듈이다. 이 모듈은 인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호 작용하는 함수에 대한 액세스를 제공합니다.


2. Example Package

__init__.py

from .add_and_multiply import add_and_multiply
from .multiplication import multiply

# only export add_and_multiply
__all__ = ['add_and_multiply']

add_and_multiply.py

# absolute import
# from calculator.multiplication import multiply
# relative import
from .multiplication import multiply

def add_and_multiply(a, b):
    return multiply(a, b) + (a+b)

multiplication.py

def multiply(a, b):
    return(a*b)

main.py

# absolute import
# from calculator.add_and_multiply import add_and_multiply

# relative import - do not use!!! causes error
# from .calculator.add_and_multiply import add_and_multiply

from calculator import add_and_multiply

if __name__ == '__main__':
    print(add_and_multiply(1, 2))

run main.py

> python3 main.py
> 5

참고자료

점프 투 파이썬
공식문서

profile
never stop learning

0개의 댓글