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


120

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

sourcedistドキュメントはのみsdistの用途私に語ったMANIFEST.inだけで、指定して含めるファイルが含ま.pyファイルを。また、使用するように指示します:python setup.py sdist --manifest-onlyを生成しますMANIFESTが、Pythonはこれが存在しないことを教えてくれます

私はこれらが異なるバージョンのpythonからのものであり、配布システムが完全に混乱していることに感謝しますが、私がpython 3とsetuptools(distributeを含むが、現在はsetuptoolsと呼ばれている新しいものを使用していると仮定します)配布に戻して、名前をsetuptools .....に変更して配布します。

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

  1. 私は必要MANIFEST.inですか?
  2. その中に何があるべきですか?
  3. これらの異なるパッケージシステムとメソッドのすべてが1つの単純なプロセスになるのはいつですか?

回答:


117

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

いいえ、使用する必要はありませんMANIFEST.in。両方、distutilsおよび-モジュール、パッケージPythonファイル、 およびでsetuptools言及されているすべてのファイルをソース配布パッケージに含めています。これが配布パッケージに含めたいすべての場合、を使用する必要はありません。setup.pyREADME.txttest/test*.pyMANIFEST.in

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

Re:何を入れるべきですか?

手順は簡単です:

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

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

  3. MANIFEST.in必要な場合は作成してください。通常、あなたはそこに追加しtests*/*.py、ファイルをREADME.rstあなたが使用していない場合はREADME.txtdocs必要に応じて、テストスイートのためのファイルとおそらくいくつかのデータファイルを。

例えば:

include README.rst
include COPYING.txt

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

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

今日と2年前の状況を比較する-状況ははるかに良くなっています- setuptools進むべき道です。あなたは事実を無視することができ、distutils少し壊れておりsetuptoolssetuptools、あなたからこれらの事を隠すの世話をしなければなりません。

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


1
私の限られた経験では、Pythonモジュール(init .pyのディレクトリ)内にないファイルを含める場合は、MANIFEST.inを使用してsdist(手段:ソース配布)コマンドを使用する必要があるようです。あなたはそれを考慮した場合bdistbdist_wheelされているバイナリのみあなたのpythonのパスにインストールされることを意図し、これは理にかなっています。(これらの非モジュールファイルとディレクトリはどこに移動しますか?In /usr/local/lib/python2.7/dist-packages/?確かにそうではありません。)しかし、作成されたアーカイブを確認するのが混乱し、それらにファイルが含まれていないため、言及する価値があります。
Bruno Bronosky、2015年

7
必然的にオフに頭にpackage_dataしてdata_files範囲外の勧告を、私は続けます。* .py名がないためスキップpackage_dataされdist-packages/yourpackageたパッケージとともにインストールされるファイルをリストします。data_filesパッケージ外にインストールされるファイルをリストします。各エントリsys.prefixは、相対パスの場合は接頭辞が付いたターゲットパスを指定します/
Bruno Bronosky、2015年

2
@JanVlcinskyは何であるかを知ることが重要であり、[より重要なこと] 異なる配布形式に含まれていません。パッケージの外(ルート)にboto.sample.cfgファイル(偽のAWS IAM認証情報を含む)を含め、バイナリ配布には含まれていないため、ソース配布でのみ配布するパブリックプロジェクトがあります。私はdata_files = [( '/ etc /'、['boto.cfg'])]を含む本番環境にデプロイするためのプライベートバイナリビルドを作成します。py以外のファイルを配布する場合は、これらがどのように機能するかを知っている必要があります。
Bruno Bronosky、2015年

2
@MichaelGoerz正直なところ、そうすべきではありません。この答えは古く、提案pbrも悪い考えです。
Arne、

1
@Ame同意し、事は進みました。現在、ほとんどのプロジェクトをpbrから
Jan Vlcinsky 2018

7

古い質問、新しい答え:

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.