Package와 Module

Package & Module

Module

Module은 변수나 함수 그리고 클래스 등을 모아놓은 파일입니다. Module로 모아놓으면 다른 파일에서 재사용이 가능하고, 전체 코드가 한 파일에 넣기에는 너무 커졌을때 여러 파일로 나누어서 정리할 수 있습니다.

import 방법

import <module name>

or

from <module name> import <함수/변수/클래스>, ...

or

from <module name> import *

Module을 한번에 불러올 수 있고, Module내의 필요한 함수나 변수 또는 클래스만 불러올 수 있습니다. import *을 사용하게 되면 Module 내의 모든 함수,변수,클래스를 불러옵니다. 하지만 이 방법을 추천하지 않습니다. 만일 local scope을 가지고 있는 다른 함수/변수/클래스와 이름 충돌이 났을 경우 이유를 찾기 힘들 수 있습니다.

Package

PackageModule과 마찬가지로 다른 파일에서 불러와서 사용하는 개념입니다. 차이점은 모듈보다 더 크고 복잡한 코드입니다.

Package는 파이썬 파일로 이루어져 있는 디렉토리가 하나의 package가 됩니다.

import 방법

import pkg.mod1
from pkg.mod2 import func2

pkg.mod1.func2()

func2()

예상 질문

Q. sys.modules 와 sys.path의 차이점을 서술해 주세요.

sys.modulespackagemodule을 찾기 위해 가장 먼서 살펴보는 곳으로 이미 import 되어있는 packagemoduledictionary 형태로 저장되어있습니다.

sys.path는 여러 가지 경로가 저장되어있는 listpackage를 찾을 때 가장 나중에 서칭하는 곳입니다.


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

sys를 먼저 sys.modules에서 이미 import되어있는지 확인하고, 없다면 built-in 모듈을 확인할 것입니다. sysPython에서 지원해주는 모듈이기 때문에 이곳에서 찾을 것입니다.


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

Absolute path는 절대 경로로 최상위 폴더부터 목표 디렉토리까지의 순차적인 경로를 표현합니다. Absolute path를 사용하면 명확하게 위치를 알수 있지만, 코드의 길이가 너무 길어지는 단점이있습니다.
g
relative path는 상대 경로로 현재 위치에서부터 목표 데렉토리까지의 경로를 표현합니다. relative path.은 현재 디렉토리 ..은 상위 디렉토리로 훨씬 짧아진 코드를 볼수 있지만 명확하지않아 헷갈리는 경우가 많습니다.


Q. ImportError: attempted relative import with no known parent package이 발생한 이유와 import방법에 대하여 설명하시오.

Package를 임포트해 relative path로 모듈의 위치를 찾을때 __name__에 의해 결정되는데, Python을 실행했을 때 __name____main__이 됩니다. 따라서 Python에서는 __main__의 위치를 찾을 수 없기 때문에 absolute path를 사용해야 합니다.


Q. __init__.py 파일의 역할에 대해서도 정리해서 블로깅 해주세요.

__init__.py 파일은 현재 디렉토리가 Package라는 것을 인식시켜주는 파일입니다.

__init__ 파일 안에 __all__이라는 List가 있고 그 안에 이름들이 들어있는 경우가 있습니다. *로 모듈들을 불러올때는 __all__에 정의되어있는 모듈들만 가져옵니다. __all__이 정의되어있지 않으면 인식되지 않습니다.


좋은 웹페이지 즐겨찾기