python - पायथन में गड़बड़ी को स्वचालित रूप से पैकेज पाते हैं




distutils setup.py (3)

Dm76 के उत्तर के रूप में भी यही, मेरे रेपो में भी परीक्षण हैं, इसलिए मैं उपयोग करता हूं:

from setuptools import find_packages

packages=find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),

जब 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 तरह चीजों को खोजने के बाद से वे एक init फ़ाइल है। धन्यवाद।


पैकेज प्राप्त करने के लिए 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 ...
)

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()
...
)




setup.py