본문 바로가기
Python 문법/Python 기본 문법(3.10 기준)

[python3.10 기본] 16. 프로젝트 구성 및 배포

by cogito21_python 2024. 7. 2.
반응형

16.1 프로젝트 디렉토리 구조

효율적인 프로젝트 관리를 위해서는 디렉토리 구조를 잘 설계하는 것이 중요합니다. 일반적으로 파이썬 프로젝트는 다음과 같은 구조를 갖습니다.

my_project/
├── my_project/
│   ├── __init__.py
│   ├── module1.py
│   ├── module2.py
│   └── ...
├── tests/
│   ├── __init__.py
│   ├── test_module1.py
│   ├── test_module2.py
│   └── ...
├── docs/
│   ├── conf.py
│   ├── index.rst
│   └── ...
├── setup.py
├── README.md
├── requirements.txt
└── .gitignore
  • my_project/: 프로젝트의 실제 코드가 위치하는 디렉토리입니다.
  • tests/: 테스트 코드가 위치하는 디렉토리입니다.
  • docs/: 프로젝트 문서가 위치하는 디렉토리입니다.
  • setup.py: 패키지 배포를 위한 설정 파일입니다.
  • README.md: 프로젝트에 대한 설명을 담고 있는 파일입니다.
  • requirements.txt: 프로젝트에 필요한 패키지 목록을 담고 있는 파일입니다.
  • .gitignore: 버전 관리에서 제외할 파일 및 디렉토리를 지정하는 파일입니다.

16.2 setup.py와 setuptools

setup.py 파일은 패키지를 배포하기 위한 메타데이터와 설정 정보를 담고 있습니다. setuptools를 사용하여 패키지를 관리합니다.

 

setup.py 기본 예제

from setuptools import setup, find_packages

setup(
    name='my_project',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        'numpy',
        'pandas',
    ],
    entry_points={
        'console_scripts': [
            'my_command=my_project.module1:main_function',
        ],
    },
    author='Your Name',
    author_email='your.email@example.com',
    description='A description of your project',
    long_description=open('README.md').read(),
    long_description_content_type='text/markdown',
    url='https://github.com/yourusername/my_project',
    classifiers=[
        'Programming Language :: Python :: 3',
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
    ],
    python_requires='>=3.6',
)

 

setup.py 주요 항목 설명

  • name: 패키지 이름
  • version: 패키지 버전
  • packages: 포함할 패키지 목록 (find_packages()를 사용하여 자동으로 찾음)
  • install_requires: 의존 패키지 목록
  • entry_points: 스크립트와 명령줄 도구 정의
  • author: 작성자 이름
  • author_email: 작성자 이메일
  • description: 패키지 설명
  • long_description: 패키지의 긴 설명 (주로 README 파일에서 읽어옴)
  • long_description_content_type: 긴 설명의 콘텐츠 타입 (일반적으로 'text/markdown')
  • url: 프로젝트 URL
  • classifiers: 패키지 분류 정보
  • python_requires: 요구 파이썬 버전

16.3 패키지 배포 (PyPI)

파이썬 패키지 인덱스(PyPI)에 패키지를 배포하면 다른 사용자들이 패키지를 설치하고 사용할 수 있습니다.

 

Twine 설치

pip install twine

패키지 빌드

python setup.py sdist bdist_wheel

PyPI에 업로드

twine upload dist/*

PyPI 테스트 서버에 업로드 (선택 사항)
실제 배포 전에 PyPI 테스트 서버를 사용하여 패키지를 업로드하고 테스트할 수 있습니다.

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

패키지 설치
다른 사용자는 다음 명령어를 사용하여 PyPI에 업로드된 패키지를 설치할 수 있습니다.

pip install my_project
반응형