본문 바로가기
개발 기본 규칙 및 환경 설정

[개발 기본 규칙] Python 프로젝트 구조

by cogito21_python 2024. 7. 3.
반응형

기본 프로젝트 구조

project_name/
├── project_name/
│   ├── __init__.py
│   ├── module1.py
│   ├── module2.py
│   └── ...
├── tests/
│   ├── __init__.py
│   ├── test_module1.py
│   ├── test_module2.py
│   └── ...
├── docs/
│   └── ...
├── scripts/
│   └── ...
├── .gitignore
├── requirements.txt
├── setup.py
└── README.md

디렉토리 및 파일 설명

프로젝트 루트 디렉토리 (project_name/): 프로젝트 전체를 포함하는 최상위 디렉토리입니다.

패키지 디렉토리 (project_name/): 실제 코드가 포함된 디렉토리로, 프로젝트 이름과 동일한 이름을 가지는 것이 일반적입니다.

    - __init__.py: 패키지로 인식되게 하는 파일입니다.

    - module1.py, module2.py: 각종 모듈 파일들입니다.

테스트 디렉토리 (tests/): 테스트 코드가 포함된 디렉토리입니다.

    - __init__.py: 테스트 패키지로 인식되게 하는 파일입니다.

    - test_module1.py, test_module2.py: 각 모듈의 테스트 파일들입니다.

문서 디렉토리 (docs/): 프로젝트 관련 문서들이 포함된 디렉토리입니다.

스크립트 디렉토리 (scripts/): 프로젝트와 관련된 유틸리티 스크립트들이 포함된 디렉토리입니다.

.gitignore: Git에서 무시할 파일 및 디렉토리를 명시합니다.

requirements.txt: 프로젝트의 의존성 패키지들을 명시한 파일입니다.

setup.py: 패키지 배포를 위한 설정 파일입니다.

README.md: 프로젝트에 대한 설명을 포함한 파일로, 일반적으로 프로젝트의 개요, 설치 방법, 사용법 등을 포함합니다.

 

예제 setup.py 파일

from setuptools import setup, find_packages

setup(
    name='project_name',
    version='0.1.0',
    packages=find_packages(),
    install_requires=[
        'dependency1',
        'dependency2',
        # 더 많은 의존성
    ],
    entry_points={
        'console_scripts': [
            'command_name=module:function',
        ],
    },
    author='Your Name',
    author_email='your.email@example.com',
    description='A brief description of the project',
    long_description=open('README.md').read(),
    long_description_content_type='text/markdown',
    url='https://github.com/yourusername/project_name',
    classifiers=[
        'Programming Language :: Python :: 3',
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
    ],
    python_requires='>=3.6',
)

예제 .gitignore 파일

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# PyCharm
.idea/

# mypy
.mypy_cache/

# Pycharm
.idea/
*.iml
*.iws
*.ipr

# VS Code
.vscode/

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/
반응형