4.4。 ソースディストリビューションの作成
セクション簡単な例に示すように、 sdist コマンドを使用してソースディストリビューションを作成します。 最も単純なケースでは、
python setup.py sdist
(セットアップスクリプトまたは構成ファイルで sdist オプションを指定していない場合)、 sdist は現在のプラットフォームのデフォルト形式のアーカイブを作成します。 デフォルトの形式は、Unixではgzipで圧縮されたtarファイル(.tar.gz
)、WindowsではZIPファイルです。
--formats
オプションを使用して、必要な数の形式を指定できます。次に例を示します。
python setup.py sdist --formats=gztar,zip
gzipで圧縮されたtarballとzipファイルを作成します。 使用可能な形式は次のとおりです。
フォーマット | 説明 | ノート |
---|---|---|
zip
|
zipファイル(.zip )
|
(1),(3) |
gztar
|
gzipで圧縮されたtarファイル(.tar.gz )
|
(2) |
bztar
|
bzip2で圧縮されたtarファイル(.tar.bz2 )
|
|
ztar
|
圧縮されたtarファイル(.tar.Z )
|
(4) |
tar
|
tarファイル(.tar )
|
ノート:
- Windowsのデフォルト
- Unixのデフォルト
- 外部の zip ユーティリティまたは zipfile モジュール(Python 1.6以降の標準Pythonライブラリの一部)のいずれかが必要です
- compress プログラムが必要です。
Unixでtar
形式(gztar
、bztar
、ztar
、tar
)を使用する場合は、owner
およびgroup
の名前。
たとえば、アーカイブのすべてのファイルをrootが所有するようにする場合は、次のようにします。
python setup.py sdist --owner=root --group=root
4.1。 配布するファイルの指定
ファイルの明示的なリスト(またはファイルの生成方法の説明)を指定しない場合、 sdist コマンドは、最小限のデフォルトセットをソースディストリビューションに配置します。
py_modules
およびpackages
オプションによって暗示されるすべてのPythonソースファイルext_modules
またはlibraries
オプションに記載されているすべてのCソースファイルscripts
オプションで識別されるスクリプトスクリプトのインストールを参照してください。- テストスクリプトのように見えるもの:
test/test*.py
(現在、Distutilsはソースディストリビューションに含める以外はテストスクリプトに対して何もしませんが、将来的にはPythonモジュールディストリビューションをテストするための標準があります) README.txt
(またはREADME
)、setup.py
(またはセットアップスクリプトと呼ばれるもの)、およびsetup.cfg
package_data
メタデータに一致するすべてのファイル。 パッケージデータのインストールを参照してください。data_files
メタデータに一致するすべてのファイル。 追加ファイルのインストールを参照してください。
これで十分な場合もありますが、通常は、配布する追加のファイルを指定する必要があります。 これを行う一般的な方法は、デフォルトでMANIFEST.in
と呼ばれるマニフェストテンプレートを作成することです。 マニフェストテンプレートは、マニフェストファイルMANIFEST
を生成する方法の単なるリストです。これは、ソースディストリビューションに含めるファイルの正確なリストです。 sdist コマンドは、このテンプレートを処理し、その命令とファイルシステムで検出された内容に基づいてマニフェストを生成します。
独自のマニフェストファイルをロールする場合、形式は単純です。1行に1つのファイル名、通常のファイル(またはそれらへのシンボリックリンク)のみです。 独自のMANIFEST
を提供する場合は、すべてを指定する必要があります。この場合、上記のデフォルトのファイルセットは適用されません。
バージョン2.7での変更:既存の生成されたMANIFEST
は、 sdist が変更時間をMANIFEST.in
または [のいずれかと比較せずに再生成されます。 X171X]。
バージョン2.7.1で変更: MANIFEST
ファイルは、生成されたことを示すコメントで始まります。 このコメントのないファイルは上書きまたは削除されません。
バージョン2.7.3で変更: sdist は、2.7より前のように、MANIFEST.in
が存在しない場合、MANIFEST
ファイルを読み取ります。
構文リファレンスについては、 MANIFEST.inテンプレートセクションを参照してください。
4.3。 MANIFEST.inテンプレート
MANIFEST.in
ファイルをプロジェクトに追加して、 sdist コマンドで作成されたディストリビューションに含めるファイルのリストを定義できます。
sdist を実行すると、MANIFEST.in
ファイルを検索して解釈し、パッケージに含まれるファイルのリストを含むMANIFEST
ファイルを生成します。
このメカニズムは、デフォルトのファイルリストでは不十分な場合に使用できます。 (配布するファイルの指定を参照)。
4.3.1。 原理
マニフェストテンプレートには、1行に1つのコマンドがあり、各コマンドは、ソースディストリビューションに含めるまたはソースディストリビューションから除外するファイルのセットを指定します。 例として、Distutils独自のマニフェストテンプレートを見てみましょう。
include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build
意味はかなり明確である必要があります。*.txt
に一致するディストリビューションルート内のすべてのファイル、*.txt
または*.py
に一致するexamples
ディレクトリの下のすべてのファイルを含めます。 examples/sample?/build
に一致するすべてのディレクトリを除外します。 これはすべて、標準インクルードセットの後に実行されるため、マニフェストテンプレートの明示的な指示を使用して、標準セットからファイルを除外できます。 (または、--no-defaults
オプションを使用して、標準セットを完全に無効にすることができます。)
マニフェストテンプレート内のコマンドの順序は重要です。最初は、上記のようにデフォルトファイルのリストがあり、テンプレート内の各コマンドはそのファイルのリストに追加またはリストから削除します。 マニフェストテンプレートを完全に処理したら、ソースディストリビューションに含めるべきではないファイルを削除します。
- Distutilsの「ビルド」ツリー内のすべてのファイル(デフォルトは
build/
) RCS
、CVS
、.svn
、.hg
、.git
、.bzr
、または_darcs
これで、ファイルの完全なリストができました。これは、将来の参照用にマニフェストに書き込まれ、ソース配布アーカイブの構築に使用されます。
--no-defaults
オプションを使用すると、含まれているファイルのデフォルトセットを無効にでき、--no-prune
を使用して標準の除外セットを無効にできます。
Distutils独自のマニフェストテンプレートに従って、 sdist コマンドがDistutilsソースディストリビューションに含めるファイルのリストをどのように作成するかを追跡しましょう。
- すべてのPythonソースファイルを
distutils
およびdistutils/command
サブディレクトリに含めます(これら2つのディレクトリに対応するパッケージがセットアップスクリプトのpackages
オプションで言及されているためです。セクションを参照してください)。セットアップスクリプトの作成) README.txt
、setup.py
、およびsetup.cfg
(標準ファイル)を含む- インクルード
test/test*.py
(標準ファイル) - 配布ルートに
*.txt
を含めます(これにより、README.txt
が再度検出されますが、このような冗長性は後で削除されます) examples
の下のサブツリーに*.txt
または*.py
に一致するものをすべて含めます。examples/sample?/build
に一致するディレクトリで始まるサブツリー内のすべてのファイルを除外します。これにより、前の2つの手順に含まれるファイルが除外される可能性があるため、マニフェストテンプレートのprune
コマンドが[ X223X] コマンドbuild
ツリー全体、およびRCS
、CVS
、.svn
、.hg
、.git
、[X98X ] および_darcs
ディレクトリ
セットアップスクリプトと同様に、マニフェストテンプレートのファイル名とディレクトリ名は常にスラッシュで区切る必要があります。 Distutilsは、それらをプラットフォーム上の標準表現に変換します。 このように、マニフェストテンプレートはオペレーティングシステム間で移植可能です。
4.3.2。 コマンド
マニフェストテンプレートコマンドは次のとおりです。
指示 | 説明 |
---|---|
pat1 pat2 ..を含める | リストされたパターンのいずれかに一致するすべてのファイルを含める |
pat1 pat2 ..を除外します。 | リストされたパターンのいずれかに一致するすべてのファイルを除外します |
再帰的-dirpat1 pat2 ..をインクルードします。 | リストされたパターンのいずれかに一致する dir の下のすべてのファイルを含める |
再帰的-dirpat1 pat2 ..を除外します。 | リストされたパターンのいずれかに一致する dir の下のすべてのファイルを除外します |
グローバル-pat1pat2を含む..。 | 一致するソースツリーの任意の場所にすべてのファイルを含めます—およびリストされたパターンのいずれか |
グローバル-pat1pat2を除外します..。 | 一致するソースツリー内の任意の場所にあるすべてのファイルを除外します—およびリストされているパターンのいずれか |
プルーンディレクトリ | dir の下のすべてのファイルを除外します |
グラフト方向 | dir の下にあるすべてのファイルを含める |
ここでのパターンは、Unixスタイルの「グロブ」パターンです。*
は通常のファイル名文字の任意のシーケンスに一致し、?
は任意の単一の通常のファイル名文字に一致し、[range]
は範囲の文字(例:a-z
、a-zA-Z
、a-f0-9_.
)。 「通常のファイル名文字」の定義はプラットフォーム固有です。Unixではスラッシュ以外のものです。 Windowsでは、円記号またはコロン以外のもの。