Setuptoolsを使用したデプロイ
Setuptools は、Pythonライブラリと拡張機能を配布するために一般的に使用される拡張ライブラリです。 Pythonに同梱されている基本的なモジュールインストールシステムであるdistutilsを拡張して、より大きなアプリケーションの配布を容易にするさまざまなより複雑な構造もサポートします。
- 依存関係のサポート:ライブラリまたはアプリケーションは、自動的にインストールされる他のライブラリのリストを宣言できます。
- パッケージレジストリ:setuptoolsはパッケージをPythonインストールに登録します。 これにより、あるパッケージによって提供された情報を別のパッケージから照会することが可能になります。 このシステムの最もよく知られている機能は、あるパッケージが別のパッケージが他のパッケージを拡張するためにフックできる「エントリポイント」を宣言できるようにするエントリポイントのサポートです。
- インストールマネージャー: pip は他のライブラリをインストールできます。
Flask自体、およびPyPIで見つけることができるすべてのライブラリは、setuptoolsまたはdistutilsのいずれかで配布されます。
この場合、アプリケーションはyourapplication.py
と呼ばれ、モジュールではなくパッケージを使用していると想定しています。 アプリケーションをまだパッケージに変換していない場合は、 Large Applications as Package にアクセスして、これを行う方法を確認してください。
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.gz
。 python setup.py release sdist
を実行すると、バージョンflaskr-1.0.tar.gz
のみのリリースパッケージが作成されます。
リソースの配布
作成したパッケージをインストールしようとすると、static
やtemplates
などのフォルダーがインストールされていないことに気付くでしょう。 これは、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
を再度実行しなくても、コードの作業を続行できます。