web-dev-qa-db-ja.com

パッケージデータの一部としてdist utils(setup.py)を使用してサブディレクトリを含めることはできますか?

基本的に私のpythonパッケージは次のように設定されています:

module
\_examples
  \_folder1
     \_file1.py
     \_file2.py
  \_folder2
    \_file1.py
    \_file2.py

基本的に私は使用したいだけです:

package_data  = { 
            'module': ['examples/*'],
  },

私のプロジェクトには常にサンプルを追加する人がいて、アプリケーション内から簡単にリストできるようにしたいからです。私はそれを例の中のどのFILEでも機能させることができますが、サブディレクトリを通して再呪いすることはできません。これは可能ですか?

29
xamox

あなたが探しているものはあなたにとってこのようなものだと思いますsetup.py。これはプロジェクト内のパッケージを再帰的に見つけます。また、必要な各パッケージのサブディレクトリに__init__.pyファイルを含めてください。

from setuptools import setup, find_packages

setup(name='MySoftware',
      packages=find_packages()
)
39
defermat

そのためには MANIFEST.in ファイルを使用する必要があります。

私はあなたがこのようなものが欲しいと信じています:

 $ cat MANIFEST.in 
 recursive-include examples/* .py 
4
David Wolever

前書き

私はこの投稿に出会い、特定のサブモジュールをパッケージに追加する方法を考え出すのにしばらく時間を費やしたので、ここに私のソリューションを投稿します。

解決

私のパッケージルートフォルダーには、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 を参照してください。

3
Séraphin

はい、すべてのサブディレクトリを含めることができます。

以下の引数を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_を使用してはならない場合に通知する別のリンクです

1
ajays20078

提案された回答のいずれも、同様の状況ではうまくいきませんでした。

サブディレクトリにいくつかのサブモジュールを含むパッケージでディストリビューションを作成する必要があったので、これらは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ファイルを除外します。

0
stason

David Woleverの発言に従い、もう少し明確にするために。サブディレクトリフォルダーの下にすべてを含める場合は、MANIFEST.inで各ファイルを明示的に指定する必要があります。

recursive-include examples/ *.py *.png *.shなど..。

Manifest.inがexamples/とすべてを含めるが、まあ。

0