sys.modules은 dictionary로 이미 import된 모듈과 패키지를 저장하고 있는 곳입니다.
sys.path는 list로 문자열요소들을 가지고 있습니다.list안에는 각각의 모듈 및 패키지들의 경로가 있습니다.
2.sys도 import를 해야하는 모듈입니다. 파이썬은 sys모듈의 위치를 어떻게 찾는지 서술하시오.
sys 모듈의 경우는 파이썬 내에 이미 내장되어 있는 모듈이다. 그러므로 굳이 찾을려고 한다면 built-in modules에서 찾을 수 있다.
absolute path는 절대경로라는 뜻으로 항상 경로 시작을 디렉토리 가장 상위부터 경로를 입력해 import를 한다.
relative path는 상대경로라는 뜻으로 디렉토리 가장 상위에서 시작 기준을 잡는것이아니라 현재 import하고 있는 위치를 기준으로 경로를 입력해 import한다.
relative path는 경로의 길이를 줄여준다는 장점이 있지만, 헷갈리기 쉽고 파일위치 변경 시, 경로 위치도 변한다는 큰 단점이 있다.
그러므로 absolute path를 사용하는게 권장된다고 한다.
4.현재 문제에서 제공되는 패키지를 만들어 main.py에서 상대경로로 add_and_mutiply를 import 했는때 발생하는 에러를 확인하고 main module에서는 패키지의 모듈을 어떻게 import 해야하는지 서술하시오.
상대경로로 import 했을시 발생하는 에러이다.
내 짧은 영어로 생각하기에는 '상대경로로 import를 시도했으나 부모 패키지를 알지 못해 에러가 발생'이라고 말하는것같다.^^
열심히 검색해본 결과 같은 디렉토리일때 상대경로로 이동시에는 import시 .(dot)을 안붙히면 import가 가능하다고 한다.
그래서 calculator앞 .을 지워주고 실행을 시켜보니 잘 작동되는것을 확인할수있었다. init파일로 인해 calculator가 pkg선언이 되었기 때문에 calculator 밖에 있는 main.py는 .(dot)을 붙히면 안된다. 같은 기준에 있기때문에 .(dot)을 제외한 import로 시작하여야 한다.
다른 방법이 있다면, 절대경로를 사용하는 방법도 있다.
-생략 ㅎ-
상대경로가 절대경로보다 상대적으로 길이도 짧고 하지만 실수를 범할 경우의 수가 너무 많기에 절대경로를 사용하는것을 습관화 해야겠다.
같은 패키지안에 있기 때문에 별다른 신경을 쓰지 않고 import를 하였다. import시 항상 파일의 위치에 유의하여 import를 하도록 해야겠다.
-미리 import를 init파일안에 하여 총 경로 줄이기
미리 사용하고자 하는 모듈이나 함수를 init에 import를 해줌으로써 차후에 main.py에서 호출시 'from pkg_name import' 함수명 이런식으로 경로를 줄일수 있다.
-pkg에서 import 할수있는 변수/함수/클래스를 제한할수있다.
all이라는 변수를 지정해, all에 저장되있지 않은 변수나 함수나 클래스는 import되지 않도록 설정가능하다.
-그리고 내가 가장 중요하다고 생각하는것! , pakage선언이다. 이것을 잘 구분해야 상대경로라든지 절대경로를 잘 사용할수 있다고 생각한다.