web-dev-qa-db-ja.com

pythonプロジェクトにはMANIFEST.inが必要ですか?

「Python配布」ガイド(python-distribute.orgにありましたが、登録は失効しました)には、doc/txtファイルを含めるように指示され、.pyファイルはMANIFEST.inファイルから除外されます

sourcedist documentation は、sdistがMANIFEST.inのみを使用し、指定したファイルと.pyファイルのみを含めることを示しています。 python setup.py sdist --manifest-onlyを使用してMANIFESTを生成しますが、pythonはこれが存在しないことを示します

これらはpythonの異なるバージョンのものであり、配布システムは完全に混乱していますが、python 3およびsetuptools(を含む新しいものを使用していると仮定すると配布されますが、現在はsetuptoolsと呼ばれます。配布ツールは、配布に戻され、setuptoolsに名前が変更されて配布されるために廃止された古いsetuptoolsではありません。

そして、私は「標準」フォルダ構造とsetup.pyファイルに従っています、

  1. MANIFEST.inが必要ですか?
  2. それには何が必要ですか?
  3. これらの異なるパッケージシステムと方法がすべて単一の単純なプロセスにされるのはいつですか?
96
Neil Walker

Re:「MANIFEST.inが必要ですか?

いいえ、MANIFEST.inを使用する必要はありません。 distutilssetuptoolsの両方は、ソース配布パッケージにsetup.py-モジュール、パッケージpythonファイル、README.txtおよびtest/test*.pyに記載されているすべてのファイルを含めています。配布パッケージにこれだけが必要な場合は、MANIFEST.inを使用する必要はありません。

含めるデフォルトのファイルを操作(追加または削除)する場合は、MANIFEST.inを使用する必要があります。

日時:何をすべきか?

手順は簡単です。

  1. setup.pyには、プログラムの実行に重要だと思うすべてのファイル(モジュール、パッケージ、スクリプトなど)を(setup引数によって)含めてください。

  2. 追加するファイルまたは除外するファイルがある場合は、明確にします。どちらも必要ない場合は、MANIFEST.inを使用する必要はありません。

  3. MANIFEST.inが必要な場合は、作成してください。通常、そこにtests*/*.pyファイル、README.rstdocsファイルを使用しない場合はREADME.txt、必要に応じてテストスイート用のデータファイルを追加します。

例えば:

include README.rst
include COPYING.txt

テストするには、python setup.py sdistを実行し、dist/の下に作成されたtarballを調べます。

これらすべての異なるパッケージシステムはいつ...

今日と2年前の状況を比較する-状況ははるかに良くなっています-setuptoolsが道です。事実は無視できます。distutilsは少し壊れており、setuptoolsの低レベルのベースであり、setuptoolsはこれらのことを隠します。

編集:最後のいくつかのプロジェクトは、pbrを使用して、3行のsetup.pyと残りがsetup.cfgrequirements.txtにある配布パッケージを構築します。 MANIFEST.inやその他の奇妙なものを気にする必要はありません。パッケージにはもう少しドキュメントが必要ですが。 http://docs.openstack.org/developer/pbr/ を参照してください

96
Jan Vlcinsky

古い質問、新しい答え:

いいえ、MANIFEST.inは必要ありません。ただし、setuptoolsを取得して(通常)意味することを行うには、setuptools_scmを使用する必要があります。これは、2つの主要な場所でMANIFEST.inの役割を果たします。

  • sdistコマンドの実行時にすべての関連ファイルがパッケージ化されるようにします(すべての関連ファイルは「ソース管理下のすべてのファイル」として定義されます)
  • include_package_dataを使用してbuildまたはbdist_wheelの一部としてパッケージデータを含める場合。 (再び:ソース管理下のファイル)

MANIFEST.inの歴史的な理解は、ソース管理システムがない場合、「ソースファイル」と「作業ディレクトリにあるファイル」を区別するための他のメカニズムが必要です。ただし、プロジェクトはソース管理下にあるので(右??)、MANIFEST.inは必要ありません。 この記事の詳細

1