sys에 대해서 설명하기 전에 library에 대해서 알아야 한다.
파이썬의 표준 라이브러리는 매우 광범위하며, 아래 나열된 긴 목차에 표시된 대로 다양한 기능을 제공한다. 라이브러리에는 일상적인 프로그래밍에서 발생하는 많은 문제에 대한 표준적인 해결책을 제공하는 파이썬으로 작성된 모듈뿐만 아니라, 파일 Input/Output같은 시스템 기능에 액세스하는 (C로 작성된) 내장 모듈들이 포함된다. 즉, 라이브러리란 많은 파이썬 사용자들이 만든 유용한 프로그램들이다.
출처: 파이썬 표준 라이브러리(https://docs.python.org/ko/3/library/index.html)
이 모듈은 인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호 작용하는 함수에 대한 액세스를 제공한다. 간단히 말해서, 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다. sys는 파이썬의 내장 모듈(built-in module)이다.
파이썬에서는 아래와 같은 순서로 모듈 및 패키지를 찾는다.
sys.modules => built-in modules => sys.path
파이썬이 모듈이나 패키지를 찾기 위해 확인하는 곳이다. sys.modules는 dict 형태로 되어 있으며, 이미 import된 모듈과 패키지들을 저장하고 있다. 반대로 말하면 새로 import 하는 모듈은 sys.modules에서 찾을 수 없다.
파이썬에서 제공하는 공식 라이브러리이다. 인터프리터가 시작할 때 자동으로 로드되며, import g하지 않아도 항상 사용이 가능하다. (ex. print(), append())
파이썬 마지막으로 확인하는 장소가 sys.path이다. sys.path는 list 형태로 되어 있으며, string을 요소로 가지고 있다. 각 string 요소는 경로를 나타내고 있다. sys.path에서도 모듈을 발견하지 못하면 ModuleNotFoundError 에러를 리턴한다.
sys 또한 파이썬에 내장되어 있는 모듈이다. 그렇다면 sys 모듈의 위치는 어떻게 찾아야 하는가?
{'sys': <module 'sys' (built-in)>}
sys가 built-in 모듈인 것을 알 수 있다.
('_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에 있는 것을 확인할 수 있다.
ex) /usr/local/Homebrew (맨 앞에 있는 '/' 는 root 경로로 가장 최초의 경로이다)
ex) 현재 경로: /usr/local --> 여기서 하위 경로인 Homebrew를 상대경로로 작성하는 방법
cd Homebrew
파이썬에는 많은 내장 모듈이 있지만 이외의 모듈들을 사용하기 위해서는 설치가 필요하다. pip으로 설치한 외부 모듈(site-packages)는 sys.path에 바로 포함된다. 하지만 local package의 경우 sys.path에 바로 포함되지 않기 때문에 사용자가 경로를 잘 확인하여 설치 해야 한다.
이후 설치된 모듈을 import 할 때 모듈이 너무 하위 경로에 있다면 절대 경로로 불러올 경우 그 길이가 너무 길어진다. 그렇기 때문에 import 하기 편한 경로에 모듈을 설치하고 이를 상대 경로로 import 하면 매우 효율적이다.