コードの一部ではないファイルを組み込むにはどうすればよいですかsetup.py
? (具体的にはライセンス ファイルですが、他のファイルでもかまいません。)
ファイルの場所を制御できるようにしたいです。元のソース フォルダーでは、ファイルはパッケージのルートにあります。(つまり、最上位と同じレベルです__init__.py
。) オペレーティング システムに関係なく、パッケージがインストールされたときに、ファイルがそこに正確に残るようにしたいです。どうすればいいですか?
ベストアンサー1
おそらく、これを行う最良の方法は、setuptools
package_data
ディレクティブを使用することです。これは、setuptools
(またはdistribute
) の代わりに を使用しますdistutils
が、これは非常にシームレスな「アップグレード」です。
完全な(ただしテストされていない)例を以下に示します。
from setuptools import setup, find_packages
setup(
name='your_project_name',
version='0.1',
description='A description.',
packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),
package_data={'': ['license.txt']},
include_package_data=True,
install_requires=[],
)
ここで重要な特定の行に注意してください。
package_data={'': ['license.txt']},
include_package_data=True,
package_data
は、パッケージ名 (空 = すべてのパッケージ) とパターンのリスト (グロブを含むことができます) の組み合わせですdict
。たとえば、パッケージ内のファイルのみを指定したい場合は、次のようにすることもできます。
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
ここでの解決策は、拡張子のないファイルの名前を変更しないことです。py
.py
見るイアン・ビッキングのプレゼンテーション詳細については。
更新: 別の[より良い]アプローチ
sdist
ソース配布物( )の内容を制御し、パッケージ外(トップレベルディレクトリなど)にファイルを置くだけの場合に適した別の方法は、MANIFEST.in
ファイルを追加することです。Pythonドキュメントこのファイルの形式については、
MANIFEST.in
この回答を書いてから、ソース ディストリビューション ( tar.gz
) に必要なファイルが含まれているかどうかを確認するには、を使用するのが通常はそれほどストレスのかからない方法であることがわかりました。
たとえば、requirements.txt
最上位レベルから含める場合は、最上位レベルの「data」ディレクトリを再帰的に含めます。
include requirements.txt
recursive-include data *
ただし、これらのファイルをインストール時にsite-packages内のパッケージのフォルダにコピーするには、関数include_package_data=True
に提供する必要がありますsetup()
。非コードファイルの追加詳細については。