파이썬 모듈 정리

개발자 강세영·2022년 4월 28일
0

TIL

목록 보기
7/70
post-custom-banner

Assignment

파이썬에서 모듈과 패키지를 찾는 순서
1. sys.modules
2. built-in modules
3. sys.path

Q: sys.modules 와 sys.path의 차이점
A: sys.modules는 이미 import된 모듈과 package들을 저장하는 딕셔너리이고 그러므로 새로 import하는 것은 포함되지 않음
sys.path는 경로가 포함된 리스트이며 로컬환경에서 프린트 해보면 파이썬이 설치된 경로가 나옴

Q: sys 도 import 해야하는 모듈입니다. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?
A: sys는 built-in modules 중 하나이므로 한번 import 하면 sys.modules에 포함됨

Q: Absolute path와 relative path의 차이점을 서술해 주세요.
A: 절대경로는 최상단 디렉토리를 기준으로 하는 경로
상대경로는 현재 위치(import하는 위치)를 기준으로 하는 경로

calculator 패키지 만들기

main.py에서 상대경로로 add_and_mutiply 를 임포트 했을 때 발생하는 에러

Traceback (most recent call last):
  File "c:\Users\resto\Documents\wecode\module_practice\main.py", line 5, in <module>
    from .calculator.add_and_multiply import add_and_multiply
ImportError: attempted relative import with no known parent package

메인모듈의 이름은 항상 __main__이 되기 때문에 상대경로를 이용하면 경로를 찾지못하여 에러가 발생한다.

해결방법

  • 메인모듈에선 절대경로를 사용
  • 파이썬을 실행할때 -m 옵션을 사용하여 실행

add_and_multiply.py에서 multiply함수를 절대경로와 상대경로로 각각 임포트 하고나서 main.py를 실행할때 상대경로로 하면 오류가 없고 절대경로를 쓰면 오류발생함

add_and_multiply.py를 실행하는 경우 절대경로로 import 해야 오류가 없다 왜냐면 add_and_multiply.py를 메인모듈로 인식했기 때문에 절대경로를 사용해야한다

__init__.py의 용도:
파이썬이 디렉터리를 패키지로 취급하게 만들기 위해서 __init__.py 파일이 필요하다

파이썬3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 파이썬 버전의 호환성을 위해 __init__.py 파일을 생성하는 것이 안전하다.

post-custom-banner

0개의 댓글