본문 바로가기
Python

Python - package

by DGK 2021. 10. 18.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

package

 

  • 기본 개념
패키지는 모듈을 모아놓은 폴더이다.

# 기본 예시

import sub.sub1.module1
import sub.sub2.module2

# sub(패키지)에서 모듈 파일을 import하는 방법이다.
# 단, 같은 경로에 존재하는 패키지를 가져올 때 사용하는 방법이다.

# 만약, 외부 경로에 있는 패키지의 모듈 파일을 import하고자 한다면,
# append( ) 함수를 사용하여 해당 파일의 경로를 sys.path에 등록하고 불러오면 된다.



sub.sub1.module1.mod1_test1()
sub.sub1.module1.mod1_test2()

sub.sub2.module2.mod2_test1()
sub.sub2.module2.mod2_test2()

# 패키지에 존재하는 모듈의 코드를 실행하는 방법이다.


# 참고

# import sub.sub1.module1에서 sub.sub1.module1 코드 대신
# .sub.sub1.module1 코드를 사용해도 무방하다.

# .은 현재 디렉토리를, ..은 부모(상위) 디렉토리를 의미하며 
# 일반적으로 .은 생략 가능하고 모듈 내부에서만 주로 사용된다. 




# 활용 예시

# 예시1

from sub.sub1 import module1
from sub.sub2 import module2 as m2	# as는 alias(별명)을 뜻함

module1.mod1_test1()
module1.mod1_test2()  

m2.mod2_test1()
m2.mod2_test2()             


# 이처럼 from절을 사용하면 패키지의 경로가 복잡해서 코드가 비효율적으로 길어지는
# 문제를 해결할 수 있다.(더욱 간결한 코드작성 가능)

# 또한, alias('as')를 사용하면 모듈을 불러오고 실행하는 코드를
# 더욱 간결하게 작성할 수 있다.



# 예시2

from sub.sub1 import *      # sub1 하위에 있는 모든 모듈파일을 가져옴
from sub.sub2 import *      # sub2 하위에 있는 모든 모듈파일을 가져옴
module1.mod1_test1()
module1.mod1_test2()

module2.mod2_test1()
module2.mod2_test2()


# import *는 sub(패키지)하위에 있는 모듈 파일을 모두 불러온다는 의미이다.
# 단, 이 경우에는 불필요한 모듈 파일까지 가져오기 때문에 리소스 낭비가 발생할 수 있다.

 

 

  • 참고
# __init__.py 관련 내용


# 파이썬 3.3 버전부터는 __init__.py 파일이 없어도 패키지를 인식하고 사용할 수 있다.

# 하지만 파이썬 3.3 하위버전에서는 여전히 패키지 내부에 __init__.py 파일이 존재해야만,
# 파이썬이 패키지를 import하고 사용할 수 있다. 

# 따라서, 파이썬 하위버전과의 호환을 위해서라도 패키지를 만들 경우에는
# __init__.py 파일을 함께 만들어주는 것을 권장한다.



# __init__.py 파일 안에 __all__ = ['module1']의 코드는 외부에서 
# 패키지를 import할 경우에 오직 module1만을 사용할 수 있도록 허용한다는 의미이다.

# 만약, __all__ = ['module2, module3, module4, ...'] 처럼 다수의 모듈 파일이
# 존재할 때, module1을 제외하면 패키지의 module1은 더 이상 외부에서 사용할 수 없다.
# 즉, __all__ = [ ] 안에 존재하는 모듈만 외부에서 사용할 수 있도록 허가하는 기능이다.

# 단, 파이썬 3.3 이후 버전부터는 __init__.py 파일이 없으면 위의 내용과 상관 없이 
# 모든 모듈 파일을 import하고 사용할 수 있다.(__init__.py 파일을 삭제해도 무방함)

# 하지만 파이썬 3.3 이후 버전에서도 __init__.py 파일 안에 __all__ = [ ]의 
# 코드가 존재할 경우에는 __all__ = [ ]안에 있는 모듈만을 사용할 수 있다.

'Python' 카테고리의 다른 글

Python - Built in functions  (0) 2021.10.18
Python - Exception  (0) 2021.10.18
Python - module  (0) 2021.10.18
Python - class  (0) 2021.10.15
Python - input  (0) 2021.10.15

댓글