웹사이트 검색

Python 애플리케이션을 패키징하고 배포하는 방법


소개

패키지 관리자(예: pip)를 사용하여 다운로드하는 모든 Python 라이브러리(예: 애플리케이션 패키지)는 작업 수행 전용 유틸리티를 사용하여 배포됩니다. 이러한 유틸리티는 기본적으로 버전이 지정되고 압축된 아카이브인 "Python 배포판\을 생성합니다. 소스 파일 및 리소스 파일과 같이 배포되는 항목과 관련된 모든 요소가 포함되어 있습니다.

이 DigitalOcean 기사에서는 배포에 필요한 도구에 대해 이야기하고 프로젝트를 드롭릿에 배포하거나 공유할 때 도움이 되는 유용한 라이브러리, 모듈 또는 애플리케이션을 패키징할 수 있는 주요 단계를 살펴보겠습니다. 인터넷에서.

Python 배포 및 패키지

Python을 조금만 사용해 본 경험이 있어도 패키지 관리자(예: pip, easy_install)를 사용하여 모듈 및 라이브러리(예: 애플리케이션 개발 프레임워크)를 다운로드한 다음 가져와서 새 프로젝트를 만드는 데 사용하는 개념에 익숙할 것입니다. 하나.

로컬에서 작동하는 이러한 패키지 관리 도구는 소스(예: Python 패키지 인덱스 - PyPI)에 연결하고 실제로 Python 배포라고 하는 이러한 리소스를 작동하면서 원하는 작업(예: 검색 및 설치)을 수행합니다.

응용 프로그램을 배포하는 방법은 필수 파일(몇 가지 권장 파일 포함)로 디렉터리를 래핑하고 관련 요소(예: 리소스, 종속성 등)를 지정하고 해제하거나 다른 곳에서 사용하는 것으로 구성됩니다. 그렇게 간단합니다.

참고: 작업 중인 Python 다운로드, 모듈 및 응용 프로그램을 격리하기 위해 가상 환경에서 작업하는 것이 좋습니다.

파이썬 패키지

Python에서 [기술적으로] 패키지는 소스 파일(예: 모듈)을 포함하는 가져올 수 있는 디렉토리(__init__.py 포함)입니다. 이것은 [기술적으로] 실제 응용 프로그램인 운영 체제 패키지(예: 데비안 패키지)와 혼동해서는 안 됩니다. 그러나 Python 배포판은 실제로 패키지라고도 합니다.

패키지 구조 예:

package
  |
  |-- __init__.py

파이썬 애플리케이션

하나의 파일에서 다양한 패키지에 흩어져 있는 수백 개의 파일에 이르기까지 모든 것이 Python의 응용 프로그램으로 간주될 수 있지만, 가장 현실적인 시나리오에서 응용 프로그램은 여러 모듈과 일정량의 외부 가져오기(에서 도서관).

애플리케이션 구조 예:

myapp
  |
  |-- __init__.py
  |-- amodule.py
  |-- anothermod.py
  |__ tests
  |     |
  |     |-- __init__.py
  |     |-- ..
  |     |-- .
  | ..

Python 배포 도구 및 라이브러리

Python의 인기 있는 특성과 이를 위해 작성된 풍부한 타사 라이브러리/응용 프로그램을 고려할 때 더 간단하고 통합된 배포 방법이 항상 필요했습니다. Python 배포판을 만드는 데 사용되는 여러 도구와 라이브러리가 있습니다.

배포 작업을 처리하기 위해 Python 배포 유틸리티 도구 세트 distutils가 만들어졌습니다.

Python 패키지 인덱스(PyPI)

Python Package Index 또는 PyPI는 프로젝트(Python 배포판)의 중앙 [온라인] 리포지토리입니다. pip와 같은 패키지 관리 도구는 패키지를 호스트, 검색 및 설치하기 위해 이 저장소를 사용합니다.

시작하기

패키징에 사용할 수 있는 단순하고 일반적인 Python 플라스크 애플리케이션[구조]을 만드는 것으로 시작하겠습니다.

애플리케이션 구조 생성

우리는 대부분의 실제 프로젝트와 유사한 사례를 만드는 것을 목표로 합니다. 따라서 모듈화된 구성 요소가 있는 시나리오를 상상하는 것이 가장 좋습니다.

예제 구조:

/MyApplication
    |-- run.py
    |-- config.py
    |__ /app
         |-- __init__.py
         |-- /module_one
             |-- __init__.py
             |-- controllers.py
             |-- models.py                
         |__ /templates
             |-- module_one
                 |-- hello.html
         |__ /static
         |__ ..
         |__ .

폴더를 만듭니다.

mkdir ~/MyApplication
cd    ~/MyApplication
touch run.py
touch config.py
mkdir app
cd    app
touch __init__.py
mkdir templates
mkdir static
mkdir module_one
cd    module_one
touch __init__.py
touch controllers.py
touch models.py
cd    ../templates
mkdir module_one
cd    module_one
touch hello.html

nano를 사용하여 run.py를 편집합니다.

nano ~/MyApplication/run.py

내용물 넣기:

# Run a test server.
from app import app
app.run(debug=True)

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

nano를 사용하여 config.py를 편집합니다.

nano ~/MyApplication/config.py

내용물 넣기:

DEBUG = True

THREADS_PER_PAGE = 4

CSRF_ENABLED     = True
CSRF_SESSION_KEY = "secret"

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

nano를 사용하여 app/init.py 편집:

nano ~/MyApplication/app/__init__.py

내용물 넣기:

from flask import Flask, render_template

app = Flask(__name__)
app.config.from_object("config")

from app.module_one.controllers import module_one

app.register_blueprint(module_one)

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

nano를 사용하여 app/module_one/controllers.py를 편집합니다.

nano app/module_one/controllers.py

내용물 넣기:

from flask import Blueprint, request, render_template

module_one = Blueprint("auth", __name__, url_prefix="/auth")

@module_one.route("/hello")
def hello():
    return render_template("module_one/hello.html")

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

내용물 넣기:

nano를 사용하여 app/templates/module_one/hello.html을 편집합니다.

nano app/templates/module_one/hello.html

내용물 넣기:

<예비>

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

어플리케이션 배포/패키징의 시작

플라스크를 사용하는 웹 사이트의 예시적인 애플리케이션 구조를 만들었으므로 배포 준비의 첫 단계를 계속 진행할 수 있습니다.

폴더 구조 변경

응용 프로그램을 잘 패키징하려면 폴더 구조에 일부 항목을 추가해야 합니다.

/MyApplication
    |-- run.py
    |__ /app
         |-- __init__.py
         |-- /module_one
             |-- __init__.py
             |-- controllers.py
             |-- models.py                
         |__ /templates
             |-- module_one
                 |-- hello.html
         |__ /static
         |__ ..
         |__ .
    |-- setup.py    # Distribution setup file
    |-- README.txt  # Read-me file
    |-- MANIFEST.in # Distribution manifest file
    |-- CHANGES.txt # Changes log

필요한 파일을 만들기 위해 폴더 구조를 변경합니다.

touch ~/MyApplication/setup.py
touch ~/MyApplication/README.py
touch ~/MyApplication/MANIFEST.py
touch ~/MyApplication/CHANGES.py
mv    ~/MyApplication/run.py ~/MyApplication/bin/run

setup.py 생성

nano ~/MyApplication/setup.py

아래의 자명한 내용을 배치하십시오.

from distutils.core import setup

setup(
    # Application name:
    name="MyApplication",
    
    # Version number (initial):
    version="0.1.0",
    
    # Application author details:
    author="name surname",
    author_email="name@addr.ess",
    
    # Packages
    packages=["app"],
    
    # Include additional files into the package
    include_package_data=True,
    
    # Details
    url="http://pypi.python.org/pypi/MyApplication_v010/",
    
    #
    # license="LICENSE.txt",
    description="Useful towel-related stuff.",
    
    # long_description=open("README.txt").read(),
    
    # Dependent packages (distributions)
    install_requires=[
        "flask",
    ],
)

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

MANIFEST.in 만들기

추가 디렉토리(예: 정적 또는 템플릿)를 제공해야 하는 경우 패키징할 매니페스트에 명시적으로 명시해야 합니다. MANIFEST.in 내에서 이 작업을 수행합니다.

nano ~/MyApplication/MANIFEST.in

아래의 자명한 내용을 배치하십시오.

recursive-include app/templates *
recursive-include app/static *

CTRL+X를 사용하여 저장하고 종료하고 Y로 확인합니다.

그리고 그게 다야! Python 배포 패키지를 설치하고 배송할 준비가 되었습니다.

추가 파일

완전한 배포를 위해서는 파일/디렉토리에 다음이 포함(및 링크)되어야 함을 기억하십시오.

  • README.txt
  • MANIFEST.in
  • LICENSE.txt

배포 준비 응용 프로그램 작업

완벽한 배포 빌드를 준비하기 위해 파일 구조를 수정한 후 애플리케이션 생성을 완료했으므로 패키징 작업을 시작할 수 있습니다.

배포 파일을 만드는 방법

배포 파일 사본을 생성하려면 다음을 실행하십시오.

cd     ~/MyApplication
python setup.py sdist

이 명령은 설정을 살펴보고 수행 중인 작업을 인쇄하고 새로 생성된 dist 디렉토리 내에 다음과 유사한 tar 아카이브를 생성합니다.

# root@hostname:~/MyApplication# ls dist
# MyApplication-0.1.0.tar.gz

참고: 모든 하위 폴더(예: 정적)를 채우지 않고 추가 파일(예: README.txt)로 작업했기 때문에 생성 프로세스 중에 몇 가지 경고가 표시될 수 있습니다.

애플리케이션 설치 방법

이제부터 생성된 setup.py 파일을 사용하여 다른 사람이 애플리케이션을 설치하고 사용할 수 있습니다.

애플리케이션을 설치하려면 다음을 실행하십시오.

python setup.py install

이 설치가 개발용이고 요구 사항도 설치해야 하는 경우 다음을 실행합니다.

python setup.py develop

지원서를 공유하는 방법

Python Packaging Index에서 코드를 공유하려면 다음과 같이 "등록\ 절차를 시작하면 됩니다.

python setup.py register

화면의 지시에 따라 절차를 완료해야 합니다.

등록된 로그인이 있는 경우 업로드만 하려면 다음을 사용할 수 있습니다.

python setup.py sdist upload

애플리케이션의 새 버전 패키지를 만드는 방법

  1. 텍스트 편집기(예: nano)로 setup.py 파일을 편집하고 새 버전 번호를 설정합니다: version=\0.1.1\\n
  2. 변경 사항을 반영하도록 CHANGES.txt를 편집합니다.\n
  3. LICENSE.txt 및 README.txt에 필요한 조정을 합니다.\n
  4. 이전 단계에 따라 코드를 업로드합니다.\n

제출자: