Python 패키지: 구조, 임포트, 모범 사례
Python 패키지
점점 커지는 코드베이스를 Python 패키지로 체계적으로 정리하고, 직접 만든 모듈이나 서드파티 모듈을 효율적으로 임포트하는 방법을 알아봅니다.
동영상: Python 패키지 – 코드 정리하기
패키지란 무엇인가?
디스크에서 파일을 폴더로 묶어 관리하듯, Python은 패키지를 사용해 관련된 모듈들을 그룹화합니다. 패키지는 단순히 __init__.py 파일을 포함하는 디렉터리입니다. 이 파일은 Python에게 해당 폴더를 네임스페이스로 취급하라고 알려줍니다.
프로젝트가 커질수록 비슷한 기능의 모듈들을 패키지로 묶으면 프로젝트를 관리하기 쉽고, 구조 자체가 문서화 역할을 합니다. 패키지는 서브패키지를 포함할 수 있으며, 이는 디렉터리가 중첩될 수 있는 것과 같은 원리입니다.
예를 들어 게임 프로젝트는 다음과 같은 구조를 가질 수 있습니다:
패키지에서 모듈 임포트하기
모듈은 점(.) 표기법을 사용해 임포트합니다. Game/Level 패키지에서 start.py를 가져오려면 다음과 같이 작성합니다:
import Game.Level.start
start.py에 select_difficulty() 함수가 정의되어 있다면, 전체 네임스페이스를 사용해 호출합니다:
Game.Level.start.select_difficulty(2)
코드를 간결하게 하려면 모듈을 로컬 네임스페이스로 임포트할 수 있습니다:
from Game.Level import start
이제 select_difficulty를 다음과 같이 호출할 수 있습니다:
start.select_difficulty(2)
더 간결하게 함수를 직접 임포트할 수도 있습니다:
from Game.Level.start import select_difficulty
그러면 단순히 다음과 같이 호출 가능합니다:
select_difficulty(2)
간결하지만, 함수 단위로 임포트하면 서로 다른 모듈이 동일한 이름의 심볼을 노출할 때 네임스페이스 충돌이 발생할 수 있습니다. 전체 패키지 경로를 사용하면 네임스페이스가 명시적이 되어 더 안전합니다.
Python은 일반 모듈과 마찬가지로 sys.path에 나열된 디렉터리들을 검색해 패키지 임포트를 해결합니다.