Python. 모듈과 패키지 찾는 방법

1. sys.modules 와 sys.path의 차이점
모듈, 패키지를 찾는 순서
1. sys.modules
2. built-in modules
3. sys.path
1)sys.modules은 모듈과 패키지를 찾을때 가장 먼저 확인하지만 sys.path는 가장 마지막에 확인한다.
2)sys.modules은 dictionary이나 sys.path는
기본적으로 list이며 string 요소들을 가지고 있는 list 입니다.
2. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까?
sys 모듈 또한 파이썬에 내장되어 있는 모듈이기에 2번째 찾는 단계인
built-in modules로 찾을수 있다.
3. Absolute path와 Relative path의 차이점
1)Absolute path 절대경로
import를 하는 파일이나 경로에 상관없이 항상 경로가 동일하다. -최상단 디렉토리 기준으로 한다-

가장 아래 있는 module5.py 찾는 경로는 아래 코드와 같다.
my_app.package2.subpackage1.module5.py
2)Relative path 상대경로
최상단 디렉토리를 기준으로 경로를 잡는게 아니라 import 하는 위치를 기준으로 정한다.
ex) package2의 module3에서 package2의 class1과 package2의 하위 package인 subpackage1의 module5의 function2 함수를 import 하려고 하면 다음 처럼 할 수 있습니다.
# package2/module3.py
from . import class1
from .subpackage1.module5 import function2
dot .은 import 가 선언되는 파일의 현재 위치를 이야기한다.
또한 .2개를 사용하는데 dot 2개 .. 는 현재위치에서 상위 디렉토리로 가는 경로를 나타낸다.
# subpackage1/module5.py
from ..module4 import class4
결론
Relative path는 경로의 길이가 짧지만 헷갈리기 쉽고 파일위치 변경 시 경로위치도 함께 변경해야 하니까
그냥Relative path방법을 사용하자
4.calculator 패키지 만들기
4-1. main.py에서 상대경로로 add_and_mutiply 를 임포트 했을 때 발생하는 에러를 확인하고, main module 에서는 패키지의 모듈을 어떻게 임포트 해야하는가?
ImportError: attempted relative import with no known parent package
상대경로가 아닌 절대경로로 바꿔줌으로 써 오류를 해결할 수 있었다. 위 코드를 보면 from뒤에 dot(.)이 있음으로 상대경로인 것을 알 수 있다.
4-2.add_and_multiply.py에서 multiply함수를 절대경로와 상대경로도 각각 임포트 해보고 main 모듈과 차이점을 생각해보고 결과를 출력해보자.
절대경로로 할시 아래와 같은 에러가 발생한다.
ModuleNotFoundError: No module named 'calculator'
현재 디렉토리가 이미calculator 절대경로 상이 올바르지않은거같아서 수정하였더니 '5'라는 숫자가 잘 출력되었다.
#위에서 아래와 같이 수정하였다.
from calculator.multiplication import multiply
-----------------------------------------------
from multiplication import multiply
5. __init__.py 파일의 역할
init.py : 파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 한다.
Author And Source
이 문제에 관하여(Python. 모듈과 패키지 찾는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kim-hoontae/python.-모듈과-패키지-찾는-방법저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)