단일 Python 파일 내에서 광범위한 애플리케이션을 개발하는 것은 가능하지만 효과적이고 추적 가능하며 재사용 가능한 소프트웨어를 만든다는 기본 원칙에 위배됩니다. 따라서 패키지와 모듈은 소프트웨어의 생성과 성장에 중요한 역할을 합니다.

패키지란 무엇인가요?

파이썬 패키지는 일관성 있게 배열된 모듈과 리소스를 위한 조직 구조 역할을 합니다. 여러 파이썬 모듈, 하위 패키지 및 추가 자료를 포함하는 디렉터리입니다.

패키지를 활용하면 특정 프로젝트와 관련된 코드에 대해 계층화된 조직 시스템을 구현할 수 있어 다양한 수준의 개념 추상화에 따라 해당 코드를 그룹화하고 범주화할 수 있습니다.

패키지와 모듈의 차이점

모듈과 패키지는 파이썬에서 코드를 구성하는 두 가지 다른 방법이지만 몇 가지 유사점을 공유합니다. 모듈은 단일 파일 내에 관련 기능을 캡슐화할 수 있는 반면, 패키지는 상호 관련된 파일을 계층적으로 구성할 수 있습니다. 두 가지 모두 코드 가독성과 유지보수성을 개선한다는 목적은 같지만 구체적인 구현 방식은 다릅니다.

모듈은 Python 코드를 포함하는 파일로, 코드 내에서 가져와서 활용할 수 있는 함수, 클래스, 변수 및 기타 엔티티의 정의를 캡슐화하여 구성합니다.

패키지는 하나 이상의 모듈의 집합으로 정의될 수 있으며, 해당 범위 내에 하위 패키지를 포함할 수도 있습니다.

파이썬에서 패키지를 만드는 방법

소포를 구성하려면 아래 제공된 지침을 준수하세요.

1단계: 프로젝트 디렉터리 생성

초기 단계에서는 프로젝트 디렉터리를 생성합니다.

 study_bud/

2단계: 패키지 디렉토리 생성

프로젝트 파일 구조의 범위 내에서 패키지의 캡슐화 역할을 할 디렉토리를 설정하는 것이 필수적입니다. 이 디렉토리에 의도된 목적이나 기능을 구현하는 별칭을 부여하여 패키지를 상징적으로 표현하세요. 이 패키지 디렉터리에는 패키지와 관련된 다양한 모듈 및 하위 패키지가 저장됩니다.

 study_bud/
    math_tool/

3단계: 패키지 정의 __init__.py 파일

패키지 디렉터리 내에 `__init__.py` 파일이 생성되면 파이썬에서 패키지로 변환되었음을 의미하며, 이러한 파일이 존재한다는 것은 패키지가 패키지로 변환되었음을 나타냅니다.

패키지를 사용하려면 `__init__.py` 파일 내에서 관련 코드를 초기화해야 하며, 그렇지 않은 경우 해당 파일은 비어 있는 상태로 유지됩니다.

 study_bud/
    math_tool/
        __init__.py

4단계: 패키지에 모듈 추가

패키지 디렉터리 내에 Python 모듈을 추가하는 과정에는 함수 정의, 클래스 생성, 변수 정의 지정을 통해 기능을 구현하는 작업이 포함됩니다.

이 글도 확인해 보세요:  내부에서 REST API 호출을 수행하는 방법 VS 코드

앞서 언급한 구성 요소에는 패키지에 기능적 기능을 부여하는 실제 프로그래밍 지침이 포함됩니다. 패키지 디렉터리 내에 이러한 모듈을 여러 개 설정하는 것은 허용됩니다.

 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 패키지를 생성하는 과정을 포함하며, 이후 두 개의 모듈인 operations.py와 statistics.py를 추가하여 확장되었습니다. 또한 기하학 및 미적분이라는 두 개의 하위 패키지도 추가되었으며, 각 패키지에는 고유한 모듈이 포함되어 있습니다.

번들 및 하위 번들을 활용하여 정합적인 기능을 효율적으로 배치할 수 있으며, 윤곽이 잡힌 프로세스를 준수함으로써 제어 및 재사용이 용이해집니다.

파이썬에서 패키지로 작업하는 방법

코드 내에서 패키지를 활용하기 위해서는 임포트 문을 사용해야 하며, 이는 “import” 및 “from” 키워드를 모두 사용하여 구현할 수 있습니다.

 import math_tool # entire package

가져오기 문에 점 표기법을 사용하면 패키지 내에서 모듈, 하위 패키지 또는 특정 속성에 액세스할 수 있습니다. 이 방법은 패키지의 디렉토리 계층 구조 전체에서 탐색을 용이하게 하여 코드의 가독성과 유지보수성을 향상시킵니다.

 from math_tool.operations import add, multiply # specific functions

“math\_tool” 패키지의 계층 구조를 활용하여 점 표기법을 사용하여 “연산” 모듈에 액세스한 후 프로그램 내에서 추가 처리를 위해 “add” 및 “multiply” 함수를 가져옵니다.

절대 임포트 대..상대 임포트

절대 임포트의 활용에는 루트 패키지에서 원하는 모듈 또는 하위 패키지로 확장되는 전체 경로를 지정하는 것이 포함됩니다. 이는 파이썬에서 모듈과 패키지를 임포트할 때 가장 일반적이고 권장되는 접근 방식입니다.

 from math_tool.geometry.shapes import parallelogram

themath\_tool 패키지에서 기하학 하위 패키지, 특히 그것의shapes.py 모듈을 검색하여 평행 사변형 함수를 가져옵니다.

이 글도 확인해 보세요:  JES에서 사운드를 임포트하고 재생하는 방법

상대 임포트를 사용하면 절대 경로를 지정하는 대신 점 표기법을 사용하여 현재 모듈의 위치와 관련하여 임포트의 상대성을 나타냄으로써 모듈식 접근 방식을 활용할 수 있습니다.

계산/통합.py 모듈 내에서 상대 가져오기를 사용하여 지오메트리 하위 패키지 내에 있는 shapes.py 모듈에서 함수를 가져올 수 있습니다.

 # calculus/integrations.py
from ..geometry.shapes import rhombus

Python에서 이중 점 “..”은 특정 조건이 충족될 때까지 필요한 만큼 문이나 코드 블록을 여러 번 반복해야 함을 나타내는 데 사용됩니다.

미적분 패키지의 하위 디렉터리로 시작하며, 여기에는 integrations.py 모듈이 있습니다.

하위 패키지 “수학\_도구”의 상위 디렉토리로 이동합니다.

상위 폴더에서 기하학 패키지를 찾습니다.

`shapes.py` 모듈 내에서 마름모 클래스에 대한 가져오기를 시작합니다.

점 표기법은 원하는 위치에 도달하기 위해 현재 모듈 폴더에서 이동해야 하는 계층적 레벨의 양을 나타내기 위해 활용됩니다.

편의를 위한 별칭 가져오기

가져오기에 별칭을 추가하여 코드 내에서 참조를 용이하게 할 수 있습니다. 이는 긴 패키지 또는 모듈 지정을 처리할 때 유용합니다.

“as”라는 용어는 별칭으로 알려진 다른 엔티티에 이름이나 레이블을 위임하는 데 사용됩니다.

 import math_tool.calculus as cal

파이썬에서 패키지를 배포하는 방법

파이썬은 패키지를 생성하고 배포할 수 있는 일련의 도구와 인프라를 제공합니다. 패키지를 배포하면 동료 개발자와 코드를 쉽게 공유하고, 협업을 장려하며, 최종 사용자가 더 쉽게 설치할 수 있고, 전체 Python 생태계에 기여할 수 있습니다.

1단계: PyPI에서 계정 만들기

Python 패키지 인덱스 (PyPI)는 Python 패키지의 기본 리포지토리입니다. 다른 개발자가 패키지를 쉽게 찾아서 설치할 수 있도록 PyPI에 패키지를 게시할 수 있습니다.

사용자 이름과 비밀번호는 PyPI에 번들을 제출할 때 신원 확인에 필요하므로 기억할 수 있는지 확인하세요.

2단계: 패키지 관리 도구 설치

앞서 언급한 유틸리티를 사용하면 명령어 하나만으로 프로젝트의 패키지 버전을 손쉽게 설정, 구성 및 배포할 수 있습니다.

 pip install build wheel twine

3단계: setup.py 파일 생성

패키지를 배포하려면 프로젝트의 루트 디렉터리에 setup.py 파일 을 생성합니다. setup.py 파일에는 이름, 버전, 작성자, 설명, 종속성 등 패키지에 대한 메타데이터가 포함되어 있습니다.

이 글도 확인해 보세요:  Vite로 React 앱을 설정하는 방법

setup.py 파일을 활용하면 패키지 관리 도구에서 패키지를 쉽게 구성하고 구축할 수 있습니다.

 #setup.py
from setuptools import setup, find_packages

setup(
    name='<package name>',
    version='1.0.0',
    author='<Your Name>',
    description='A collection of mathematical utility functions',
    packages=find_packages(),
    install_requires=[
        'numpy',
        'scipy',
    ],
)

4단계: 패키지 빌드

setup.py 파일을 준비했으면 이를 사용하여 패키지 배포를 생성할 수 있습니다. 터미널 또는 명령 프롬프트를 사용하여 setup.py 파일이 있는 폴더로 이동하여 다음 작업을 실행합니다.

 python setup.py sdist bdist_wheel

이 명령을 실행하면 소스 배포 패키지를 포함하는 압축된 “.tar.gz” 아카이브 파일과 휠 배포 패키지에 속하는 다른 “.whl” 파일이라는 두 가지 유형의 패키지가 포함된 “dist”라는 디렉터리가 생성됩니다. 또한 “빌드” 폴더와 “정보” 폴더도 함께 생성합니다.

5단계: PyPI에 패키지 업로드

부지런히 준비했으니 Python 패키지 인덱스를 통해 신속하게 배포할 수 있습니다.

 twine upload dist/*
> Uploading distributions to https://upload.pypi.org/legacy/
> Enter your username: **********
> Enter your password: **********

PyPI 프로젝트 관리 페이지로 이동하여 패키지를 확인하세요.

이제 패키지를 로컬에 설치하여 유용하게 사용할 수 있는 다른 개발자가 사용할 수 있습니다.

파이썬 패키지 설치 방법

pip와 같은 패키지 관리자를 활용하면 파이썬 패키지 인덱스(PyPI)를 비롯한 다양한 리소스에서 검색된 파이썬 모듈을 쉽게 설치하고 관리할 수 있습니다. pip를 통해 모듈을 설치하려면 터미널 또는 명령 프롬프트에 액세스하여 다음 지시어를 사용할 수 있습니다.

 pip install <package_name>

`–help` 옵션을 활용하여 `pip`에서 제공하는 명령 및 대안의 포괄적인 목록을 볼 수 있습니다.

클린 모듈 작성

모듈은 종종 하위 모듈과 패키지로 구성되며, 그 자체로 추가 모듈을 포함할 수 있습니다. 모듈화를 활용하면 조직 구조와 이해도를 높일 수 있기 때문에 대규모 프로젝트에 특히 유용합니다. 따라서 Python을 사용하여 소프트웨어 애플리케이션을 만들 때는 명확하고 간결한 모듈을 만드는 것이 필수적입니다.

By 김민수

안드로이드, 서버 개발을 시작으로 여러 분야를 넘나들고 있는 풀스택(Full-stack) 개발자입니다. 오픈소스 기술과 혁신에 큰 관심을 가지고 있고, 보다 많은 사람이 기술을 통해 꿈꾸던 일을 실현하도록 돕기를 희망하고 있습니다.