Python 애플리케이션 구조화
이 짧은 기사에서는 빠른 스크립트에서 더 복잡한 웹 응용 프로그램에 이르기까지 Python 응용 프로그램을 구성하는 모든 다양한 방법을 설명합니다.
모든 코드를 포함하는 단일 파이썬 파일
종속성이 없는 코드나 가상 환경을 사용하는 경우에는 괜찮습니다. 이것은 일반적으로 파일 구조에 복잡성이 필요하지 않은 빠른 스크립트에 사용됩니다.
my-single-file-project/
├── .gitignore
├── helloworld.py
├── test.py
├── pyproject.toml
├── LICENSE
└── README.md
helloworld.py
의 예:#!/usr/bin/env python
# helloworld.py
from datetime import datetime
def do_hello():
print(f"Hello, today is {datetime.now().date()}")
if __name__ == '__main__':
do_hello()
설치 가능한 단일 패키지
앱이 더 복잡해지면 일반적으로 다른 파일과 도우미를 모듈로 그룹화하려고 합니다.
또한 모든 파일 → 테스트 범위를 포함하도록 테스트를 개선해야 합니다. 린터의 사용을 추가할 수도 있습니다.
my-single-package-app/
├── helloworld/
│ ├── __init__.py
│ ├── helloworld.py
│ └── utils.py
├── tests/
│ ├── __init__.py
│ ├── test_helloworld.py
│ └── test_utils.py
├── runtest.sh
├── .gitignore
├── pyproject.toml
├── LICENSE
└── README.md
이제 앱의 파일을
helloworld
앱 폴더와 tests
폴더의 두 폴더에 그룹화했습니다.test_****.py
파일 이름을 앱 모듈 폴더의 파일과 일치시킵니다.__init__.py
파일은 파이썬이 그것이 패키지이고 비어 있을 수 있음을 알기 위해 필수입니다.#!/usr/bin/env python
# helloworld.py
from datetime import datetime
from helloworld.utils import show_message
def do_hello():
show_message(f"Hello, today is {datetime.now().date()}")
if __name__ == '__main__':
do_hello() # pragma: no cover
runtests.sh
파일은 coverage
로 설치할 수 있는 poetry add coverage -D
종속성을 사용하여 모든 테스트를 실행하는 스크립트입니다.#!/bin/bash
find . -name "*.pyc" -exec rm {} \;
coverage run -p --source=tests,helloworld -m unittest # this is where you add the
# folders you want to test
if [ "$?" = "0" ]; then
coverage combine
echo -e "\n\n================================================"
echo "Test Coverage"
coverage report
echo -e "\nrun \"coverage html\" for full report"
echo -e "\n"
# pyflakes or its like should go here
fi
내부 패키지가 있는 애플리케이션
더 큰 앱에서는 특히 GUI를 수행하는 경우 여러 모듈이 있을 것입니다.
응용 프로그램에 추가할 수 있는 항목은 다음과 같습니다.
app/
├── helloworld/
│ ├── __init__.py
│ ├── hello/
│ │ ├── __init__.py
│ │ ├── hello.py
│ │ └── utils.py
│ ├── world/
│ │ ├── __init__.py
│ │ └── world.py
├── tests/
│ ├── __init__.py
│ ├── hello/
│ │ ├── __init__.py
│ │ ├── test_hello.py
│ │ └── test_utils.py
│ ├── world/
│ │ ├── __init__.py
│ │ └── test_world.py
├── bin/
│ └── helloworld*
├── data/
│ └── translate.csv
├── docs/
│ ├── conf.py
│ ├── index.rst
│ ├── hello.rst
│ ├── world.rst
│ └── Makefile
├── runtest.sh
├── .gitignore
├── pyproject.toml
├── LICENSE
└── README.md
큰 상자/
이 새 폴더에는 사용자가 사용할 모든 실행 파일이 들어 있습니다. 스크립트는
.py
엔딩을 삭제합니다. 코드 논리가 거의 없어야 하며 기본 모듈의 진입점에 대한 래퍼일 뿐입니다.휠을 빌드하는 경우 이를 패키징하도록 구성할 수 있습니다
setup.py
. 스크립트는 경로에 배치됩니다.데이터/
코드가 아닌 파일이 있는 경우 일반적으로 파일이 끝나는 위치에 있어야 합니다. 테스트 데이터에도 유용합니다.
문서/
사용자와 앱을 공유하려면 문서가 매우 중요합니다.
이에 대한 매우 유용한 라이브러리는
sphinx
이며 pydoc
주석을 사용하여 문서를 자동으로 빌드합니다.poetry add sphinx -D
poetry add sphinx-rtd-theme -D
cd docs
sphinx-quickstarts
make html
.rst
파일은 sphinx-quickstart
에 의해 생성됩니다.장고 웹 애플리케이션
설치한 후
Django
이 포함된 명령을 사용하여 Django가 예상하는 대로 프로젝트 아키텍처를 생성할 수 있습니다.django-admin startproject django_world
django-admin startapp hello
몇 가지 항목이 수동으로 추가된 이 기본 폴더 트리로 끝납니다.
django_world/
├── docs/
├── static/
│ └── style.css
├── templates/
│ └── base.html
├── resetdb.sh
├── runserver.sh
├── hello/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations/
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── django_world/
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
hello/
폴더는 모든 로직, 모델, 뷰 등이 존재하는 곳입니다.static
폴더에는 모든 정적 컨텐츠(css, js,...)가 포함되어 있습니다.templates
폴더에는 모든 html 템플릿이 있습니다.runserver.sh
는 한 줄만 있는 스크립트입니다.python manage.py runserver
resetdb.sh
는 모든 데이터베이스를 지우고 처음부터 시작하기 위한 스크립트이며 도우미 도구일 뿐입니다.#!/bin/bash
find . -name "*.pyc" -exec rm {} \;
rm db.sqlite3
python manage.py migrate
# python manage.py create_test_data
# comment that last line to use premade test data
플라스크
Flask는 10줄의 코드로 작동하는 웹 앱을 보여주는 것을 자랑스럽게 생각하지만 실제로는 그렇게 하지 않을 것입니다. 다음은 완전한 폴더 구성입니다.
flaskr/
│
├── flaskr/
│ ├── ___init__.py
│ ├── db.py
│ ├── schema.sql
│ ├── auth.py
│ ├── blog.py
│ ├── templates/
│ │ ├── base.html
│ │ ├── auth/
│ │ │ ├── login.html
│ │ │ └── register.html
│ │ │
│ │ └── blog/
│ │ ├── create.html
│ │ ├── index.html
│ │ └── update.html
│ │
│ └── static/
│ └── style.css
│
├── tests/
│ ├── conftest.py
│ ├── data.sql
│ ├── test_factory.py
│ ├── test_db.py
│ ├── test_auth.py
│ └── test_blog.py
│
├── .gitignore
└── MANIFEST.in
우리는 플라스크가 실제로 파이썬 패키지 작업 방식을 사용한다는 것을 알 수 있습니다.
출처 : https://realpython.com/python-application-layouts/
Reference
이 문제에 관하여(Python 애플리케이션 구조화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mattioo/structuring-a-python-application-4a78텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)