おそらくこれを行うための最良の方法は、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
Aを使用してファイルを.py
拡張子の。
詳細については、Ian Bickingのプレゼンテーションを参照してください。
更新:別の[より良い]アプローチ
ソース配布(sdist
)のコンテンツを制御し、パッケージの外部にファイル(たとえば、最上位ディレクトリ)を置きたいだけの場合にうまく機能する別のアプローチは、MANIFEST.in
ファイルを追加することです。このファイルの形式については、Pythonのドキュメントを参照してください。
この応答を書いて以来MANIFEST.in
、ソース配布(tar.gz
)に必要なファイルが含まれていることを確認するだけで、通常はを使用した方がイライラすることは少ないことがわかりました。
たとえばrequirements.txt
、最上位のfrom を含める場合は、最上位の「データ」ディレクトリを再帰的に含めます。
include requirements.txt
recursive-include data *
それにもかかわらず、これらのファイルをインストール時にsite-packages内のパッケージのフォルダーにコピーするinclude_package_data=True
には、setup()
関数に供給する必要があります。詳細については、非コードファイルの追加を参照してください。