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.py
। C.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__
के मॉड्यूल नाम आयात * के माध्यम से आयात किए जाएंगे।