Python에서 패키지를 만들고 사용하기 위한 초보자 가이드
파이썬 패키지: 모듈 구성 및 배포 가이드
단일 파이썬 파일에 모든 기능을 담아 거대한 애플리케이션을 개발하는 상황을 가정해 봅시다. 기술적으로는 가능할지라도, 이는 효율적이고 유지보수가 용이하며 재사용 가능한 소프트웨어를 구축하는 핵심 원칙에 어긋납니다. 이러한 이유로, 패키지와 모듈은 소프트웨어 개발에서 필수적인 요소로 자리 잡았습니다.
패키지란 무엇인가?

파이썬에서 패키지는 논리적으로 관련된 모듈과 자원들을 묶어 관리하는 방법입니다. 이는 여러 파이썬 모듈, 하위 패키지, 그리고 기타 자원들을 담고 있는 디렉토리 구조로 표현됩니다.
패키지는 계층 구조를 제공하여, 다양한 수준에서 프로젝트 코드를 체계적으로 정리할 수 있도록 돕습니다.
패키지와 모듈의 차이점
패키지와 모듈 모두 코드를 구조화하는 데 사용되지만, 몇 가지 중요한 차이점이 있습니다:
- 모듈: 모듈은 파이썬 코드를 담고 있는 개별 파일입니다. 함수, 클래스, 변수, 기타 객체들을 정의하며, 다른 코드에서 가져와 사용할 수 있습니다.
- 패키지: 패키지는 하나 이상의 모듈들을 묶어 놓은 것입니다. 또한, 하위 패키지를 포함할 수도 있습니다.
파이썬에서 패키지 만드는 방법
패키지를 생성하려면 다음 단계들을 따르세요:
1단계: 프로젝트 디렉토리 생성
가장 먼저 프로젝트 디렉토리를 만듭니다.
study_bud/
2단계: 패키지 디렉토리 생성
프로젝트 디렉토리 안에 패키지 역할을 할 새로운 디렉토리를 만듭니다. 이 디렉토리의 이름은 패키지의 목적이나 기능을 명확히 나타내는 것이 좋습니다. 이 패키지 디렉토리 안에는 모듈과 하위 패키지들이 포함됩니다.
study_bud/
math_tool/
3단계: 패키지 __init__.py 파일 정의
패키지 디렉토리 안에 __init__.py 파일을 생성합니다. 이 파일의 존재 자체가 파이썬에게 해당 디렉토리가 패키지임을 알려주는 역할을 합니다.
만약 패키지를 사용할 때마다 초기화 코드가 필요하다면 __init__.py 파일에 해당 코드를 넣고, 그렇지 않다면 비워둘 수 있습니다.
study_bud/
math_tool/
__init__.py
4단계: 패키지에 모듈 추가
패키지 디렉토리 안에 함수, 클래스, 또는 변수들을 정의하는 파이썬 모듈(.py 파일)들을 추가합니다.
이 모듈들에는 패키지의 기능을 구현하는 실제 코드들이 포함됩니다. 패키지 디렉토리 안에는 여러 개의 모듈을 만들 수 있습니다.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
5단계: 패키지에 하위 패키지 추가
패키지에 계층 구조가 필요하거나 특화된 기능들을 분리해야 할 경우, 패키지 디렉토리 안에 하위 패키지를 만들 수 있습니다.
하위 패키지는 메인 패키지 디렉토리 내에 존재하는 또 다른 패키지 디렉토리입니다. 각 하위 패키지에는 반드시 __init__.py 파일이 있어야 합니다. 하위 패키지를 통해 코드를 더욱 체계적으로 분리하고 관리할 수 있습니다.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
geometry/
__init__.py
shapes.py
calculus/
__init__.py
integrations.py
위 예시에서는 math_tool 패키지를 만들고, 두 개의 모듈(operation.py와 statistics.py), 그리고 두 개의 하위 패키지(geometry와 calculus)를 추가했습니다.

이러한 단계를 따르면, 패키지와 하위 패키지를 이용하여 관련 기능들을 쉽게 구조화할 수 있으므로 코드를 관리하고 재사용하기 더욱 용이해집니다.
파이썬에서 패키지 활용하기
패키지를 사용하려면 먼저 패키지를 가져와야 합니다. import와 from 키워드를 사용하여 패키지를 가져오고 코드 내에서 사용할 수 있습니다.
import math_tool
또한, 점 표기법을 사용하여 패키지 안의 모듈, 하위 패키지, 특정 속성을 가져올 수도 있습니다. 점 표기법을 사용하면 패키지 디렉토리 구조를 탐색하여 특정 요소에 접근할 수 있습니다. 이는 코드를 더 읽기 쉽게 만들고 유지 보수를 간편하게 합니다.
from math_tool.operations import add, multiply
위 코드는 점 표기법을 사용하여 math_tool 패키지 안의 operations 모듈로 이동하고, 그 안에서 add와 multiply 두 함수를 가져왔습니다.
절대 임포트와 상대 임포트
절대 임포트는 최상위 패키지(루트 패키지)에서 시작하여 원하는 모듈이나 하위 패키지까지의 전체 경로를 지정합니다. 파이썬에서 모듈과 패키지를 가져오는 가장 일반적이고 권장되는 방법입니다.
from math_tool.geometry.shapes import parallelogram
위 예시는 math_tool에서 시작하여 geometry 하위 패키지를 거쳐 shapes.py 모듈로 이동하여 parallelogram 함수를 가져옵니다.
상대 임포트는 현재 모듈의 위치를 기준으로 임포트를 수행합니다. 점 표기법을 사용하여 현재 모듈을 기준으로 상대적인 경로를 지정할 수 있습니다.
예를 들어, calculus/integrations.py 모듈 안에서 상대 임포트를 사용하여 geometry 하위 패키지의 shapes.py 모듈에서 함수를 가져올 수 있습니다.
from ..geometry.shapes import rhombus
이중 점(..)은 파이썬에게 다음과 같은 지시를 내립니다:
- 현재 모듈(
integrations.py)이 속한 하위 패키지 디렉토리(calculus)에서 시작합니다. - 그 하위 패키지의 상위 패키지 디렉토리(
math_tool)로 이동합니다. - 상위 디렉토리에서
geometry하위 패키지를 찾습니다. shapes.py모듈로 이동하여 여기서rhombus를 가져옵니다.
따라서 점 표기법은 현재 모듈 디렉토리에서 탐색해야 하는 디렉토리 수를 나타냅니다.
편의를 위한 별칭 임포트
코드에서 더 쉽게 참조할 수 있도록 임포트에 별칭을 할당할 수 있습니다. 별칭은 긴 패키지 또는 모듈 이름을 다룰 때 유용합니다.
별칭을 지정하려면 as 키워드를 사용합니다.
import math_tool.calculus as cal
파이썬 패키지 배포 방법
파이썬은 패키지를 빌드하고 배포할 수 있는 여러 도구와 플랫폼을 제공합니다. 패키지를 배포하면 다른 개발자들과 코드를 공유하고, 협업을 촉진하며, 사용자들의 설치 과정을 간소화하고, 더 나아가 광범위한 파이썬 커뮤니티에 기여할 수 있습니다.
1단계: PyPI에 계정 만들기
파이썬 패키지 인덱스(PyPI)는 파이썬 패키지들의 주요 저장소입니다. PyPI에 패키지를 게시하면 다른 개발자들이 쉽게 찾아서 설치할 수 있습니다.
패키지를 PyPI에 업로드할 때 인증에 필요한 사용자 이름과 비밀번호를 잘 기억해 두어야 합니다.
2단계: 패키지 관리 도구 설치
이러한 도구를 사용하면 단일 명령으로 배포 가능한 패키지를 간편하게 구성, 빌드 및 업로드할 수 있습니다.
pip install build wheel twine
3단계: setup.py 파일 만들기
패키지를 배포하려면 프로젝트의 루트 디렉토리에 setup.py 파일이 있어야 합니다. setup.py 파일에는 패키지의 이름, 버전, 작성자, 설명, 의존성 등과 같은 메타데이터가 포함됩니다.
패키지 관리 도구들은 setup.py 파일을 사용하여 패키지를 구성하고 빌드합니다.
from setuptools import setup, find_packages
setup(
name="<패키지 이름>",
version='1.0.0',
author="<당신의 이름>",
description='수학 유틸리티 함수 모음',
packages=find_packages(),
install_requires=[
'numpy',
'scipy',
],
)
4단계: 패키지 빌드
setup.py 파일이 준비되었다면, 이제 이를 사용하여 배포 가능한 패키지를 빌드할 수 있습니다. 터미널 또는 명령 프롬프트에서 setup.py 파일이 위치한 디렉토리로 이동한 후, 다음 명령을 실행합니다.
python setup.py sdist bdist_wheel
이 명령은 소스 배포 패키지(.tar.gz)와 휠 배포 패키지(.whl)를 포함하는 dist 디렉토리를 생성합니다. 빌드 및 정보 디렉토리 또한 생성됩니다.

5단계: PyPI에 패키지 업로드
패키지가 준비되었다면 PyPI에 업로드할 수 있습니다.
다음 명령을 실행합니다:
twine upload dist/* > Uploading distributions to https://upload.pypi.org/legacy/ > Enter your username: ********** > Enter your password: **********
PyPI 프로젝트 관리 페이지에서 패키지를 확인할 수 있습니다.
이제 당신의 패키지를 유용하다고 생각하는 다른 개발자들이 로컬에서 설치하고 사용할 수 있습니다.
파이썬 패키지 설치 방법
pip와 같은 패키지 관리자를 사용하면 파이썬 패키지 인덱스(PyPI)를 포함한 다양한 소스에서 파이썬 패키지를 쉽게 설치하고 관리할 수 있습니다. pip를 사용하여 패키지를 설치하려면 터미널 또는 명령 프롬프트를 열고 다음 명령을 사용하세요:
pip install <패키지_이름>
pip에 사용 가능한 모든 명령과 옵션을 보려면 --help 옵션을 사용하십시오.

깔끔한 모듈 작성하기
패키지는 모듈과 다른 모듈들을 포함하는 하위 패키지를 담고 있습니다. 코드 구성과 가독성을 개선하기 위해 코드를 모듈화하는 것이 중요하며, 특히 큰 프로젝트에서는 더욱 그렇습니다. 따라서, 파이썬으로 개발할 때 모듈을 명확하게 작성하는 것이 매우 중요합니다.