본문 바로가기
Programming Language/Python

[Do it! 점프 투 파이썬 15일차] 5장_파이썬 날개 달기 (모듈, 패키지)

by 요호유후 2024. 4. 12.
반응형

아래의 내용은 'Do it! 점프 투 파이썬' 책을 공부하며 정리하였습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ISBN=K362833219&start=pnaver_02

 

Do it! 점프 투 파이썬

챗GPT를 시작으로 펼쳐진 생성 AI 시대에 맞춰 설명과 예제를 다듬고, 최신 경향과 심화 내용을 보충했다. 또한 이번 개정 2판도 50만 코딩 유튜버인 조코딩과 협업을 통해 유튜브 동영상을 제공해

www.aladin.co.kr

 

오늘은 모듈과 패키지에 대해 정리해보도록 하겠습니다!

 

모듈

 

모듈이란 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일입니다. 다른 파이썬 프로그램에서 불러와 사용할 수 있도록 만든 파이썬 파일이라고도 할 수 있습니다. 파이썬 확장자 .py로 만든 파이썬 파일은 모두 모듈이라고 할 수 있습니다.

 

 

모듈 불러오기

모듈을 불러오기 위해서는 "import 모듈_이름" 이라고 입력합니다. "import 모듈_이름.py"가 아닌 것에 주의하도록 합니다!

import는 이미 만들어 놓은 파이썬 모듈을 사용할 수 있게 해 주는 명령어입니다. 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있습니다.

 

* 파이썬 라이브러리는 파이썬을 설치할 때 자동으로 설치되는 파이썬 모듈을 말합니다.

 

그리고 모듈 내 함수를 사용하기 위해서는 "모듈.함수명"과 같이 모듈 이름 뒤에 도트 연산자(.)를 붙이고 함수 이름을 쓰면 됩니다. 때로는 "모듈.함수명"처럼 쓰지 않고 모듈 이름 없이 함수 이름만 쓰고 싶은 경우도 있을 텐데요, 이럴 땐 아래와 같이 사용하면 됩니다.

from 모듈_이름 import 모듈_함수

ex)
from mod1 import add

add(3, 4)

 

2개 이상의 함수를 사용하려면 아래와 같이 2가지 방법이 있습니다.

1. "from 모듈_이름 import 모듈_함수1, 모듈_함수2" 처럼 쉼표(,)로 구분하여 함수를 불러 올 수 있습니다.

from mod1 import add, sub

 

2. * 문자를 사용하는 것입니다. 여기서, * 문자는 "모든 것" 이라는 뜻을 가지고 있습니다. 따라서, 아래와 같이 입력하면 mod1 모듈의 모든 함수를 불러와 사용하겠다는 뜻이 됩니다!

from mod1 import *

 

 

if __name__ = "__main__": 의 의미

현재 a 모듈의 실행 결과값과 b 모듈에서 a 모듈을 불러와 실행한 결과값의 차이를 두기 위해서 사용합니다.

if __name__ = "__main__"을 사용하면 직접 이 파일을 실행했을 때는 __name__ == "__main__"을 의미하고 다른 파일에서 이 모듈을 불러 사용할 때는 __name__ 값이 해당 모듈명으로 출력됩니다. 따라서, __name__ 값을 조건문으로 하여, 실행값을 구분할 수 있습니다.

__name__ 실습 (입력)
__name__ 실습 (출력)
__name__ 실습 (활용)

 

 

 

패키지

 

패키지(packages)란 관련 있는 모듈의 집합을 의미합니다. 패키지는 파이썬 모듈을 계측정(디렉터리 구조)으로 관리할 수 있게 해줍니다. 패키지는 디렉터리와 파이썬 모듈로 이루어집니다.

 

 

패키지 안의 함수 실행하기

1. import하여 실행하는 방법

2. 해당 모듈이 있는 디렉터리까지를 from ... import하여 실행하는 방법

3. 해당 모듈의 함수를 직접 import 하여 실행하는 방법

1. 
import game.sound.echo
game.sound.echo.echo_test()

2.
from.game.sound import echo
echo.echo_test()

3.
from game.sound.echo import echo_test
echo_test()

 

* 아래와 같은 방법은 불가능합니다.

1. import game을 수행하면 game 디렉터리의 __init__.py에 정의한 것만 참조할 수 있습니다.
import game
game.sound.echo.echo_test()

2. 도트 연산자(.)를 사용해서 import할 때 가장 마지막 항목은 반드시 모듈 또는 패키지여야만 합니다.
import game.sound.ecno.echo_test

 

 

__init__.py의 용도

__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려 주는 역할을 합니다. 디렉터리에 __init__.py 파일이 없다면 패키지로 인식 되지 않습니다.

(파이썬 3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식합니다만, 하위 버전 호환을 위해 __init__.py 파일을 생성하는 것이 안전한 방법입니다!)

또한, __init__.py 파일은 패키지와 관련된 설정이나 초기화 코드를 포함할 수 있습니다. 공통변수나 함수를 정의할 수도 있습니다.

 

 

패키지 내 모듈을 미리 import

__init__.py 파일에 패키지 내의 다른 모듈을 미리 import하여 패키지를 사용하는 코드에서 간편하게 접근할 수 있게 합니다. (C++의 헤더파일과 같은 역할이겠죵?)

 

 

패키지 초기화

__init__.py 파일에 패키지를 처음 불러올 때 실행되어야 하는 코드를 작성할 수 있습니다. 

 

 

__all__

특정 디렉터리의 모듈을 *를 사용하여 import할 때는 다음과 같이 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import 할 수 있는 모듈을 정의해 주어야 합니다.

__all__ = ['echo']

 

__all__이 의미하는 것은 해당 디렉터리에서 *를 사용하여 import할 경우, 이곳에 정의된 echo 모듈만 import된다는 의미입니다.

* "from game.sound.echo import *" 은 __all__ 과 상관없이 import 됩니다. 이렇게 __all__과 상관없이 무조건 import 되는 경우는 "from a.b.c. import *"에서 from의 마지막 항목인 c가 모듈인 때입니다!

 

 

relative 패키지

.. 접근자 : 부모 디렉터리를 의미합니다.

. 접근자 : 현재 디렉터리를 의미합니다.

from ..sound.echo import echo_test

def render_test()
	pass

 

 

실습 (입력)

오늘은 모듈 3개로 실습 진행했어요!

모듈 실습1
모듈 실습2
모듈 실습3

 

 

실습 (출력)

모듈 실습 (출력)

 

오늘 공부한 모듈과 패키지는 C++과 유사한 부분이 많네요. 명칭의 차이만 있지 비슷비슷~ 한게 맞겠죠...?

오늘 공부는 여기까지 끝~

 

반응형

댓글