4. ソースディストリビューションの作成—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/distutils/sourcedist
移動先:案内検索

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

ノート:

  1. Windowsのデフォルト
  2. Unixのデフォルト
  3. 外部の zip ユーティリティまたは zipfile モジュール(Python 1.6以降の標準Pythonライブラリの一部)のいずれかが必要です
  4. compress プログラムが必要です。

Unixでtar形式(gztarbztarztartar)を使用する場合は、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/
  • RCSCVS.svn.hg.git.bzr、または_darcs

これで、ファイルの完全なリストができました。これは、将来の参照用にマニフェストに書き込まれ、ソース配布アーカイブの構築に使用されます。

--no-defaultsオプションを使用すると、含まれているファイルのデフォルトセットを無効にでき、--no-pruneを使用して標準の除外セットを無効にできます。

Distutils独自のマニフェストテンプレートに従って、 sdist コマンドがDistutilsソースディストリビューションに含めるファイルのリストをどのように作成するかを追跡しましょう。

  1. すべてのPythonソースファイルをdistutilsおよびdistutils/commandサブディレクトリに含めます(これら2つのディレクトリに対応するパッケージがセットアップスクリプトのpackagesオプションで言及されているためです。セクションを参照してください)。セットアップスクリプトの作成
  2. README.txtsetup.py、およびsetup.cfg(標準ファイル)を含む
  3. インクルードtest/test*.py(標準ファイル)
  4. 配布ルートに*.txtを含めます(これにより、README.txtが再度検出されますが、このような冗長性は後で削除されます)
  5. examplesの下のサブツリーに*.txtまたは*.pyに一致するものをすべて含めます。
  6. examples/sample?/buildに一致するディレクトリで始まるサブツリー内のすべてのファイルを除外します。これにより、前の2つの手順に含まれるファイルが除外される可能性があるため、マニフェストテンプレートのpruneコマンドが[ X223X] コマンド
  7. buildツリー全体、およびRCSCVS.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-za-zA-Za-f0-9_.)。 「通常のファイル名文字」の定義はプラットフォーム固有です。Unixではスラッシュ以外のものです。 Windowsでは、円記号またはコロン以外のもの。