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

提供:Dev Guides
< PythonPython/docs/3.6/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
xztar xzされたtarファイル(.tar.xz
ztar 圧縮されたtarファイル(.tar.Z (4)
tar tarファイル(.tar

バージョン3.5で変更: xztar形式のサポートが追加されました。


ノート:

  1. Windowsのデフォルト
  2. Unixのデフォルト
  3. 外部 zip ユーティリティまたは zipfile モジュール(Python 1.6以降の標準Pythonライブラリの一部)のいずれかが必要です
  4. compress プログラムが必要です。 この形式は現在非推奨であり、Pythonの将来のバージョンで削除されることに注意してください。

tar形式(gztarbztarxztarztar、またはtar)を使用する場合、Unixではアーカイブの各メンバーに設定される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を提供する場合は、すべてを指定する必要があります。この場合、上記のデフォルトのファイルセットは適用されません。

バージョン3.1での変更:既存の生成されたMANIFESTは、 sdist が変更時間をMANIFEST.inまたは [のいずれかと比較せずに再生成されます。 X171X]。


バージョン3.1.3で変更: MANIFESTファイルは、生成されたことを示すコメントで始まります。 このコメントのないファイルは上書きまたは削除されません。


バージョン3.2.2で変更: sdist は、MANIFEST.inが存在しない場合、以前のようにMANIFESTファイルを読み取ります。


マニフェストテンプレートには、1行に1つのコマンドがあり、各コマンドは、ソースディストリビューションに含めるまたはソースディストリビューションから除外するファイルのセットを指定します。 例として、ここでもDistutils独自のマニフェストテンプレートに目を向けます。

include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build

意味はかなり明確である必要があります。*.txtに一致するディストリビューションルート内のすべてのファイル、*.txtまたは*.pyに一致するexamplesディレクトリの下のすべてのファイルを含めます。 examples/sample?/buildに一致するすべてのディレクトリを除外します。 これはすべて、標準インクルードセットの後に実行されるため、マニフェストテンプレートの明示的な指示を使用して、標準セットからファイルを除外できます。 (または、--no-defaultsオプションを使用して、標準セットを完全に無効にすることができます。)マニフェストテンプレートミニ言語で使用できるコマンドは他にもいくつかあります。 セクションソースディストリビューションの作成:sdistコマンドを参照してください。

マニフェストテンプレート内のコマンドの順序は重要です。最初は、上記のようにデフォルトファイルのリストがあり、テンプレート内の各コマンドはそのファイルのリストに追加またはリストから削除します。 マニフェストテンプレートを完全に処理したら、ソースディストリビューションに含めるべきではないファイルを削除します。

  • 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は、それらをプラットフォーム上の標準表現に変換します。 このように、マニフェストテンプレートはオペレーティングシステム間で移植可能です。