web-dev-qa-db-ja.com

setuptools:パッケージ外にファイルを追加する

変更できない固定レイアウトのpythonアプリケーションがあります。 setuptoolsを使用してまとめたいと思います。 setup.pyスクリプトを記述します。

公式ドキュメントを使用して、最初のテンプレートを作成することができました。ただし、問題のアプリケーションは、パッケージに明示的に含まれていない追加のデータファイルを多数使用しています。次にソースツリーの例を示します。

somepackage
   __init__.py
   something.py
   data.txt
additionalstuff
   moredata.txt
INFO.txt

ここに問題があります:something.pyのコードは、ファイルmoredata.txtおよびINFO.txtを読み取ります。前者については、空のadditionalstuff/__init__.pyファイルを追加してadditionalstuffをパッケージにプロモートし、setuptoolsにピックアップさせることで、問題をサルパッチングできます。しかし、どうすればINFO.txt.Eggに追加できますか?

編集する

提案されたソリューションは、

package_data = { '' : ['moredata.txt','INFO.txt']}

ファイルmoredataおよびINFO.txtはパッケージに属していないが、個別のパッケージではなく、モジュール全体の一部である別のフォルダーの一部であるため、私にとっては機能しません。上で説明したように、これはmoredata.txtの場合、__init__.pyファイルをadditionpythonalstuffに追加してパッケージに昇格することで修正できます。ただし、これは洗練されたソリューションではなく、最上位ディレクトリにあるINFO.txtではまったく機能しません。

解決

受け入れられた答えに基づいて、ここに解決策があります

これはsetup.pyです:

from setuptools import setup, find_packages

setup(
    name='mytest',
    version='1.0.0',
    description='A sample Python project',
    author='Test',
    Zip_safe=False,
    author_email='[email protected]',
    keywords='test',
    packages=find_packages(),
    package_data={'': ['INFO.txt', 'moredata.txt'],
                  'somepackage':['data.txt']},
    data_files=[('.',['INFO.txt']),
                ('additionalstuff',['additionalstuff/moredata.txt'])],
    include_package_data=True,
)

そして、これがMANIFEST.inです。

include INFO.txt
graft additionalstuff
include somepackage/*.txt
19
carsten

もあります data_files

data_files=[("yourdir",
             ["additionalstuff/moredata.txt", "INFO.txt"])],

これらのファイルを配置する場所について考えてください。詳細は docs をご覧ください。

4
pacholik

package_dataを使用する必要があります。 setup.pyをルートディレクトリに置いて、次の手順を実行するだけです。

package_data={'': [
    'somepackage/*.txt',
    'additionalstuff/*.txt',
    '*.txt',
]
1