[Python] sys.modules / sys.path

그냥·2022년 5월 27일
0

python

목록 보기
7/9

라이브러리(library)

sys에 대해서 설명하기 전에 library에 대해서 알아야 한다.
파이썬의 표준 라이브러리는 매우 광범위하며, 아래 나열된 긴 목차에 표시된 대로 다양한 기능을 제공한다. 라이브러리에는 일상적인 프로그래밍에서 발생하는 많은 문제에 대한 표준적인 해결책을 제공하는 파이썬으로 작성된 모듈뿐만 아니라, 파일 Input/Output같은 시스템 기능에 액세스하는 (C로 작성된) 내장 모듈들이 포함된다. 즉, 라이브러리란 많은 파이썬 사용자들이 만든 유용한 프로그램들이다.
출처: 파이썬 표준 라이브러리(https://docs.python.org/ko/3/library/index.html)

sys

이 모듈은 인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호 작용하는 함수에 대한 액세스를 제공한다. 간단히 말해서, 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다. sys는 파이썬의 내장 모듈(built-in module)이다.

파이썬에서는 아래와 같은 순서로 모듈 및 패키지를 찾는다.

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




sys.modules

파이썬이 모듈이나 패키지를 찾기 위해 확인하는 곳이다. sys.modules는 dict 형태로 되어 있으며, 이미 import된 모듈과 패키지들을 저장하고 있다. 반대로 말하면 새로 import 하는 모듈은 sys.modules에서 찾을 수 없다.

built-in modules

파이썬에서 제공하는 공식 라이브러리이다. 인터프리터가 시작할 때 자동으로 로드되며, import g하지 않아도 항상 사용이 가능하다. (ex. print(), append())

sys.path

파이썬 마지막으로 확인하는 장소가 sys.path이다. sys.path는 list 형태로 되어 있으며, string을 요소로 가지고 있다. 각 string 요소는 경로를 나타내고 있다. sys.path에서도 모듈을 발견하지 못하면 ModuleNotFoundError 에러를 리턴한다.




파이썬이 sys 모듈의 위치를 찾는 방법

sys 또한 파이썬에 내장되어 있는 모듈이다. 그렇다면 sys 모듈의 위치는 어떻게 찾아야 하는가?

  • sys.modules를 출력해본다.

    {'sys': <module 'sys' (built-in)>}
    sys가 built-in 모듈인 것을 알 수 있다.

  • sys.builtin_module_names를 출력해본다.
('_abc', '_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale', '_operator', '_signal', '_sre', '_stat', '_string', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', 'atexit', 'builtins', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys', 'time', 'xxsubtype')
sys가 built-in에 있는 것을 확인할 수 있다.

Absolute Path와 Relative Path

Absolute Path와 Relative Path

  • Absolute Path: 직역하면 '절대경로'로 사용자가 현재 있는 경로를 컴퓨터의 root부터 현재 경로까지를 말한다.

    ex) /usr/local/Homebrew (맨 앞에 있는 '/' 는 root 경로로 가장 최초의 경로이다)

  • Relative Path: 직역하면 '상대경로'로 사용자가 현재 있는 경로의 하위에 있는 경로를, 사용자가 현재 있는 경로를 기준으로 만들어진 경로를 말한다.

    ex) 현재 경로: /usr/local --> 여기서 하위 경로인 Homebrew를 상대경로로 작성하는 방법
    cd Homebrew

파이썬 모듈과 경로

파이썬에는 많은 내장 모듈이 있지만 이외의 모듈들을 사용하기 위해서는 설치가 필요하다. pip으로 설치한 외부 모듈(site-packages)는 sys.path에 바로 포함된다. 하지만 local package의 경우 sys.path에 바로 포함되지 않기 때문에 사용자가 경로를 잘 확인하여 설치 해야 한다.

이후 설치된 모듈을 import 할 때 모듈이 너무 하위 경로에 있다면 절대 경로로 불러올 경우 그 길이가 너무 길어진다. 그렇기 때문에 import 하기 편한 경로에 모듈을 설치하고 이를 상대 경로로 import 하면 매우 효율적이다.

0개의 댓글