開発者ドキュメント

Pythonアプリケーションをパッケージ化して配布する方法

序章


すべてのPythonライブラリ(つまり パッケージマネージャーを使用してダウンロードするアプリケーションパッケージ)(例: pip)は、ジョブを実行するための専用のユーティリティを使用して配布されます。 これらのユーティリティは、基本的にバージョン管理された(および圧縮された)アーカイブである「Pythonディストリビューション」を作成します。 ソースファイルやリソースファイルなど、配布されているものに関連するすべての要素がその中に含まれています。

このDigitalOceanの記事では、配布に必要なツールについて説明し、独自の便利なライブラリ、モジュール、またはアプリケーションをパッケージ化できるようにするための主要な手順について説明します。これは、プロジェクトをドロップレットにデプロイしたり共有したりするときに役立ちます。インターネット上で。

Pythonディストリビューションとパッケージ


Pythonを少ししか使用したことがない場合でも、パッケージマネージャーの使用の概念に精通しているはずです(例: pip、easy_install)モジュールとライブラリをダウンロードします(例: アプリケーション開発フレームワーク)がインポートされ、新しいフレームワークを作成するために使用されます。

これらのパッケージ管理ツールは、ローカルで動作し、ソースに接続します(つまり、 Python Package Index- PyPI )そして必要なアクションを実行します(例: 検索してインストール)これらのリソースは実際にはPythonディストリビューションと呼ばれています。

アプリケーションを配布する方法は、そのディレクトリをいくつかの必須ファイル(およびいくつかの推奨ファイル)でラップし、関連する要素を指定することで構成されます(例: リソース、依存関係など)、それをリリースするか、他の場所で使用する…とても簡単です。

注:仮想環境を使用して、使用しているPythonダウンロード、モジュール、およびアプリケーションを分離することを強くお勧めします。

Pythonパッケージ


Pythonでは、パッケージは[技術的に]インポート可能なディレクトリです( __init__.py)ソースファイルを含む(つまり モジュール)。 これは、[技術的に]実際のアプリケーションであるオペレーティングシステムパッケージ(つまり、 Debianパッケージ)。 ただし、Pythonディストリビューションは実際にはパッケージとも呼ばれることに注意する必要があります。

パッケージ構造の例:

package
  |
  |-- __init__.py

Pythonアプリケーション


単一のファイルからさまざまなパッケージに散在する数百のファイルまで、Pythonのアプリケーションと見なすことができますが、最も現実的なシナリオでは、アプリケーションは複数のモジュールと一定量の外部インポート(ライブラリから)で構成されます。 )。

アプリケーション構造の例:

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

Python配布ツールとライブラリ


Pythonの人気の性質と、Python用に作成されたサードパーティのライブラリ/アプリケーションの豊富さを考えると、よりシンプルで統一された配布方法が常に必要でした。 Pythonディストリビューションの作成に使用されるいくつかの異なるツールとライブラリがあります。

配布のタスクを処理するために、Python配布ユーティリティツールセットdistutilsが作成されました。

Python Package Index(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

内容を配置します。

 <!DOCTYPE html>    {%block title%}マイサイト{%endblock%}  {%block css%} {%endblock%}   head>  Hello、world!  body>  html>

保存してCTRL+Xを使用して終了し、Yで確定します。

アプリケーションの配布/パッケージ化から


フラスコを使用するWebサイトの例示的なアプリケーション構造を作成したので、配布の準備への最初のステップを続行できます。

フォルダ構造の変更


アプリケーションを適切にパッケージ化するには、フォルダー構造にいくつかの追加を行う必要があります。

/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配布パッケージをインストールして出荷する準備が整いました。

追加ファイル


完全に配布するには、ファイル/ディレクトリに次のものが含まれている(リンクされている)必要があることに注意してください。

DistributionReadyアプリケーションの操作


アプリケーションの作成が完了し、ファイル構造に必要な修正を加えて、完璧な配布ビルドに備えることができたので、パッケージ化操作を開始できます。

配布ファイルの作成方法


配布ファイルのコピーを生成するには、次のコマンドを実行します。

cd     ~/MyApplication
python setup.py sdist

このコマンドは、セットアップを実行し、実行されている操作を印刷して、新しく作成された内部にtarアーカイブを生成します。 dist 次のようなディレクトリ:

# 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. 編集します setup.py テキストエディタを使用したファイル(例: nano)そして新しいバージョン番号を設定します: version="0.1.1"

  2. CHANGES.txtを編集して、変更を反映します

  3. LICENSE.txtおよびREADME.txtに必要な調整を行います

  4. 前の手順に従ってコードをアップロードします。

投稿者: https ://twitter.com/ostezer ”> OS Tezer
モバイルバージョンを終了