基本的に私のpythonパッケージは次のように設定されています:
module
\_examples
\_folder1
\_file1.py
\_file2.py
\_folder2
\_file1.py
\_file2.py
基本的に私は使用したいだけです:
package_data = {
'module': ['examples/*'],
},
私のプロジェクトには常にサンプルを追加する人がいて、アプリケーション内から簡単にリストできるようにしたいからです。私はそれを例の中のどのFILEでも機能させることができますが、サブディレクトリを通して再呪いすることはできません。これは可能ですか?
あなたが探しているものはあなたにとってこのようなものだと思いますsetup.py
。これはプロジェクト内のパッケージを再帰的に見つけます。また、必要な各パッケージのサブディレクトリに__init__.py
ファイルを含めてください。
from setuptools import setup, find_packages
setup(name='MySoftware',
packages=find_packages()
)
そのためには MANIFEST.in
ファイルを使用する必要があります。
私はあなたがこのようなものが欲しいと信じています:
$ cat MANIFEST.in recursive-include examples/* .py
私はこの投稿に出会い、特定のサブモジュールをパッケージに追加する方法を考え出すのにしばらく時間を費やしたので、ここに私のソリューションを投稿します。
私のパッケージルートフォルダーには、setup.py
ファイル ドキュメントを参照
このファイルには、次のコードがあります。
from setuptools import setup
with open("README.md", "r") as fh:
long_description = fh.read()
setup(
name='package name',
version='0.4.1',
description='short description',
long_description=long_description,
long_description_content_type="text/markdown",
url='repository url',
author='My name',
author_email='[email protected]',
license='MIT',
packages=['PackageName','PackageName.SubModule'],
Zip_safe=False,
install_requires=[
'dependecy1',
],
classifiers=[
'Development Status :: 3 - Alpha',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.7'
]
)
質問に答える興味深い部分は、ここにあります:packages=['PackageName','PackageName.SubModule'],
この構文に従うことにより、メインパッケージのディストリビューションにサブモジュールを含めることができます。
他のすべての引数の詳細については、 doc を参照してください。
はい、すべてのサブディレクトリを含めることができます。
以下の引数をsetup()関数に渡すだけです:
_packages=find_packages()
include_package_data=True
_
これに加えて、次のような内容のMANIFEST.inファイルが必要です。
_recursive-include examples *
_
これにより、すべてのファイルが再帰的に含まれます。
特定の拡張機能を明確に除外する場合は、find_packages()
引数でexclude arrayを指定することにより、除外できます。
例:_.txt
_ファイルを除外するには
_packages=find_packages(exclude=['.txt'])
_
_include_package_data
_ here についての詳細を読むことができます。
また、 here は、_include_package_data
_を使用してはならない場合に通知する別のリンクです
提案された回答のいずれも、同様の状況ではうまくいきませんでした。
サブディレクトリにいくつかのサブモジュールを含むパッケージでディストリビューションを作成する必要があったので、これらはsdist
に移動するために必要なファイルでした:
ipyexperiments/*py
ipyexperiments/utils/*py
何を試しても、サブディレクトリutils
のモジュールはsdist
に含まれていませんでした。
私にとってうまくいったのは、config.py
をデフォルトのままにすることです。
# config.py
from setuptools import setup, find_packages
[...]
setup(
packages = find_packages(),
[...]
)
MANIFEST.in
に追加:
# MANIFEST.in
graft ipyexperiments
ipyexperiments
の下のすべてが含まれていました。
MANIFEST.in
にも追加しました
Prune tests
global-exclude *.py[co]
すべてのtests
ディレクトリと不要な*pyc
および*.pyo
ファイルを除外します。
David Woleverの発言に従い、もう少し明確にするために。サブディレクトリフォルダーの下にすべてを含める場合は、MANIFEST.inで各ファイルを明示的に指定する必要があります。
recursive-include examples/ *.py *.png *.sh
など..。
Manifest.inがexamples/
とすべてを含めるが、まあ。