Python Sys Module, Path

김기현·2022년 1월 30일
0
post-thumbnail

한 프로젝트를 만들기 위해서는 여러 모듈이 합쳐져야 합니다. pip를 이용해 모듈 패키지를 추가할 수 있고 해당 용도에 따라 웹, 게임 등의 개발을 수월하게 할 수 있습니다. 이 때 local package module을 이용해 더 다양한 프로젝트를 만들 수 있는데, 어떤 방식으로 import를 하고 모듈과 패키지를 찾을 수 있을까요..?

Sys Module

python은 세가지 구역에서 아래와 같은 순서로 module/package를 찾습니다.

sys.modules => built-in modules => sys.path

1. sys.modules

python이 module이나 package를 찾기 위해서 우선적으로 살피는 영역으로 dictionary형태로 되어있습니다.

2. built-in modules

python이 공식으로 제공하는 라이브러리로 위 사진에서 built-in modules를 확인할 수 있습니다.

3. sys.path

python이 module이나 package를 찾을 때 가장 마지막으로 확인하는 부분으로 list구조로 되어있습니다.
pip로 설치한 패키지도 이곳을 통해 찾게 되며 모듈이나 패키지를 사용할 때 path를 등록해서 찾게끔 합니다.

Absosute path and Relative path

다음과 같은 경로가 있습니다.

Absolute path

absolute path(절대 경로)는 모듈 및 패키지의 시작부터 끝까지 명확히 명시된 경로를 뜻합니다. 어디에서 쓰든 항상 같아서 헷갈리지 않습니다.

from pkg1.module2 import func3 
from pkg2 import module3 
from pkg2.pkg4.module6 import func10

Relative path

아래의 코드는 absolute path를 relative path로 쓴 코드입니다.

# pkg2/module5.py경로에 있다고 가정

from ..module2 import func3 
from . import module3 
from .pkg4.module6 import func10

비교적 간결해지는 장점이 있지만 프로젝트가 커질수록 복잡도가 높아지고, 파일의 위치가 바뀌면 그에 맞춰 path도 재설정을 해야하는 단점이 있습니다. 코드의 일관성 및 실수를 막고자 absolute path의 사용이 권장됩니다.

Calculator Package

main.py
# absoulte path
# from calculator.add_and_multiply import add_and_multiply 

# relative path
from .calculator.add_and_multiply import add_and_multiply

if __name__ == '__main__':
    print(add_and_multiply(1,2))
add_and_multiply.py
from .multiplication import multiply
# from calculator.multiplication import multiply

def add_and_multiply(a,b):
    return multiply(a,b) + (a+b)
multiplication.py
def multiply(a,b):
    return(a*b)
__init__.py

__init__.py를 설정해주지 않으면 파이썬에서는 그 디렉터리를 package로 인식하지 않습니다. python 3.3버전부터는 위 파일이 없어도 패키지로 인식하지만 하위 버전과의 호환성에 문제가 생길 수 있습니다.

main.py에서 발생하는 에러

main.py에서 상대경로로 add_and_multiply를 임포트를 했을 때 다음과 같은 에러가 발생합니다.

해당 파일에서 스크립트를 실행할 경우 __name____main__이 됩니다. 따라서 main.py에서 파이썬 인터프리터를 실행하면 if문인 if __name__ == '__miain__'을 만족합니다.
하지만 __name__ = '__main__'일 경우 파이썬에서 최상위 디렉터리로 인식하기 때문에 절대 경로로 설정하여 최상위 디렉터리가 어딘지 알려주어야 합니다.

따라서 아래의 절대경로를 입력해 최상위 디렉터리를 알려줍니다.

from calculator.add_and_multiply import add_and_multiply

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글

Powered by GraphCDN, the GraphQL CDN