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="[email protected]", # 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
DistributionReadyアプリケーションの操作
アプリケーションの作成が完了し、ファイル構造に必要な修正を加えて、完璧な配布ビルドに備えることができたので、パッケージ化操作を開始できます。
配布ファイルの作成方法
配布ファイルのコピーを生成するには、次のコマンドを実行します。
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
アプリケーションの新しいバージョンのパッケージを作成する方法
setup.py
ファイルをテキストエディタで編集します(例: nano)そして新しいバージョン番号を設定します:version="0.1.1"
- CHANGES.txtを編集して、変更を反映します
- LICENSE.txtおよびREADME.txtに必要な調整を行います
- 前の手順に従ってコードをアップロードします。