Setuptoolsを使用したデプロイ—Flaskドキュメント

提供:Dev Guides
< FlaskFlask/docs/1.0.x/patterns/distribute
移動先:案内検索

Setuptoolsを使用したデプロイ

Setuptools は、Pythonライブラリと拡張機能を配布するために一般的に使用される拡張ライブラリです。 Pythonに同梱されている基本的なモジュールインストールシステムであるdistutilsを拡張して、より大きなアプリケーションの配布を容易にするさまざまなより複雑な構造もサポートします。

  • 依存関係のサポート:ライブラリまたはアプリケーションは、自動的にインストールされる他のライブラリのリストを宣言できます。
  • パッケージレジストリ:setuptoolsはパッケージをPythonインストールに登録します。 これにより、あるパッケージによって提供された情報を別のパッケージから照会することが可能になります。 このシステムの最もよく知られている機能は、あるパッケージが別のパッケージが他のパッケージを拡張するためにフックできる「エントリポイント」を宣言できるようにするエントリポイントのサポートです。
  • インストールマネージャーpip は他のライブラリをインストールできます。

python.orgからPython2(> = 2.7.9)またはPython 3(> = 3.4)がインストールされている場合は、システムにpipとsetuptoolsが既にインストールされています。 それ以外の場合は、自分でインストールする必要があります。

Flask自体、およびPyPIで見つけることができるすべてのライブラリは、setuptoolsまたはdistutilsのいずれかで配布されます。

この場合、アプリケーションはyourapplication.pyと呼ばれ、モジュールではなくパッケージを使用していると想定しています。 アプリケーションをまだパッケージに変換していない場合は、 Larger Applications パターンに移動して、これを行う方法を確認してください。

setuptoolsを使用した実際のデプロイメントは、より複雑で自動化されたデプロイメントシナリオへの最初のステップです。 プロセスを完全に自動化したい場合は、ファブリックを使用した展開の章もお読みください。

基本セットアップスクリプト

Flaskがインストールされているため、システムでsetuptoolsを使用できます。 フラスコはすでにsetuptoolsに依存しています。

標準の免責事項が適用されます: virtualenv を使用することをお勧めします。

セットアップコードは常に、アプリケーションの横にあるsetup.pyという名前のファイルに入ります。 ファイルの名前は単なる慣例ですが、誰もがその名前のファイルを探すので、変更しない方がよいでしょう。

Flaskアプリケーションの基本的なsetup.pyファイルは次のようになります。

from setuptools import setup

setup(
    name='Your Application',
    version='1.0',
    long_description=__doc__,
    packages=['yourapplication'],
    include_package_data=True,
    zip_safe=False,
    install_requires=['Flask']
)

サブパッケージを明示的にリストする必要があることに注意してください。 setuptoolsでパッケージを自動的に検索する場合は、find_packages関数を使用できます。

from setuptools import setup, find_packages

setup(
    ...
    packages=find_packages()
)

setup関数のほとんどのパラメーターは自明である必要がありますが、include_package_dataおよびzip_safeは自明ではない場合があります。 include_package_dataは、setuptoolsにMANIFEST.inファイルを検索し、パッケージデータとして一致するすべてのエントリをインストールするように指示します。 これを使用して、静的ファイルとテンプレートをPythonモジュールと一緒に配布します(リソースの配布を参照)。 zip_safeフラグを使用して、zipアーカイブの作成を強制または防止できます。 一般に、パッケージをzipファイルとしてインストールしたくない場合があります。これは、一部のツールがパッケージをサポートしておらず、デバッグが非常に困難になるためです。


ビルドのタグ付け

リリースビルドと開発ビルドを区別すると便利です。 setup.cfgファイルを追加して、これらのオプションを構成します。

[egg_info]
tag_build = .dev
tag_date = 1

[aliases]
release = egg_info -Db ''

python setup.py sdistを実行すると、「。dev」と現在の日付が追加された開発パッケージが作成されます:flaskr-1.0.dev20160314.tar.gzpython setup.py release sdistを実行すると、バージョンflaskr-1.0.tar.gzのみのリリースパッケージが作成されます。


リソースの配布

作成したパッケージをインストールしようとすると、statictemplatesなどのフォルダーがインストールされていないことに気付くでしょう。 これは、setuptoolsが追加するファイルを認識していないためです。 あなたがすべきことは、あなたのsetup.pyファイルの隣にMANIFEST.inファイルを作成することです。 このファイルには、tarballに追加する必要のあるすべてのファイルがリストされています。

recursive-include yourapplication/templates *
recursive-include yourapplication/static *

MANIFEST.inファイルに登録しても、setup関数の include_package_data パラメーターをに設定しない限り、インストールされないことを忘れないでください。 True


依存関係の宣言

依存関係は、install_requiresパラメーターでリストとして宣言されます。 そのリストの各項目は、インストール時にPyPIからプルする必要があるパッケージの名前です。 デフォルトでは、常に最新バージョンが使用されますが、最小バージョン要件と最大バージョン要件を指定することもできます。 ここにいくつかの例があります:

install_requires=[
    'Flask>=0.2',
    'SQLAlchemy>=0.6',
    'BrokenPackage>=0.7,<=1.0'
]

前述のように、依存関係はPyPIから取得されます。 PyPIで見つからないパッケージに依存したいが、それが誰とも共有したくない内部パッケージであるために依存しない場合はどうなりますか? PyPIエントリがあるかのように実行し、setuptoolsがtarballを検索する必要がある代替の場所のリストを提供します。

dependency_links=['http://example.com/yourfiles']

ページにディレクトリリストがあり、ページ上のリンクが正しいファイル名で実際のtarballを指していることを確認してください。これは、setuptoolsがファイルを見つける方法です。 パッケージを含む社内サーバーがある場合は、そのサーバーへのURLを指定します。


インストール/開発

アプリケーションを(理想的にはvirtualenvに)インストールするには、installパラメーターを指定してsetup.pyスクリプトを実行するだけです。 アプリケーションをvirtualenvのsite-packagesフォルダーにインストールし、すべての依存関係をダウンロードしてインストールします。

$ python setup.py install

パッケージで開発していて、要件もインストールしたい場合は、代わりにdevelopコマンドを使用できます。

$ python setup.py develop

これには、データをコピーする代わりに、site-packagesフォルダーへのリンクをインストールするだけの利点があります。 その後、変更のたびにinstallを再度実行しなくても、コードの作業を続行できます。