変更できない固定レイアウトの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
もあります data_files
data_files=[("yourdir",
["additionalstuff/moredata.txt", "INFO.txt"])],
これらのファイルを配置する場所について考えてください。詳細は docs をご覧ください。
package_data
を使用する必要があります。 setup.py
をルートディレクトリに置いて、次の手順を実行するだけです。
package_data={'': [
'somepackage/*.txt',
'additionalstuff/*.txt',
'*.txt',
]