클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

파이썬 날개 달기 4 - 패키지 본문

프로그래밍 언어/파이썬

파이썬 날개 달기 4 - 패키지

huenuri 2024. 9. 7. 23:06

어젯밤부터 그동안 해결하지 못했던 문제를 풀어보며 주피터 노트북이 아닌 파이썬 프로그램으로 실습해보았다. 처음부터 지금까지 공부한 부분까지 모두 복습하며 다시 실습해보며 정말 많은 것들을 배울 수 있었고 파이썬에 더욱 흥미를 느끼게 되었다.

이제 여기서부터는 복습이 아닌 진짜 학습이다.

 

파이썬에서 패키지란 관련 있는 모듈의 집합을 말한다. 패키지는 파이썬 모듈을 계층적(디렉터리 구조)어로 관리할 수 있게 해준다. 패키지 구조로 모듈은 만들면 다른 모듈과 이름이 겹치더라도 더 안전하게 사용할 수 있다.


 

 

 

패키지 만들기

디렉토리 밑에 다음과 같은 폴더와 py 파일을 만들었다.

 

 

다음의 두 파일을 제외하고 나머지는 빈 파일로 남겨둔다.

 

 

 

그런 다음 환경 변수에 다음과 같은 디렉터리를 추가한다.

 


 

 

 

 

패키지 안의 함수 실행하기

패키지를 사용하여 echo.py 파일의 echo_test 함수를 실행해본다. 패키지 안의 함수를 실행하는 방법에는 3가지가 있다. 주의할 점은 하나의 예제를 실행하고 나서 다음 예제를 실행할 때는 반드시 인터프리터를 종료하고 다시 실행해야 한다. 그렇지 않으면, 이전에 import한 것들이 메모리에 남아있어 엉뚱한 결과가 나올 수 있다.

 

첫번째 : echo 모듈을 import

 

 

 

두번째 : echo 모듈 디렉터리 실행

 

 

세번째 : echo 모듈의 echo_test 함수를 직접 import


 

 

사용 불가능할 때

 

 


 

 

 

__init__.py의 용도

이 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 만약 game, sound, graphic 등 패키지에 포함된 디렉터리에 __init__.py 파일이 없다면 파키지로 인식되지 않는다.

하지만 파이썬 3.3버전 부터는 패키지아 없어도 인식한다.

또한 __init__.py  파일은 패키지와 관련된 설정이나 초기화 코드를 포함할 수 있다.

 

 

 

패키지 변수 및 함수 정의

패키지 수준에서 변수와 함수를 정의할 수 있다.

 

 


 

 

 

패키지 내 모듈을 미리 import

__init__.py 파일에 파키지 내의 다른 모듈을 미리 import하여 패키지를 사용하는 코드에서 간편하게 접근할 수 있게 한다.

 


 

 

 

 

패키지 초기화

__init__.py 파일에 패키지를 처음 불러올 때 실행되어야 하는 코드를 작성할 수 있다. 예를 들어 데이터베이스 연결이나 설정 파일 로드와 같은 작업을 수행할 수 있다.

 

 

 

단, 초기화 코드는 한번 실행된 후에는 다시 import를 수행하더라도 실행되지 않는다. 예를 들어 다음과 같이 game 패키지를 import한 후에 하위 모듈을 다시 import 하더라도 초기화 코드는 처음 한 번만 실행된다.

 


 

 

 

__all__

 

game.sound 패키지에서 모든 것을 import했으므로 echo 모듈을 사용할 수 있어야 할 것 같은데, echo 라는 이름이 정의되어 있지 않다는 오류가 발생했다.

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

 

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

 


 

 

 

relative 패키지

만약 graphic 디렉터리의 render.py 모듈에서 sound 디렉터리의 echo.py 모듈을 사용하고 싶다면 어떻게 해야 할까? 다음과 같이 수정하면 된다.

 

 

전체 경로를 사용하여 import 할 수도 있지만 다음처럼 상대 경로를 사용하는 것도 가능하다.

 

 

 


 

 

 

학습을 마치고

길고 길었던 패키지 학습을 모두 마쳤다. 여기까지 오기까지 많이 힘들었지만 그래도 포기하지 않고 끝까지 공부하길 잘했다는 생각이 든다. 동영상에는 비주얼 코드로만 하는 방법이 나와있지만, 이 방법은 훨씬 더 간단한 것 같아 난 어렵지만 정도로 학습해보았다.

어렵지만 다 공부하고 나니 무척 뿌듯하다.