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




distutils setup.py (4)

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

from setuptools import find_packages

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

https://code.i-harness.com

जब 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 ...
)

मैं ऐसे setuptools साथ उपलब्ध find_packages () समारोह का उपयोग करने की सिफारिश करेंगे:

from setuptools import setup, find_packages

और फिर करते हैं

packages=find_packages()

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