[Replit] How Import Statement Finds Modules & Packages

박성준·2021년 6월 14일
0

Pyton

목록 보기
2/6

sys.modules 와 sys.path의 차이점.

search 순서

  • sys.modules
  • built-in modules
  • sys.path

1. sys.module

파이썬이 모듈이나 package를 찾기위해 가장 먼저 확인하는 곳입니다.
sys.moudules는 단순한 dictionary 입니다. 그리고 이미 import된 모듈과 package들을 저장하고 있습니다. 한번 import된 모듈과 package들은 파이썬이 또 다시 찾지 않아도 되도록 하는 기능을 가지고 있습니다.
그러므로 새로 import 하는 모듈은 sys.moudules에서 찾을 수 없습니다.

  • sys.module의 경로
'sys': <module 'sys' (built-in)

sys모듈은 이미 built-in 되어 있기 때문에 built-in module들이 있는 부분에서 찾게 된다.

2. sys.path

마지막으로 보는 장소가 바로 sys.path 입니다.
sys.path는 기본적으로 list이며 string 요소들을 가지고 있는 list 입니다. 각 string 요소들은 다음 처럼 경로를 나타냅니다.

Absolute path와 relative path의 차이점.

1. absolue path

장점

  • 위치가 절대적이기 때문에 파일의 위치가 바뀌어도 잘 실행된다.

단점

  • 경로, 운영체제(루트 디렉토리가 다름), 서버, 도메인 주소가 변경되면 절대경로도 다 수정해야 한다.
  • 전체 경로를 적어야 하기 때문에 불편하다.

2. relative path

장점

  • 경로, 운영체제, 서버, 도메인 주소 및 상위 디렉터리가 바뀌더라도 참조하고 있는 문서를 기준으로 삼고 있기 때문에 경로를 변경하지 않아도 된다.
  • 절대 경로에 비해 간결하다.

단점

  • 작성중인 파일의 위치가 변경되면 상대경로로 작성한 주소도 수정이 필요하다.
  • 파일의 위치를 잊어버리면 소스를 분실할 가능성이 높다.

calculator 패키지.

- 구성

init.py 파일의 역할

파일에는 아무코드도 없지만 init 파일은 해당 디렉토리가 패키지임을 알려주는 역할을 한다. 패키지를 초기화하는 파이썬 코드를 넣을 수 있다.
init.py 파일에서 중요한 변수로 all 이라는 리스트 변수가 있는데, 이 변수는 "from 패키지명 import *"문을 사용할 때, 그 패키지 내에서 Import 가능한 모듈들의 리스트를 담고 있습니다.

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

1-2. 수정

-> 절대 경로는 앞에 "."으로 시작하지 않고 최상위 디렉토리에서 시작한다.

2-2. add_and_multiply.py에서 multiply함수를 절대경로와 상대경로도 각각 임포트, main 모듈과 차이점.

-> 상대 경로는 기준점이 자신이며, 절대경로는 기준이 최상위 디렉토리를 시작으로 한다. main.py은 절대경로만 해야하며, 상대경로를 지정을 못한다. “parent package”가 정의되지 않아 상대경로를 사용할 수 없다는 에러가 나온다.

profile
IT공부중입니다!

0개의 댓글