python - पैकेज में कार्यान्वयन मॉड्यूल और सबडोम को छुपाएं



python-2.7 module (1)

मैं केवल मुख्य कार्यों को बेनकाब करने के लिए अपना कोड पैकेज करना चाहता हूं मेरी निर्देशिका इस तरह है:

./
  setup.py
  my_module/
    __init__.py
    public_functions.py
    internal_modules/
      __init__.py
      A.py
      B.py
      other_modules.py/
        __init__.py
        C.py

public_functions मैं internal_modules.A से कुछ कार्यों को आयात करते हैं, लेकिन C.pyC.py से नहीं, और दोनों A.py और B.py से कुछ फ़ंक्शन का उपयोग करता है।

मेरा setup.py इस प्रकार है:

from setuptools import setup

setup(name='my_module',
      version='0.1',
      description='my_awesome_module',
      author='Me',
      author_email='[email protected]',
      license='MIT',
      packages=['my_module'],
      zip_safe=False)

मैं इसे पीआईपी के साथ स्थापित करना चाहता हूं, लेकिन मैं अपने किसी भी आंतरिक_मॉड्यूल को अपने पैकेज से दिखने के लिए एक बार स्थापित होने के लिए नहीं चाहता।

मैं इसे ठीक से स्थापित कर सकता हूं लेकिन जब मैं करता हूं

from my_module import public_module

यह ImportError: no module named internal_modules.A फेंकता है ImportError: no module named internal_modules.A public_module.py की पहली पंक्ति में ImportError: no module named internal_modules.A

मुझे पता है कि अगर मैं my_module.internal_modules को एक और पैकेज के रूप में अपने setup.py घोषणा में my_module.internal_modules तो मैं इसे ठीक कर सकता हूं, लेकिन यह मेरे A.py B.py को स्थापित पैकेज़ से दिखाई जाने वाले A.py और B.py साथ सार्वजनिक करेगा।

मुझे यहां एक समान सवाल मिला लेकिन यह मेरे लिए काम नहीं कर रहा है


आप मॉड्यूल के नाम को रेखांकित करके आयात से मॉड्यूल के आंतरिक छुपा सकते हैं:

_yourmodulenamegoeshere।

ई: आप पैकेज के __init__ में __all__ को भी परिभाषित कर सकते हैं - केवल __all__ के मॉड्यूल नाम आयात * के माध्यम से आयात किए जाएंगे।





packages