TIL - 03/26 - Python - 3

Sung Jun Jin·2020년 3월 26일
1

TIL

목록 보기
7/25

파이썬에서 원하는 모듈과 패키지를 검색하기

파이썬에서 모듈과 패키지는 다음 3가지 장소를 순서대로 찾아보면 된다.

  • sys.modules
  • built-in modules
  • sys.path

sys.modules

이미 import된 모듈과 패키지가 dictionary 형태로 저장된 곳이다.

새롭게 import해야 할 모듈은 당연히 이곳에 없으므로 여기서 찾지 말자

built-in modules

파이썬의 built-in method처럼 이미 내장되어 있는 모듈들이다.
ex) math, statistics,sys

built-in module import 하기

import math

sys.path

[피드백]

sys.path는 현재 디렉토리, 환경변수 PYTHONPATH에 지정된 경로, Python이 설치된 경로 및 그 밑의 라이브러리 경로를 담고 있는 list이다.

내 PC에서 sys.path를 출력해봤다.

import sys

print(sys.path)
  • 현재 작업하고 있는 디렉토리
    [C:\Users\dadud\OneDrive\바탕 화면\wecode\revew', ]

  • 환경변수 PYTHONPATH에 지정된 경로

    [C:\Users\dadud\AppData\Local\Programs\Python\Python38-32]

  • Python이 설치된 경로 및 그 밑의 라이브러리 경로

    [C:\Users\dadud\AppData\Local\Programs\Python\Python38-32\lib]

    [C:\Users\dadud\AppData\Local\Programs\Python\Python38-32\python38.zip][C:\\Users\\dadud\\AppData\\Local\\Programs\\Python\\Python38-32\\DLLs]
    [C:\Users\dadud\AppData\Local\Programs\Python\Python38-32][C:\\Users\\dadud\\AppData\\Roaming\\Python\\Python38\\site-packages] [C:\Users\dadud\AppData\Local\Programs\Python\Python38-32\lib\site-packages]

파이썬은 sysp.path의 list의 경로들을 순차적으로 확인하면서 import해야 할 모듈,패키지를 찾는다.

실제로 직접 lib 폴더를 가서 확인해보면 사전 스터디때 잠깐 사용해본 json 패키지가 있다.

[피드백]

파이썬은 import할때 sys.modules -> built-in modules -> sys.path의 순서대로 탐색을 시작하는데 마지막 sys.path에서도 못찾으면 ModuleNotFoundError를 return한다.

과제

1. sys.module과 sys.path의 차이점

sys.module은 이미 import된 모듈과 패키지를 담고 있는 dictionary이다. 파이썬이 모듈과 패키지를 찾기 위해 가장 먼저 확인하는 곳이다.

sys.path는 파이썬의 현재 작업중인 디렉토리, 파이썬의 환경변수와 라이브러리의 경로를 string으로 가지고 있는 list이다. 파이썬이 모듈과 패키지를 찾기 위해 sys.module, built-in module 다음 가장 나중에 확인하는 곳이다.

2. sys 도 import 해야하는 모듈입니다. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?

파이썬은 맨 처음에 sys.modules를 찾아 sys 모듈이 import 되었는지 확인을 할 것이다. sys 모듈은 built-in module이기 때문에 만약 sys 모듈이 존재하지 않아 import가 필요할 경우 built-in modules로 넘어가 sys 모듈을 import할 것이다.

Absolute path와 relative path의 차이점을 서술해 주세요.

Absolute Path

Absolute Path (절대경로)란 최상위 디렉터리로 부터 내려오는 경로를 뜻한다.

ex)
"C:\Users\Administrator\Desktop\Coding\blog\006"

파이썬은 .을 사용해서 다음 경로를 표현한다.

ex)
my_app.package2.subpackage1.module5.py

[피드백]

절대 경로를 사용하게 되면 똑같은 파일 이름과, 주소를 항상 통일해줘야 하기때문에 파일의 위치나 구조를 쉽게 변경하기 어렵다. 따라서 경로와, 파일의 의존도가 높아지므로 협업을 하는 팀원뿐만 아니라 서비스를 사용하는 다양한 사용자들의 환경을 모두 충족시키지 못한다.

Window를 사용하는 사용자를 예로 들어보자. 아래는 Microsoft 홈페이지의 Window 시스템의 파일 경로 형식에 대한 문서이다.

예를들어 C드라이브를 기본으로 하는 사용자의 경우 C: 으로 절대경로의 주소가 시작된다.

ex)
C:\Documents\Newsletters\Summer2018.pdf

하지만 사용자들의 사정에 따라 D드라이브 혹은 다른 드라이브를 이용하는 경우, 최상위 디렉터리에서부터 문제가 생기기 때문에 absolute path는 거의 사용하지 않는다.

[피드백]

Relative Path

Relative Path(상대 경로)란 파일 시스템에서 현재 작업 중인 디렉터리를 기점으로 하여 찾아갈 파일의 모든 디렉터리 목록을 표시한 것이라고 할 수 있다.

ex)
"./images/img.jpg"

ex)
현재 작업하고 있는 디렉터리가 package2의 module.py일 경우, 동일 package의 class1과 하위 package인 subpackage의 module5의 function2 함수를 import하려고 하면 다음 처럼 할 수 있습니다

# package2/module3.py

from . import class1
from .subpackage.modules5 import function2

현재 디렉터리에서 상대 경로를 사용해 상위 디렉터리로 경로를 변경할 경우 dot을 2개 사용해주면 된다.

ex)
현재 작업하고 있는 디렉터리가 subpackage1의 module5.py일 경우 상위 module인 module4의 func 함수를 import하려고 하면 다음 처럼 할 수 있다.

#subpackage1/module5.py

from ..module4 import func
profile
주니어 개발쟈🤦‍♂️

0개의 댓글