Pythonのdistutils
のsetup.py
のpythonパッケージ)を記述するときに、__init__.py
を持つすべてのディレクトリを自動的に取得する方法はありますかその中にサブパッケージとして含めますか?
すなわち、構造が次の場合:
mypackage/__init__.py
mypackage/a/__init__.py
mypackage/b/__init__.py
私はすることを避けたい:
packages = ['mypackage', 'mypackage.a', 'mypackage.b']
代わりに次のようにします:
packages = ['mypackage']
また、a
やb
などの初期化ファイルがあるため、自動的に検出するようにします。ありがとう。
(私が知っている)最も簡単な方法は pkgutil.walk_packages
パッケージを生成するには:
from distutils.core import setup
from pkgutil import walk_packages
import mypackage
def find_packages(path=__path__, prefix=""):
yield prefix
prefix = prefix + "."
for _, name, ispkg in walk_packages(path, prefix):
if ispkg:
yield name
setup(
# ... snip ...
packages = list(find_packages(mypackage.__path__, mypackage.__name__)),
# ... snip ...
)
setuptools で利用可能なfind_packages()関数を使用することをお勧めします:
from setuptools import setup, find_packages
してから
packages=find_packages()
Dm76の回答と同じですが、レポジトリにもテストがあるため、以下を使用します。
from setuptools import find_packages
packages=find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
import re, os
def find_packages(path='.'):
ret = []
for root, dirs, files in os.walk(path):
if '__init__.py' in files:
ret.append(re.sub('^[^A-z0-9_]+', '', root.replace('/', '.')))
return ret
setup(
...
packages = find_packages()
...
)