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

5676 단어 pythonpython

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

모듈, 패키지를 찾는 순서
1. sys.modules
2. built-in modules
3. sys.path

1)sys.modules은 모듈과 패키지를 찾을때 가장 먼저 확인하지만 sys.path가장 마지막에 확인한다.
2)sys.modulesdictionary이나 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의 class1package2의 하위 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 : 파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 한다.

좋은 웹페이지 즐겨찾기